diff --git a/documentation/aacEncoder.pdf b/documentation/aacEncoder.pdf index 84100eb..e8420b1 100644 --- a/documentation/aacEncoder.pdf +++ b/documentation/aacEncoder.pdf @@ -109,552 +109,514 @@ endobj (\376\377\000A\000u\000d\000i\000o\000\040\000Q\000u\000a\000l\000i\000t\000y\000\040\000C\000o\000n\000s\000i\000d\000e\000r\000a\000t\000i\000o\000n\000s) endobj 73 0 obj -<< /S /GoTo /D (section.2.10) >> +<< /S /GoTo /D (subsection.2.9.4) >> endobj 76 0 obj -(\376\377\000A\000u\000d\000i\000o\000\040\000C\000h\000a\000n\000n\000e\000l\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) +(\376\377\000E\000L\000D\000\040\000A\000u\000t\000o\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000M\000o\000d\000e) endobj 77 0 obj -<< /S /GoTo /D (section.2.11) >> +<< /S /GoTo /D (section.2.10) >> endobj 80 0 obj -(\376\377\000S\000u\000p\000p\000o\000r\000t\000e\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000s) +(\376\377\000A\000u\000d\000i\000o\000\040\000C\000h\000a\000n\000n\000e\000l\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) endobj 81 0 obj -<< /S /GoTo /D (section.2.12) >> +<< /S /GoTo /D (section.2.11) >> endobj 84 0 obj -(\376\377\000R\000e\000c\000o\000m\000m\000e\000n\000d\000e\000d\000\040\000S\000a\000m\000p\000l\000i\000n\000g\000\040\000R\000a\000t\000e\000\040\000a\000n\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000\040\000C\000o\000m\000b\000i\000n\000a\000t\000i\000o\000n\000s) +(\376\377\000S\000u\000p\000p\000o\000r\000t\000e\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000s) endobj 85 0 obj -<< /S /GoTo /D (subsection.2.12.1) >> +<< /S /GoTo /D (section.2.12) >> endobj 88 0 obj -(\376\377\000A\000A\000C\000-\000L\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000v\0002\000.) +(\376\377\000R\000e\000c\000o\000m\000m\000e\000n\000d\000e\000d\000\040\000S\000a\000m\000p\000l\000i\000n\000g\000\040\000R\000a\000t\000e\000\040\000a\000n\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000\040\000C\000o\000m\000b\000i\000n\000a\000t\000i\000o\000n\000s) endobj 89 0 obj -<< /S /GoTo /D (subsection.2.12.2) >> +<< /S /GoTo /D (subsection.2.12.1) >> endobj 92 0 obj -(\376\377\000A\000A\000C\000-\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000\040\000w\000i\000t\000h\000\040\000S\000B\000R\000.) +(\376\377\000A\000A\000C\000-\000L\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000v\0002\000\040\000i\000n\000\040\000D\000u\000a\000l\000r\000a\000t\000e\000\040\000S\000B\000R\000\040\000m\000o\000d\000e\000.) endobj 93 0 obj -<< /S /GoTo /D (chapter.3) >> +<< /S /GoTo /D (subsection.2.12.2) >> endobj 96 0 obj -(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000B\000e\000h\000a\000v\000i\000o\000u\000r) +(\376\377\000A\000A\000C\000-\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000\040\000w\000i\000t\000h\000\040\000S\000B\000R\000\040\000i\000n\000\040\000D\000u\000a\000l\000r\000a\000t\000e\000\040\000S\000B\000R\000\040\000m\000o\000d\000e\000.) endobj 97 0 obj -<< /S /GoTo /D (section.3.1) >> +<< /S /GoTo /D (subsection.2.12.3) >> endobj 100 0 obj -(\376\377\000B\000a\000n\000d\000w\000i\000d\000t\000h) +(\376\377\000A\000A\000C\000-\000E\000L\000D\000\040\000w\000i\000t\000h\000\040\000S\000B\000R\000\040\000i\000n\000\040\000D\000o\000w\000n\000s\000a\000m\000p\000l\000e\000d\000\040\000S\000B\000R\000\040\000m\000o\000d\000e\000.) endobj 101 0 obj -<< /S /GoTo /D (section.3.2) >> +<< /S /GoTo /D (chapter.3) >> endobj 104 0 obj -(\376\377\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s\000\040\000\046\000\040\000B\000i\000t\000\040\000R\000e\000s\000e\000r\000v\000o\000i\000r) +(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000B\000e\000h\000a\000v\000i\000o\000u\000r) endobj 105 0 obj -<< /S /GoTo /D (subsection.3.2.1) >> +<< /S /GoTo /D (section.3.1) >> endobj 108 0 obj -(\376\377\000E\000s\000t\000i\000m\000a\000t\000i\000n\000g\000\040\000A\000v\000e\000r\000a\000g\000e\000\040\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s) +(\376\377\000B\000a\000n\000d\000w\000i\000d\000t\000h) endobj 109 0 obj -<< /S /GoTo /D (section.3.3) >> +<< /S /GoTo /D (section.3.2) >> endobj 112 0 obj -(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000T\000o\000o\000l\000s) +(\376\377\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s\000\040\000\046\000\040\000B\000i\000t\000\040\000R\000e\000s\000e\000r\000v\000o\000i\000r) endobj 113 0 obj -<< /S /GoTo /D (chapter.4) >> +<< /S /GoTo /D (subsection.3.2.1) >> endobj 116 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\000E\000s\000t\000i\000m\000a\000t\000i\000n\000g\000\040\000A\000v\000e\000r\000a\000g\000e\000\040\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s) endobj 117 0 obj -<< /S /GoTo /D (section.4.1) >> +<< /S /GoTo /D (section.3.3) >> endobj 120 0 obj -(\376\377\000A\000r\000g\000u\000m\000e\000n\000t\000s) +(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000T\000o\000o\000l\000s) endobj 121 0 obj -<< /S /GoTo /D (subsection.4.1.1) >> +<< /S /GoTo /D (chapter.4) >> endobj 124 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\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x) endobj 125 0 obj -<< /S /GoTo /D (subsection.4.1.2) >> +<< /S /GoTo /D (section.4.1) >> endobj 128 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\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t) endobj 129 0 obj << /S /GoTo /D (chapter.5) >> endobj 132 0 obj -(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x) +(\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x) endobj 133 0 obj << /S /GoTo /D (section.5.1) >> endobj 136 0 obj -(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t) +(\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t) endobj 137 0 obj << /S /GoTo /D (chapter.6) >> endobj 140 0 obj -(\376\377\000F\000i\000l\000e\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 141 0 obj << /S /GoTo /D (section.6.1) >> endobj 144 0 obj -(\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t) -endobj -145 0 obj -<< /S /GoTo /D (chapter.7) >> -endobj -148 0 obj -(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) -endobj -149 0 obj -<< /S /GoTo /D (section.7.1) >> -endobj -152 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000B\000u\000f\000D\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj +145 0 obj +<< /S /GoTo /D (subsection.6.1.1) >> +endobj +148 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 +149 0 obj +<< /S /GoTo /D (subsection.6.1.2) >> +endobj +152 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) +endobj 153 0 obj -<< /S /GoTo /D (subsection.7.1.1) >> +<< /S /GoTo /D (subsubsection.6.1.2.1) >> endobj 156 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 -157 0 obj -<< /S /GoTo /D (subsection.7.1.2) >> -endobj -160 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) -endobj -161 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.1) >> -endobj -164 0 obj (\376\377\000b\000u\000f\000E\000l\000S\000i\000z\000e\000s) endobj -165 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.2) >> +157 0 obj +<< /S /GoTo /D (subsubsection.6.1.2.2) >> endobj -168 0 obj +160 0 obj (\376\377\000b\000u\000f\000f\000e\000r\000I\000d\000e\000n\000t\000i\000f\000i\000e\000r\000s) endobj -169 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.3) >> +161 0 obj +<< /S /GoTo /D (subsubsection.6.1.2.3) >> endobj -172 0 obj +164 0 obj (\376\377\000b\000u\000f\000s) endobj -173 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.4) >> +165 0 obj +<< /S /GoTo /D (subsubsection.6.1.2.4) >> endobj -176 0 obj +168 0 obj (\376\377\000b\000u\000f\000S\000i\000z\000e\000s) endobj -177 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.5) >> +169 0 obj +<< /S /GoTo /D (subsubsection.6.1.2.5) >> endobj -180 0 obj +172 0 obj (\376\377\000n\000u\000m\000B\000u\000f\000s) endobj -181 0 obj -<< /S /GoTo /D (section.7.2) >> +173 0 obj +<< /S /GoTo /D (section.6.2) >> endobj -184 0 obj +176 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000I\000n\000A\000r\000g\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj +177 0 obj +<< /S /GoTo /D (subsection.6.2.1) >> +endobj +180 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 +181 0 obj +<< /S /GoTo /D (subsection.6.2.2) >> +endobj +184 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) +endobj 185 0 obj -<< /S /GoTo /D (subsection.7.2.1) >> +<< /S /GoTo /D (subsubsection.6.2.2.1) >> endobj 188 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\000n\000u\000m\000A\000n\000c\000B\000y\000t\000e\000s) endobj 189 0 obj -<< /S /GoTo /D (subsection.7.2.2) >> +<< /S /GoTo /D (subsubsection.6.2.2.2) >> endobj 192 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\000n\000u\000m\000I\000n\000S\000a\000m\000p\000l\000e\000s) endobj 193 0 obj -<< /S /GoTo /D (subsubsection.7.2.2.1) >> +<< /S /GoTo /D (section.6.3) >> endobj 196 0 obj -(\376\377\000n\000u\000m\000A\000n\000c\000B\000y\000t\000e\000s) -endobj -197 0 obj -<< /S /GoTo /D (subsubsection.7.2.2.2) >> -endobj -200 0 obj -(\376\377\000n\000u\000m\000I\000n\000S\000a\000m\000p\000l\000e\000s) -endobj -201 0 obj -<< /S /GoTo /D (section.7.3) >> -endobj -204 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000I\000n\000f\000o\000S\000t\000r\000u\000c\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj +197 0 obj +<< /S /GoTo /D (subsection.6.3.1) >> +endobj +200 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 +201 0 obj +<< /S /GoTo /D (subsection.6.3.2) >> +endobj +204 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) +endobj 205 0 obj -<< /S /GoTo /D (subsection.7.3.1) >> +<< /S /GoTo /D (subsubsection.6.3.2.1) >> endobj 208 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 -209 0 obj -<< /S /GoTo /D (subsection.7.3.2) >> -endobj -212 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) -endobj -213 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.1) >> -endobj -216 0 obj (\376\377\000c\000o\000n\000f\000B\000u\000f) endobj -217 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.2) >> +209 0 obj +<< /S /GoTo /D (subsubsection.6.3.2.2) >> endobj -220 0 obj +212 0 obj (\376\377\000c\000o\000n\000f\000S\000i\000z\000e) endobj -221 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.3) >> +213 0 obj +<< /S /GoTo /D (subsubsection.6.3.2.3) >> endobj -224 0 obj +216 0 obj (\376\377\000e\000n\000c\000o\000d\000e\000r\000D\000e\000l\000a\000y) endobj -225 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.4) >> +217 0 obj +<< /S /GoTo /D (subsubsection.6.3.2.4) >> endobj -228 0 obj +220 0 obj (\376\377\000f\000r\000a\000m\000e\000L\000e\000n\000g\000t\000h) endobj -229 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.5) >> +221 0 obj +<< /S /GoTo /D (subsubsection.6.3.2.5) >> endobj -232 0 obj +224 0 obj (\376\377\000i\000n\000B\000u\000f\000F\000i\000l\000l\000L\000e\000v\000e\000l) endobj -233 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.6) >> +225 0 obj +<< /S /GoTo /D (subsubsection.6.3.2.6) >> endobj -236 0 obj +228 0 obj (\376\377\000i\000n\000p\000u\000t\000C\000h\000a\000n\000n\000e\000l\000s) endobj -237 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.7) >> +229 0 obj +<< /S /GoTo /D (subsubsection.6.3.2.7) >> endobj -240 0 obj +232 0 obj (\376\377\000m\000a\000x\000A\000n\000c\000B\000y\000t\000e\000s) endobj -241 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.8) >> +233 0 obj +<< /S /GoTo /D (subsubsection.6.3.2.8) >> endobj -244 0 obj +236 0 obj (\376\377\000m\000a\000x\000O\000u\000t\000B\000u\000f\000B\000y\000t\000e\000s) endobj -245 0 obj -<< /S /GoTo /D (section.7.4) >> +237 0 obj +<< /S /GoTo /D (section.6.4) >> endobj -248 0 obj +240 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000M\000e\000t\000a\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj +241 0 obj +<< /S /GoTo /D (subsection.6.4.1) >> +endobj +244 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 +245 0 obj +<< /S /GoTo /D (subsection.6.4.2) >> +endobj +248 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) +endobj 249 0 obj -<< /S /GoTo /D (subsection.7.4.1) >> +<< /S /GoTo /D (subsubsection.6.4.2.1) >> endobj 252 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 -253 0 obj -<< /S /GoTo /D (subsection.7.4.2) >> -endobj -256 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) -endobj -257 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.1) >> -endobj -260 0 obj (\376\377\000c\000e\000n\000t\000e\000r\000M\000i\000x\000L\000e\000v\000e\000l) endobj -261 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.2) >> +253 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.2) >> endobj -264 0 obj +256 0 obj (\376\377\000c\000o\000m\000p\000\137\000p\000r\000o\000f\000i\000l\000e) endobj -265 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.3) >> +257 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.3) >> endobj -268 0 obj +260 0 obj (\376\377\000c\000o\000m\000p\000\137\000T\000a\000r\000g\000e\000t\000R\000e\000f\000L\000e\000v\000e\000l) endobj -269 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.4) >> +261 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.4) >> endobj -272 0 obj +264 0 obj (\376\377\000d\000o\000l\000b\000y\000S\000u\000r\000r\000o\000u\000n\000d\000M\000o\000d\000e) endobj -273 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.5) >> +265 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.5) >> endobj -276 0 obj +268 0 obj (\376\377\000d\000r\000c\000\137\000p\000r\000o\000f\000i\000l\000e) endobj -277 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.6) >> +269 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.6) >> endobj -280 0 obj +272 0 obj (\376\377\000d\000r\000c\000\137\000T\000a\000r\000g\000e\000t\000R\000e\000f\000L\000e\000v\000e\000l) endobj -281 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.7) >> +273 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.7) >> endobj -284 0 obj +276 0 obj (\376\377\000E\000T\000S\000I\000\137\000D\000m\000x\000L\000v\000l\000\137\000p\000r\000e\000s\000e\000n\000t) endobj -285 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.8) >> +277 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.8) >> endobj -288 0 obj +280 0 obj (\376\377\000P\000C\000E\000\137\000m\000i\000x\000d\000o\000w\000n\000\137\000i\000d\000x\000\137\000p\000r\000e\000s\000e\000n\000t) endobj -289 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.9) >> +281 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.9) >> endobj -292 0 obj +284 0 obj (\376\377\000p\000r\000o\000g\000\137\000r\000e\000f\000\137\000l\000e\000v\000e\000l) endobj -293 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.10) >> +285 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.10) >> endobj -296 0 obj +288 0 obj (\376\377\000p\000r\000o\000g\000\137\000r\000e\000f\000\137\000l\000e\000v\000e\000l\000\137\000p\000r\000e\000s\000e\000n\000t) endobj -297 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.11) >> +289 0 obj +<< /S /GoTo /D (subsubsection.6.4.2.11) >> endobj -300 0 obj +292 0 obj (\376\377\000s\000u\000r\000r\000o\000u\000n\000d\000M\000i\000x\000L\000e\000v\000e\000l) endobj -301 0 obj -<< /S /GoTo /D (section.7.5) >> +293 0 obj +<< /S /GoTo /D (section.6.5) >> endobj -304 0 obj +296 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000O\000u\000t\000A\000r\000g\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj -305 0 obj -<< /S /GoTo /D (subsection.7.5.1) >> +297 0 obj +<< /S /GoTo /D (subsection.6.5.1) >> endobj -308 0 obj +300 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 -309 0 obj -<< /S /GoTo /D (subsection.7.5.2) >> +301 0 obj +<< /S /GoTo /D (subsection.6.5.2) >> endobj -312 0 obj +304 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) endobj -313 0 obj -<< /S /GoTo /D (subsubsection.7.5.2.1) >> +305 0 obj +<< /S /GoTo /D (subsubsection.6.5.2.1) >> endobj -316 0 obj +308 0 obj (\376\377\000n\000u\000m\000A\000n\000c\000B\000y\000t\000e\000s) endobj -317 0 obj -<< /S /GoTo /D (subsubsection.7.5.2.2) >> +309 0 obj +<< /S /GoTo /D (subsubsection.6.5.2.2) >> endobj -320 0 obj +312 0 obj (\376\377\000n\000u\000m\000I\000n\000S\000a\000m\000p\000l\000e\000s) endobj -321 0 obj -<< /S /GoTo /D (subsubsection.7.5.2.3) >> +313 0 obj +<< /S /GoTo /D (subsubsection.6.5.2.3) >> endobj -324 0 obj +316 0 obj (\376\377\000n\000u\000m\000O\000u\000t\000B\000y\000t\000e\000s) endobj -325 0 obj -<< /S /GoTo /D (chapter.8) >> +317 0 obj +<< /S /GoTo /D (chapter.7) >> endobj -328 0 obj +320 0 obj (\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj -329 0 obj -<< /S /GoTo /D (section.8.1) >> +321 0 obj +<< /S /GoTo /D (section.7.1) >> endobj -332 0 obj +324 0 obj (\376\377\000a\000a\000c\000e\000n\000c\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 -333 0 obj -<< /S /GoTo /D (subsection.8.1.1) >> +325 0 obj +<< /S /GoTo /D (subsection.7.1.1) >> endobj -336 0 obj +328 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 -337 0 obj -<< /S /GoTo /D (subsection.8.1.2) >> +329 0 obj +<< /S /GoTo /D (subsection.7.1.2) >> endobj -340 0 obj +332 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) endobj -341 0 obj -<< /S /GoTo /D (subsubsection.8.1.2.1) >> +333 0 obj +<< /S /GoTo /D (subsubsection.7.1.2.1) >> endobj -344 0 obj +336 0 obj (\376\377\000H\000A\000N\000D\000L\000E\000\137\000A\000A\000C\000E\000N\000C\000O\000D\000E\000R) endobj -345 0 obj -<< /S /GoTo /D (subsection.8.1.3) >> +337 0 obj +<< /S /GoTo /D (subsection.7.1.3) >> endobj -348 0 obj +340 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) endobj -349 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.1) >> +341 0 obj +<< /S /GoTo /D (subsubsection.7.1.3.1) >> endobj -352 0 obj +344 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000B\000u\000f\000f\000e\000r\000I\000d\000e\000n\000t\000i\000f\000i\000e\000r) endobj -353 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.2) >> +345 0 obj +<< /S /GoTo /D (subsubsection.7.1.3.2) >> endobj -356 0 obj +348 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000C\000T\000R\000L\000F\000L\000A\000G\000S) endobj -357 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.3) >> +349 0 obj +<< /S /GoTo /D (subsubsection.7.1.3.3) >> endobj -360 0 obj +352 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000E\000R\000R\000O\000R) endobj -361 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.4) >> +353 0 obj +<< /S /GoTo /D (subsubsection.7.1.3.4) >> endobj -364 0 obj +356 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000M\000E\000T\000A\000D\000A\000T\000A\000\137\000D\000R\000C\000\137\000P\000R\000O\000F\000I\000L\000E) endobj -365 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.5) >> +357 0 obj +<< /S /GoTo /D (subsubsection.7.1.3.5) >> endobj -368 0 obj +360 0 obj (\376\377\000A\000A\000C\000E\000N\000C\000\137\000P\000A\000R\000A\000M) endobj -369 0 obj -<< /S /GoTo /D (subsection.8.1.4) >> +361 0 obj +<< /S /GoTo /D (subsection.7.1.4) >> endobj -372 0 obj +364 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 -373 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.1) >> +365 0 obj +<< /S /GoTo /D (subsubsection.7.1.4.1) >> endobj -376 0 obj +368 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000C\000l\000o\000s\000e) endobj -377 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.2) >> +369 0 obj +<< /S /GoTo /D (subsubsection.7.1.4.2) >> endobj -380 0 obj +372 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000E\000n\000c\000o\000d\000e) endobj -381 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.3) >> +373 0 obj +<< /S /GoTo /D (subsubsection.7.1.4.3) >> endobj -384 0 obj +376 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000G\000e\000t\000L\000i\000b\000I\000n\000f\000o) endobj -385 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.4) >> +377 0 obj +<< /S /GoTo /D (subsubsection.7.1.4.4) >> endobj -388 0 obj +380 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000I\000n\000f\000o) endobj -389 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.5) >> +381 0 obj +<< /S /GoTo /D (subsubsection.7.1.4.5) >> endobj -392 0 obj +384 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000P\000a\000r\000a\000m) endobj -393 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.6) >> +385 0 obj +<< /S /GoTo /D (subsubsection.7.1.4.6) >> endobj -396 0 obj +388 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000o\000d\000e\000r\000\137\000S\000e\000t\000P\000a\000r\000a\000m) endobj -397 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.7) >> +389 0 obj +<< /S /GoTo /D (subsubsection.7.1.4.7) >> endobj -400 0 obj +392 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000O\000p\000e\000n) endobj -401 0 obj -<< /S /GoTo /D (section.8.2) >> +393 0 obj +<< /S /GoTo /D [394 0 R /Fit ] >> endobj -404 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 -405 0 obj -<< /S /GoTo /D (subsection.8.2.1) >> -endobj -408 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 -409 0 obj -<< /S /GoTo /D (subsection.8.2.2) >> -endobj -412 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 -413 0 obj -<< /S /GoTo /D (subsubsection.8.2.2.1) >> -endobj -416 0 obj -(\376\377\000m\000a\000i\000n) -endobj -417 0 obj -<< /S /GoTo /D [418 0 R /Fit ] >> -endobj -422 0 obj << -/Length 929 +398 0 obj << +/Length 931 /Filter /FlateDecode >> stream -xŚ}UM“£6½ūWp„Ŗ1Ém2ćŻLj“Śd|KrA% !Ę;łõi}€ń®“r•iµŗūuænI(8(ųøA’ńMąI¢$&A^”q™ ź7oPŒ2œŚż•h·BČ9fI9«w/}<ĖĶ/š›Ćn]Üķ*š÷ĒĶīĘĪāb_$Į± J}“$Žuš[ųXæE -©ØXm1AįcSĶ„[>ɚ‹³“¢’5SŃĒc”ŗ0ŸųIQõnv1…dć4˱ACRÄ%ö€?}>|Üb -i•™ĒŒ2€u‹O2Ā$¼lŸd?t,JHų…ė÷('įÜN”ÜUlę~n·‡Ęø’Ž®8•ńæƒņ†o‚݉vķŠ"Ÿ•[<³Ž~ōŪĢŲ•9Ū‘}\ęyęéIHć¬p–D+0¶1_ÄØ¹ž“[5ÓUÆŁYq¦4sŠ×Ŗ„žÄ™ ońņŗ” ø$å’#ų8–2yƒBõ\łWQ²«‰ėqAYŗ~[Õ -²Õzųn·»\.¦u1ēcÜ\³  ŖŁŽöż}~J“ŅGzęcÕQŽ/\~š*q¶/¢‘Ŗ§šK`$-ҐūÆnłč¤ZVSĻ„öū^;N§?Yå•Zŗ/Š%!Šė–®[9y!5ÆX™ĆšY„‚³ń!Śf( ķŁN|Zą°¦š:ßidõmznĪ©™ųqiąŖ®–)Ęm“IHs‚rč#—Óč4“/K N>zcȗՐnŠóš³’õTiĪHVR Ņ4Ž;˜œŲ»i'įÉļiEkÖSõ׌„ÜWŁ:Ī|ԐożķĀdcČ\¶N¬f2 ¹ū$<¶ĢŸb³k«7Ā•ÄFzOĒāŠQ±LDæ= Ä6Ńm9÷@ūqČ|ē3Š5 -ī@ęSxģ:§WpÅčŃĖldźĶ@ZbŻĻŽ} JßT›ÆŖÅxžFœ„Ćtźx5§ [–k#®…bƒm—­ō¶XŠOšwüŸY˽;3W`bĪĀŚ ‚ś•@2*Ģ“¦p“±ŽĮ M“‚W·¾=ƒóZŚŪ“ĢŖ›ģSq§±C+µ¬ä`žš÷å9Y®’žWJšīś§YN—Y Lõ|-+fĶż÷¢`Üē`’½“`x¼Ÿ”slż cņZŽb{qĄ;™›g© p/T'.bxg]Ņæ2s¾ń+pĆω>ĻW6h֟ę«^Q‚oĒĶæ_])t +xŚ}UM“£6½ūWp„Ŗ1–Ā&·ÉŒw3©Mj“ń-ÉAa”€D„ļä×§õ¶w”«L«ÕŻÆūuKBŃ)BŃĒś/†į(C8„Q±-ÓÓØźWÆPŠr’¹ż+ŃmQ„wĢq9«7/=ŽžÕźųĶa×>īś*š÷‡Õę!ÉÓķn‹£C•(¢»2„øˆuō[üXæ%ÅLV¼Nք¢ų1æ©Ź/ŸT-äÉĖ{Y©šėäĆ €)Ź|˜O⨙~·;€˜A²i–Ä"‚!ݦ% €?}Ž\É€é”yĄLr€õ‹O*!4>ƟT?t<Į4ž"Ģ{RŠųaĪ‚dPīUģęqj×ūĘŗ’Ž©—•õæƒņFn‚݉¶—ķE!+æxęū*č·™ń s®#»“,Š<Ѓi™’|ė-?h6ÉV5`ģb¾ČŃ3æj¦‹Žš“\īÆUĖ:3É—Įāåu! £“¤å’#„8Ž2uƒĀĢ\ł“Š ŽÅÕ$Ģø ,]æ­ź +²5fųn³9ŸĻ¶u©cŚ\²  Ŗł†õż}~J”Ņ2DzcÕ1Ń/\~Š•zŪŁ(Ż3#0’m³X„ÆiÅč„ZUSĻ„ ūA;NĒ?y”Fł/Š›ąčõ˳0­š‚TFTŪ’øf†yßiäõmz~Ī™ųqiąU]-×\ø&Әiī7äŠG”¦Ńk& žAVœĪb ʐ/Æ!݌ńg­ź©2!œ?‘4®””m|p°5x±÷ÓNćcŲ3šÕ¼gśÆKūÆvuœÄh ßśŪ;…©Ęūl½XĶdZrw8>“<œb»ėŖ·Ā…ÄFOĻāŠ1¹LD–]ø= Ō5ŃoH5÷Ą„qČCēsŠ5ī@Rxģ:Æ×pŘ1Č|äśĶB:b­ŻĻĮ}`ŚÜT[\UKČ<ĒĆtģD5§ [Žk+X®­…ęƒk—«ō®XŠOFtāŸY+‚;“3W`bϵ ;Wfə“ӚĮMĘ;w&4MIQŻśöĪhYgm³0«nrOŝĘ­2ŖRƒ}jŽ—ēd¹ž{Qieøė¼f9]v1pŻ‹qt¬Ųµß³†qŸƒ5Zõ^‚į ~–α 7ŒĶky‹ŻÅļdaŸ„&"[x” +x<É6…wÖ'ż+·7ᛸgižāšv…D_ł`xœļRŌįģpXż ])o endstream endobj -418 0 obj << +394 0 obj << /Type /Page -/Contents 422 0 R -/Resources 421 0 R +/Contents 398 0 R +/Resources 397 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Group 420 0 R +/Parent 402 0 R +/Group 396 0 R >> endobj -419 0 obj << +395 0 obj << /Type /XObject /Subtype /Image /Width 5000 /Height 1419 /BitsPerComponent 8 /ColorSpace /DeviceRGB -/SMask 427 0 R +/SMask 403 0 R /Length 111531 /Filter /FlateDecode >> @@ -1052,7 +1014,7 @@ i ]*p­6@ endstream endobj -427 0 obj << +403 0 obj << /Type /XObject /Subtype /Image /Width 5000 @@ -1149,18 +1111,18 @@ t8߀ ėpļül€—Evø€½2;Üė ĀšŠ›żrh‡Ūįąē48ŲE‚€]8ŲH€z:’c€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU„=8äo½ĮšoŌŌb endstream endobj -420 0 obj +396 0 obj <> endobj -423 0 obj << -/D [418 0 R /XYZ 90 739.935 null] +399 0 obj << +/D [394 0 R /XYZ 90 739.935 null] >> endobj -421 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/XObject << /Im1 419 0 R >> +397 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/XObject << /Im1 395 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -430 0 obj << +406 0 obj << /Length 19 /Filter /FlateDecode >> @@ -1168,843 +1130,794 @@ stream xŚ3PHW0Ppē2ĄAc(į endstream endobj -429 0 obj << +405 0 obj << /Type /Page -/Contents 430 0 R -/Resources 428 0 R +/Contents 406 0 R +/Resources 404 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R +/Parent 402 0 R >> endobj -428 0 obj << +404 0 obj << /ProcSet [ /PDF ] >> endobj -461 0 obj << -/Length 988 +437 0 obj << +/Length 991 /Filter /FlateDecode >> stream -xŚķY]o›0}ļÆąiiPŪŒ“,Ż:µZ×fOŪ¼ą¦–ČĄdŚ~ż 64 ōƒ¶ŚG’'Ą’1œsī½Ē¾ĄšYĄz{Ģu89:>AČBŲ#ÖäŚ¢Ą -1öB€¬Il}¶Gi"y"sēė佚,heåäņęņ­žN=¢°œ ,7$!TO†Ž öi"3FvS)ŅļL„…aäHՃ™tēRžŚR.¾H`¹x!5Ÿ ½jĶŲWÓtÉ7śģ’ “=Ē Ō7ķłSŚk@Š0U‹j›±R9~M2䌓ióĢq‘z²\Ló6Uä@ĒĖš°¤.ÄÅŲrń("šdBõL|ĖXöS3ó)g3~o°śO -V£ŌėąāTÆx"ę¼%…ˆāCœ>#NżĒĘ)Ŗy©ćtÄęs‘Ģ47Wü{Į“i+©†Ä?0ńR4”įw„ŹÓ$—¬¤ zĢē锵 ŖŠˆ÷ļ. qo­cōi²,äń‡BŖ‹Į·2-³b±f€n!Žśō,eސG!Ž–7®r?RƽČRöJÄFÖĆāŚA}]‹ž ϧ™XŹ4k‘€ŗū’śKŗJąąŽÆr=r&rŁįĒ‚’Ąš!Żn&3œpÆ”×Ré֚Axp&Ϧ¤„銐±.Ż”¹Ģ8[˜DĮ$k{Ē`_įīMƒū9WąŽĀ\ŻŅä hVd.„x]Nz‹=ź2—|z?Ž!Į‡äŅļFä“ ļ‹²r²Œ-øĢÄÆnŸ}Pųćß(°ĢicĻY3åšĢĮĆ]<š¬Ć‡£‚2ź/ŽĘķnX’š¹†ķ<­=ßi‘h‡„õN¾“Ś{—xŠX¤Ə› ł³4WŽZĆŁį”÷Č;\4ź­Į˜:}@>„{šTū+B õU±\¦™¬w-Ź&+lŪēŖō? ü?n"PyØz'bˆ4ü„Q[Øķt\pÅĖŪsŌKҾSEoƒ”: ßDrWn ’„Oƒ©»ōĆźšŸ”Ivą`õÓīŁčµž’wc׌µVØõĘ{,ø²ōo€ųĘ`VŒ»FōĄ!oŒ>‡—m\)żW“c…Vߦ—O¼(ˆLÓ+Ŗ»WŗéµŁŽä7¬<ŁY‰“ČŚÕ(TI>²ķU7ŚÖ„ļ7MÆ” -’"V$ģ`Éū[ż®J}»-~Óš:)·&(Ä/U2«ŪWM–®wā9ĻVv*Z Ć`Čxī]µ@ßlǹ UłźR9p¶WåžO™ķ™!¦ÅQ«)€v ÖķžÖęu<9ś S¢!2 +xŚķ™Įr›:†÷y +–öL”’-cĒiÓI¦iģ»ź½ Õ(ŽflpA$Ó>}Ųā;s3µ½4#ß’Ÿ£X3 XŸĪ€9&g/²vH@ 5¹·(°|Œ kZß{Ć8’<’i’æÉ5XŠJņɳɯ'=:ŌG~>X¶OB؞ ū6ō®"™ōaŠ‹Ćl*E™›é‡°0 ©ŗ0“ž]Ź][ŹĘĄuń,ǧęq”S¬éŽx/y}”ļ6ńüžÓ·=õLG~Ą”vš°*„JSm*–Ū”Ē-ÅAFœQ4Cžōm¤.,Ó“)9Éń6:l© ±C1¶lDŠˆÖ™P½?–üŅŹü“²ß¬īNĮjü€Ŗ`=æ½Ņ+^Š9oX! ų§{Ä©ūŚ8E„.eœŁ|.¢™ÖfĢf<š6’ŖOܓo%An[Ŗ¼ŠRÉr Š«ół<ž²ę†Ŗ"ā#ąŻwö:6 Æ¢e&?~ͤ:¾EŃ2ĖkŠ +ńįģO{9Ū{ 8B…xÓŽøČżHŻö6‰ūŠė=ŠŠŲzŻ÷‘×»/MĮÓi"–2N"`¾„½ī–.x+Üķ.×#×"•-õ˜÷·ō_h·{Ō3™į’óp^Ć„kzž©2Ł[’†§}#ĘŗuB¦2įla“¬Y;zNJ/īUĆż†+ø+ĢÅŁ0ŽžͲ¤µ +!ž +褳ك¶āļŽO·óö >%—.¼+“Ó6Ž·łĪɶą2æŪėģ“Ć_G¼¶ĮV6§UxĆ¢© +ĻüxxNž“Ōįč PŻĶ[U{ĆE|®±ŻÄeĶ÷BšF$8`k“/-¾½sžēY(bĶš[ĘęBžŖ€¦Ŗ¢Ö8[*åć¹fLl@Ž®/ĢĒF&ćvS®<»±8…ä v§ Ū×HeKŌ]½š)kńžB”»éęD;Bzœ-—q"ĖÆ?õ¹”Ų6’OÓæ$žļvGystNĄiüyĮ»Xš(,³Årõ?śNi”ĻTńPSØ ˆÅ=—£ż÷C؊ īö M’oVē}¬^ھ~Šļ’yd›±ĘĄ#Ņ#ĀäŻ µ»­Ąwśd”Ņqćq½7I$[<µžåuQĢ…QŒŚFōĄ“4v‚åū»ŲĮŗ9Ü:‚W½_œ’ŲzŠŅ<ŚŖŠŪžš½Cj„„:6C]ā^`š”AŁÕŌĶŠz›š?°Ģ£ˆ³¤¹»śj€Æl‡– ŲuĆŗU3t ŅŁ“•>ø…æW“šĘf®~MĪžzv  endstream endobj -460 0 obj << +436 0 obj << /Type /Page -/Contents 461 0 R -/Resources 459 0 R +/Contents 437 0 R +/Resources 435 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Annots [ 431 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 ] +/Parent 402 0 R +/Annots [ 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 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R ] >> endobj -431 0 obj << +407 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 575.708 160.007 584.684] /A << /S /GoTo /D (chapter.1) >> >> endobj -432 0 obj << +408 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 555.978 153.203 566.882] /A << /S /GoTo /D (section.1.1) >> >> endobj -433 0 obj << +409 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 540.343 190.552 549.189] /A << /S /GoTo /D (section.1.2) >> >> endobj -434 0 obj << +410 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 510.492 167.648 521.371] /A << /S /GoTo /D (chapter.2) >> >> endobj -435 0 obj << +411 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 494.722 166.772 503.569] /A << /S /GoTo /D (section.2.1) >> >> endobj -436 0 obj << +412 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 474.973 198.861 485.877] /A << /S /GoTo /D (section.2.2) >> >> endobj -437 0 obj << +413 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 459.337 242.288 468.184] /A << /S /GoTo /D (section.2.3) >> >> endobj -438 0 obj << +414 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 439.588 226.916 450.492] /A << /S /GoTo /D (section.2.4) >> >> endobj -439 0 obj << +415 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 421.895 268.24 432.799] /A << /S /GoTo /D (subsection.2.4.1) >> >> endobj -440 0 obj << +416 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 404.203 310.123 415.107] /A << /S /GoTo /D (subsection.2.4.2) >> >> endobj -441 0 obj << +417 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 386.51 199.987 397.414] /A << /S /GoTo /D (section.2.5) >> >> endobj -442 0 obj << +418 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 368.818 219.065 379.722] /A << /S /GoTo /D (section.2.6) >> >> endobj -443 0 obj << +419 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 351.125 228.47 362.029] /A << /S /GoTo /D (section.2.7) >> >> endobj -444 0 obj << +420 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 333.433 228.739 344.337] /A << /S /GoTo /D (section.2.8) >> >> endobj -445 0 obj << +421 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 317.678 227.473 326.644] /A << /S /GoTo /D (section.2.9) >> >> endobj -446 0 obj << +422 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 298.048 286.741 308.952] /A << /S /GoTo /D (subsection.2.9.1) >> >> endobj -447 0 obj << +423 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 280.355 277.516 291.259] /A << /S /GoTo /D (subsection.2.9.2) >> >> endobj -448 0 obj << +424 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 262.663 280.285 273.567] /A << /S /GoTo /D (subsection.2.9.3) >> >> endobj +425 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 244.97 286.094 255.874] +/A << /S /GoTo /D (subsection.2.9.4) >> +>> endobj +426 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 227.278 247.299 238.182] +/A << /S /GoTo /D (section.2.10) >> +>> endobj +427 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 209.585 203.294 220.489] +/A << /S /GoTo /D (section.2.11) >> +>> endobj +428 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 191.893 354.944 202.797] +/A << /S /GoTo /D (section.2.12) >> +>> endobj +429 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 174.917 387.274 185.104] +/A << /S /GoTo /D (subsection.2.12.1) >> +>> endobj +430 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 157.225 431.557 167.412] +/A << /S /GoTo /D (subsection.2.12.2) >> +>> endobj +431 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 138.815 364.051 149.719] +/A << /S /GoTo /D (subsection.2.12.3) >> +>> endobj +432 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.004 112.925 188.44 121.901] +/A << /S /GoTo /D (chapter.3) >> +>> endobj +433 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 95.252 172.58 104.099] +/A << /S /GoTo /D (section.3.1) >> +>> endobj +438 0 obj << +/D [436 0 R /XYZ 90 604.454 null] +>> endobj +435 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +476 0 obj << +/Length 996 +/Filter /FlateDecode +>> +stream +xŚķšM“š0Ēļ~Šœ:p€&O’uu;ŪŁn§»Ž¶Õh™Ü"öķÓ7 +ŗhØŗÖvįbĀļł?o!MFo:½aēõ%R¾ + @Ć R‰€ųŽŃ½Eī§į[D阇VW/Žß 7Ć»å½Ī`ŲłÖ!ęFdõ<¾ ’Īż'ŒĘęś[„}Ŗ$ś±śU‚PsŒŃ]ēC—s)žĻ¦åŻ®gG+³#˜łŠ1$Ą\PL†śązsģ\fa¢]Ģé]ō[Ļ‹ÓWÅ”åÅÉ­žėģ» Ų™EŁź ÖS@÷^pĒw=Žńó=0„üdē„ ģŗuŁ6šaČ#ƾšß'?˜’Ģó( ó( »®`Īw—pGgį“4Œe£¹0Ļ–n-Vv«·Å•®¹ŅRԃt4ė¬@6t„‘ķ,¶±~öŗ=§ĀĻ`˜Čč‘"öx },Da&¶4’ā"ēeø¹JĒśēöˆŒPS±Žž„—·kF¬F;Ļ„L+ŗķqlåoKeT½Žęłī[ + ’Ä?ƒ@x)Ė(ÖGėCü‹>ųFcÖɃKŁXyœS%ā * ģ0ҟ‰Ns“OgéīČK8D§“õˆÕülTŅķŗĢŒ<ø¹ųÜ[Lśz>*³sž-F›’i¢3ŽōīD•ĻŻŅµFU§ŌB†é¦źė<4ī7.iØfŃC)4µą<Ū|”äūN'_ÖEQ?ĢĆ#œFbŁLŒ”ųRZī_īŌ`ū²l†“A\[‘s)÷ϧЕF+X]ąŽ ŸWc#Ģč#Ę ³¹D‹ó/8é6N‹b²©UŹæQފl›rm$4q[Ą')˜—lÓEŅ«0““Åz`„3_(«Ž»†½J»™K¤3?„Œł‚ ­ĆxėV ‚ŹŹ^[ĶžŠm5{ĘŚj*Õ¬‰²ŻtŌū•Ū ,² Ŗ{¹)^ Å«ō.Lāš5ś67ĪM“.7MfÕ|tTn¢^b™zjR¢ KJGÆQÖB&OŽ“MJ'`¬&„*ŹMRĶ҉©ż-`‚6»[=^”“Š*X—­Ŗåņœ4¼„:Éó7k-ŗųčÜ×qųĖŅ,-Ęż׋)“åf‡kNóÆvÓĻ[MåėėՓ(5ō2Šćk½\R-6–ÄWÅ[ ūÕl€>,ņ‹Æašj{CIŠrÜĻQ”“šēßNAYKqæ{ĖGŠļ¹qńZźe£ƒ›Lf7™ļL[ōX®Õb2Å^dm §}Ågm‹yNȖ׳¶Å<Œ±8īī­–Ō§žŗµś]„ T +endstream +endobj +475 0 obj << +/Type /Page +/Contents 476 0 R +/Resources 474 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 402 0 R +/Annots [ 434 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 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R ] +>> endobj +434 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 728.876 243.772 737.723] +/A << /S /GoTo /D (section.3.2) >> +>> endobj +439 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 709.097 290.726 720] +/A << /S /GoTo /D (subsection.3.2.1) >> +>> endobj +440 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 693.431 186.438 702.278] +/A << /S /GoTo /D (section.3.3) >> +>> endobj +441 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.004 665.335 155.484 674.311] +/A << /S /GoTo /D (chapter.4) >> +>> endobj +442 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 647.632 168.435 656.479] +/A << /S /GoTo /D (section.4.1) >> +>> endobj +443 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.004 619.535 148.839 628.511] +/A << /S /GoTo /D (chapter.5) >> +>> endobj +444 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 601.833 162.348 610.679] +/A << /S /GoTo /D (section.5.1) >> +>> endobj +445 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.004 573.736 196.43 582.712] +/A << /S /GoTo /D (chapter.6) >> +>> endobj +446 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 554.952 278.412 564.88] +/A << /S /GoTo /D (section.6.1) >> +>> endobj +447 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 536.254 243.463 547.158] +/A << /S /GoTo /D (subsection.6.1.1) >> +>> endobj +448 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 520.469 279.707 529.435] +/A << /S /GoTo /D (subsection.6.1.2) >> +>> endobj 449 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 244.97 247.299 255.874] -/A << /S /GoTo /D (section.2.10) >> +/Rect [158.742 502.747 244.55 511.713] +/A << /S /GoTo /D (subsubsection.6.1.2.1) >> >> endobj 450 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 227.278 203.294 238.182] -/A << /S /GoTo /D (section.2.11) >> +/Rect [158.742 485.024 265.87 493.991] +/A << /S /GoTo /D (subsubsection.6.1.2.2) >> >> endobj 451 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 209.585 354.944 220.489] -/A << /S /GoTo /D (section.2.12) >> +/Rect [158.742 467.302 218.538 476.268] +/A << /S /GoTo /D (subsubsection.6.1.2.3) >> >> endobj 452 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 192.61 294.293 202.797] -/A << /S /GoTo /D (subsection.2.12.1) >> +/Rect [158.742 449.699 235.693 458.546] +/A << /S /GoTo /D (subsubsection.6.1.2.4) >> >> endobj 453 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 174.917 338.577 185.104] -/A << /S /GoTo /D (subsection.2.12.2) >> +/Rect [158.742 431.977 238.114 440.824] +/A << /S /GoTo /D (subsubsection.6.1.2.5) >> >> endobj 454 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 148.31 188.44 157.286] -/A << /S /GoTo /D (chapter.3) >> +/Rect [103.948 412.197 271.04 423.101] +/A << /S /GoTo /D (section.6.2) >> >> endobj 455 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 130.637 172.58 139.484] -/A << /S /GoTo /D (section.3.1) >> +/Rect [126.862 394.475 243.463 405.379] +/A << /S /GoTo /D (subsection.6.2.1) >> >> endobj 456 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 112.945 243.772 121.791] -/A << /S /GoTo /D (section.3.2) >> +/Rect [126.862 378.81 279.707 387.657] +/A << /S /GoTo /D (subsection.6.2.2) >> >> endobj 457 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 93.195 290.726 104.099] -/A << /S /GoTo /D (subsection.3.2.1) >> ->> endobj -462 0 obj << -/D [460 0 R /XYZ 90 604.454 null] ->> endobj -459 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -499 0 obj << -/Length 982 -/Filter /FlateDecode ->> -stream -xŚķš]sŚ8†ļłŗ“/¬źÓ’.“@vŅI“iaƲŽ ‚zĘYc¶Mż -üƒ¼œōbc_9ĢQžóź=G¬Œ.g£wׄ•O|0[…€š1äƒŁ<8ač~ž½Ō—+ßÜ“½ŗæ›MīfÓķ{£Élō÷›·Ą»ū¹€‚r0GŸX˜ń÷AŖ$ų¾ūT ”ęéčć•s)īĻVå}ŖfG³ĆˆAÅČ RL†BźzqäL’yŗŠ™ėóbęJä¤i“ŽM²ŠJ#šk}<Ēl“—²·ņxE•ŌÉz‰J„m#ćt¾sģ`kåvŸ$…ļŚ”O*]D<÷I.3‘'wW_.7˱^Ļ‹ Lól3Ļ‹æ?é„Īt2·6Eå’=Ó­I„gµ7“fZ·7cfł-ŹdŖYųŲ–J_ł=XGŻ #›oÕā|Šń×jÓ7ņą„E#‘ģ'FŠ””-(wb„ŪW×ģŽ7ĖI4 źµ](D|’e -%M¬d«Køcģófa„ž…љ½ĆQbĄŁ¾ąw= œ;Åd_»”W¤Ģö)·: ~·²e —l“M|Ł"`&é€õ8V3(”Õo»‡½IŹóŽõ9m,‘o¹ŃbŻŗY2t³Æ Ł|‡nö|ŒĶn–4PÖŻ¬qŁ‹d~ł”ŪĢr0Õ£‚¬›WCń&™ńcdcdCmśum¢mµi™6ėŃIµ‰Jņ&ŪŌNæ ¬=+J/śƒš³=€E©ĘÖ#Ś(Jó4YšŽß&hĻw«ZW©-ÖķVÕZņ÷|KÅĻŽ©ŅĘY‹.Ŗė(x²4ĖĀńø<«Ć”eÄśV'«ü›½éēƒ&O‚Yž„‰1Šė0ŠnõöHõsGGWŠǹ_}ÜäW߂$Ńös>!żįčw¦(9ĘĮ’Śp -ŹŠĒ)ŹgŠ÷›Ü,ńVŖ_čŠėįC¶’BŠČ¹ĻŲž V»¤r -endstream -endobj -498 0 obj << -/Type /Page -/Contents 499 0 R -/Resources 497 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Annots [ 458 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 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 ] +/Rect [158.742 359.03 258.587 369.934] +/A << /S /GoTo /D (subsubsection.6.2.2.1) >> >> endobj 458 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 728.876 186.438 737.723] -/A << /S /GoTo /D (section.3.3) >> +/Rect [158.742 341.308 261.357 352.212] +/A << /S /GoTo /D (subsubsection.6.2.2.2) >> +>> endobj +459 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.948 324.562 283.951 334.49] +/A << /S /GoTo /D (section.6.3) >> +>> endobj +460 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 305.863 243.463 316.767] +/A << /S /GoTo /D (subsection.6.3.1) >> +>> endobj +461 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 290.198 279.707 299.045] +/A << /S /GoTo /D (subsection.6.3.2) >> +>> endobj +462 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.742 272.476 234.229 281.322] +/A << /S /GoTo /D (subsubsection.6.3.2.1) >> >> endobj 463 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 698.125 197.536 709.004] -/A << /S /GoTo /D (chapter.4) >> +/Rect [158.742 254.753 236.44 263.6] +/A << /S /GoTo /D (subsubsection.6.3.2.2) >> >> endobj 464 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 680.117 172.949 691.021] -/A << /S /GoTo /D (section.4.1) >> +/Rect [158.742 234.974 256.904 245.878] +/A << /S /GoTo /D (subsubsection.6.3.2.3) >> >> endobj 465 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 662.245 251.035 673.149] -/A << /S /GoTo /D (subsection.4.1.1) >> +/Rect [158.742 217.251 253.038 228.155] +/A << /S /GoTo /D (subsubsection.6.3.2.4) >> >> endobj 466 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 644.372 242.188 655.276] -/A << /S /GoTo /D (subsection.4.1.2) >> +/Rect [158.742 201.586 260.41 210.433] +/A << /S /GoTo /D (subsubsection.6.3.2.5) >> >> endobj 467 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 617.581 155.484 626.557] -/A << /S /GoTo /D (chapter.5) >> +/Rect [158.742 181.807 259.145 192.711] +/A << /S /GoTo /D (subsubsection.6.3.2.6) >> >> endobj 468 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 599.608 168.435 608.574] -/A << /S /GoTo /D (section.5.1) >> +/Rect [158.742 164.084 258.029 174.988] +/A << /S /GoTo /D (subsubsection.6.3.2.7) >> >> endobj 469 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 570.879 148.839 579.855] -/A << /S /GoTo /D (chapter.6) >> +/Rect [158.742 146.362 271.319 157.266] +/A << /S /GoTo /D (subsubsection.6.3.2.8) >> >> endobj 470 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 553.026 162.348 561.873] -/A << /S /GoTo /D (section.6.1) >> +/Rect [103.948 129.616 282.835 139.544] +/A << /S /GoTo /D (section.6.4) >> >> endobj 471 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 524.178 196.43 533.154] -/A << /S /GoTo /D (chapter.7) >> +/Rect [126.862 110.917 243.463 121.821] +/A << /S /GoTo /D (subsection.6.4.1) >> >> endobj 472 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 505.244 278.412 515.171] -/A << /S /GoTo /D (section.7.1) >> +/Rect [126.862 95.252 279.707 104.099] +/A << /S /GoTo /D (subsection.6.4.2) >> +>> endobj +474 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +514 0 obj << +/Length 1121 +/Filter /FlateDecode +>> +stream +xŚķš]s¢H†ļż\Ā…lBsi³NiĢ*wŁ)Š@›„Šu&ł÷Ó|hPŌ(“©ŌŖT”m¤;OŽÓļ9‡Ņ‹¤ūÖÕś«d؆†4ɚIt ŖAÉņ¤'¹;~°ĢkŖ|µ¾HU3 ųjö™ļūépĖ“Z’·ŅQ ĮģTWuL%7l=}’'ĘæH@Å“¾gæJaq ¤iėŸ(“?y)n4Y/—–©!nĶ$‰1åėŠT¢"*mˆ)]-y2ņ_‡\ATž¦@*ó [čz&é©Ķ–U„Mhą…Fepēļƒ”­į*`qmC]Õ)“Dk’q8·ēIü/(ą»3`Ø7—ąÆęIĖ;*SĀhcA~¢"IAŠ‹ƒē·é*IāUäbÆé¢›.“•»Ģ_ ļå ÜJ~ƒ4Ųt°?ʼnVńfõ2÷ķń„ćÜĖ1öųĀMüłŅ£Jöbh—µUž™œ½ЬŠNłŽxųĢ“‚®³tŠW±» +Åīéģ#Ķk:Ķz1T«Jõ½¹­ĀN䎽-ł¢"O]”×䦱#(¢©΃*FrM 9;/¢„~ŽĄ(,iÆ!7ŠkŠ;-fa$Y·t•2='›ƒ@LŃVt‰!%XF“ß3ćVטØٱ@=ŪSŅ Ćq\‘7؁’œfźłōļ 9˜Y`J/¹erĀžž•|Š ł[ņqdvę&•ņ]'YźmĪ=>;%ļĄč†õX2’”Ż$#wzCÓ~ÆPĘ=sR)‡’¼>ĢĒ•ļ‡lŚe8„øĘ…īLį<ÉE–én-ÄTH¾ķ±®ÄšFb„ź÷n5K»Ā‹ž@ē§Ż|QWģ†0bķ·°3“ŚŖ¢źZ“a˜½æŸVœ„hMOøź8ޤ­%Pęd’¾Wv-½ĮĻ?Ÿ©’™–b`¹ÓKG: +„PĪģŽ¤k?ęXūƒ”Y!‹Éo4£V Ń*…GÅ@rgŅU‚ ^¦~Œ³Œ±$"Rc¹ļ®xŌ)bW“aTÓ*ÉĘ*EgFn7ˆ¼į§(>C©Ոq²1Ó¦ųŁsʂĀėém`\Ć0ČĘjsŒ÷|9ōŸŃ,¾ ”'Ć#µ4H¶ąķƆ‰~—ŸCŗ„Gŗ…TÄtb Q>¦$Ä +Ģ(ŗØSg5©iUjÓ#Ōd—EÖ +_}‹ŚxĪ«‰qu'G+,óėīÉi&Ŗ4€Ī=8ż¹ « +endstream +endobj +513 0 obj << +/Type /Page +/Contents 514 0 R +/Resources 512 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 402 0 R +/Annots [ 473 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 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R ] >> endobj 473 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 486.395 243.463 497.299] -/A << /S /GoTo /D (subsection.7.1.1) >> ->> endobj -474 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 470.579 279.707 479.426] -/A << /S /GoTo /D (subsection.7.1.2) >> ->> endobj -475 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 452.707 244.55 461.553] -/A << /S /GoTo /D (subsubsection.7.1.2.1) >> ->> endobj -476 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 434.834 265.87 443.681] -/A << /S /GoTo /D (subsubsection.7.1.2.2) >> +/Rect [158.742 728.876 264.814 737.723] +/A << /S /GoTo /D (subsubsection.6.4.2.1) >> >> endobj 477 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 416.961 218.538 425.808] -/A << /S /GoTo /D (subsubsection.7.1.2.3) >> +/Rect [158.742 709.195 254.712 720.098] +/A << /S /GoTo /D (subsubsection.6.4.2.2) >> >> endobj 478 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 399.088 235.693 407.935] -/A << /S /GoTo /D (subsubsection.7.1.2.4) >> +/Rect [158.742 691.57 290.398 702.474] +/A << /S /GoTo /D (subsubsection.6.4.2.3) >> >> endobj 479 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 381.216 238.114 390.062] -/A << /S /GoTo /D (subsubsection.7.1.2.5) >> +/Rect [158.742 673.946 284.6 684.85] +/A << /S /GoTo /D (subsubsection.6.4.2.4) >> >> endobj 480 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 361.286 271.04 372.19] -/A << /S /GoTo /D (section.7.2) >> +/Rect [158.742 656.321 245.297 667.225] +/A << /S /GoTo /D (subsubsection.6.4.2.5) >> >> endobj 481 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 343.413 243.463 354.317] -/A << /S /GoTo /D (subsection.7.2.1) >> +/Rect [158.742 638.697 280.983 649.601] +/A << /S /GoTo /D (subsubsection.6.4.2.6) >> >> endobj 482 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 327.598 279.707 336.444] -/A << /S /GoTo /D (subsection.7.2.2) >> +/Rect [158.742 621.073 295.11 631.977] +/A << /S /GoTo /D (subsubsection.6.4.2.7) >> >> endobj 483 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 307.668 258.587 318.572] -/A << /S /GoTo /D (subsubsection.7.2.2.1) >> +/Rect [158.742 603.448 313.69 614.352] +/A << /S /GoTo /D (subsubsection.6.4.2.8) >> >> endobj 484 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 289.795 261.357 300.699] -/A << /S /GoTo /D (subsubsection.7.2.2.2) >> +/Rect [158.742 585.824 259.833 596.728] +/A << /S /GoTo /D (subsubsection.6.4.2.9) >> >> endobj 485 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 272.898 283.951 282.826] -/A << /S /GoTo /D (section.7.3) >> +/Rect [158.742 568.2 293.586 579.103] +/A << /S /GoTo /D (subsubsection.6.4.2.10) >> >> endobj 486 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 254.049 243.463 264.953] -/A << /S /GoTo /D (subsection.7.3.1) >> +/Rect [158.742 552.632 275.892 561.479] +/A << /S /GoTo /D (subsubsection.6.4.2.11) >> >> endobj 487 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 238.234 279.707 247.081] -/A << /S /GoTo /D (subsection.7.3.2) >> +/Rect [103.948 532.951 277.685 543.855] +/A << /S /GoTo /D (section.6.5) >> >> endobj 488 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 220.361 234.229 229.208] -/A << /S /GoTo /D (subsubsection.7.3.2.1) >> +/Rect [126.862 515.326 243.463 526.23] +/A << /S /GoTo /D (subsection.6.5.1) >> >> endobj 489 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 202.489 236.44 211.335] -/A << /S /GoTo /D (subsubsection.7.3.2.2) >> +/Rect [126.862 499.759 279.707 508.606] +/A << /S /GoTo /D (subsection.6.5.2) >> >> endobj 490 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 182.559 256.904 193.462] -/A << /S /GoTo /D (subsubsection.7.3.2.3) >> +/Rect [158.742 480.078 258.587 490.982] +/A << /S /GoTo /D (subsubsection.6.5.2.1) >> >> endobj 491 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 164.686 253.038 175.59] -/A << /S /GoTo /D (subsubsection.7.3.2.4) >> +/Rect [158.742 462.453 261.357 473.357] +/A << /S /GoTo /D (subsubsection.6.5.2.2) >> >> endobj 492 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 148.87 260.41 157.717] -/A << /S /GoTo /D (subsubsection.7.3.2.5) >> +/Rect [158.742 444.829 256.933 455.733] +/A << /S /GoTo /D (subsubsection.6.5.2.3) >> >> endobj 493 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 128.94 259.145 139.844] -/A << /S /GoTo /D (subsubsection.7.3.2.6) >> +/Rect [89.004 419.279 189.785 428.256] +/A << /S /GoTo /D (chapter.7) >> >> endobj 494 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 111.068 258.029 121.972] -/A << /S /GoTo /D (subsubsection.7.3.2.7) >> +/Rect [103.948 400.594 239.389 410.522] +/A << /S /GoTo /D (section.7.1) >> >> endobj 495 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 93.195 271.319 104.099] -/A << /S /GoTo /D (subsubsection.7.3.2.8) >> ->> endobj -497 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -538 0 obj << -/Length 1079 -/Filter /FlateDecode ->> -stream -xŚķš]s¢H†ļż} ²ż Ķ„QĢ:„IV¹ĖNQŚ,U.āLņļ·łšu”rgF“*U˜&Ņ‡÷œ÷ōŽ»ńGc`j¦Žu`O€ ”#al¼*ķē'Ūz²GźWū  ˆjŗ‰äW³s¾ļ§Ć ĖnüŪHG!@Ł˜”„wŚxż -'ĒæØ“ƒļŁ_MÅD0jüՀÅbņļĒļ҆Ė呍å!H5“R``9fą|†FÕ&‚ *­–J”ҶžŚĪ@$ćĪ8«M,OŒ’xį&łē”˜ˆX„®Č朼6©IMm2ļ5ĶCēvž#„T°¾5\Ę 0ÖLDAÉūfš+Ø’X±¼nG²ōįåü:bīĘž,ń£pw>ŻŌƂą¹X/–łā‚ļ@LßD\Š]i¶¹‹©“ń>Ņņk§Y #Aē{Pfb%›+‘‰xąō…Š™ņMELA™©—R/'ŹL–Éh:sfqō7„8(eK‚Œė%X‘§Q‰'Łäi«*ćXE\y‰ō¢£2„œŻ āĢßS‚^¼}Žq-Boy×.Ź’‹ŻĆqĢ®K’ŖśÕó¢YēwŽkŽFĮѲG=§3żč ¤JÅ\ś÷ī4†Žo/P½“-gźxQ*²ļ”ć{‡ÓØ?$¾ É, ÉL÷īÄbāĒb‘1rOtĒU‡ Śäž‰®°d¹$5”S›/Ė”ģD(Eu–’Ä&£a©ūĄŹ-ēEŅŹ­v~FWėØ&ķ‡j|÷7wŲ½¹sIȰĢ÷ŽÜ9ćŽęŪhī„‹i+t>1/ÉÓą·c蕹jģHнp4žĪ‚2FzKĄjÉ£“¤½b䔮).)ī> >> endobj 496 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 727.795 282.835 737.723] -/A << /S /GoTo /D (section.7.4) >> +/Rect [126.862 364.369 257.053 375.273] +/A << /S /GoTo /D (subsection.7.1.2) >> +>> endobj +497 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.742 347.721 315.185 357.648] +/A << /S /GoTo /D (subsubsection.7.1.2.1) >> +>> endobj +498 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 329.12 298.288 340.024] +/A << /S /GoTo /D (subsection.7.1.3) >> +>> endobj +499 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.742 312.472 309.396 322.4] +/A << /S /GoTo /D (subsubsection.7.1.3.1) >> >> endobj 500 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 709.02 243.463 719.924] -/A << /S /GoTo /D (subsection.7.4.1) >> +/Rect [158.742 294.848 303.738 304.775] +/A << /S /GoTo /D (subsubsection.7.1.3.2) >> >> endobj 501 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 693.278 279.707 702.125] -/A << /S /GoTo /D (subsection.7.4.2) >> +/Rect [158.742 277.223 279.937 287.151] +/A << /S /GoTo /D (subsubsection.7.1.3.3) >> >> endobj 502 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 675.479 264.814 684.326] -/A << /S /GoTo /D (subsubsection.7.4.2.1) >> +/Rect [158.742 259.599 370.109 269.527] +/A << /S /GoTo /D (subsubsection.7.1.3.4) >> >> endobj 503 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 655.623 254.712 666.527] -/A << /S /GoTo /D (subsubsection.7.4.2.2) >> +/Rect [158.742 241.975 281.631 251.902] +/A << /S /GoTo /D (subsubsection.7.1.3.5) >> >> endobj 504 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 637.824 290.398 648.728] -/A << /S /GoTo /D (subsubsection.7.4.2.3) >> +/Rect [126.862 225.431 260.081 234.278] +/A << /S /GoTo /D (subsection.7.1.4) >> >> endobj 505 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 620.025 284.6 630.929] -/A << /S /GoTo /D (subsubsection.7.4.2.4) >> +/Rect [158.742 207.807 253.038 216.653] +/A << /S /GoTo /D (subsubsection.7.1.4.1) >> >> endobj 506 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 602.226 245.297 613.13] -/A << /S /GoTo /D (subsubsection.7.4.2.5) >> +/Rect [158.742 190.182 260.221 199.029] +/A << /S /GoTo /D (subsubsection.7.1.4.2) >> >> endobj 507 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 584.427 280.983 595.331] -/A << /S /GoTo /D (subsubsection.7.4.2.6) >> +/Rect [158.742 172.558 275.165 181.405] +/A << /S /GoTo /D (subsubsection.7.1.4.3) >> >> endobj 508 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 566.628 295.11 577.532] -/A << /S /GoTo /D (subsubsection.7.4.2.7) >> +/Rect [158.742 154.934 246.941 163.78] +/A << /S /GoTo /D (subsubsection.7.1.4.4) >> >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 548.829 313.69 559.733] -/A << /S /GoTo /D (subsubsection.7.4.2.8) >> +/Rect [158.742 136.228 292.719 146.156] +/A << /S /GoTo /D (subsubsection.7.1.4.5) >> >> endobj 510 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 531.031 259.833 541.934] -/A << /S /GoTo /D (subsubsection.7.4.2.9) >> +/Rect [158.742 118.604 291.065 128.532] +/A << /S /GoTo /D (subsubsection.7.1.4.6) >> >> endobj 511 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 513.232 293.586 524.136] -/A << /S /GoTo /D (subsubsection.7.4.2.10) >> +/Rect [158.742 100.003 251.922 110.907] +/A << /S /GoTo /D (subsubsection.7.1.4.7) >> >> endobj 512 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 497.49 275.892 506.337] -/A << /S /GoTo /D (subsubsection.7.4.2.11) >> ->> endobj -513 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 477.634 277.685 488.538] -/A << /S /GoTo /D (section.7.5) >> ->> endobj -514 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 459.835 243.463 470.739] -/A << /S /GoTo /D (subsection.7.5.1) >> ->> endobj -515 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 444.093 279.707 452.94] -/A << /S /GoTo /D (subsection.7.5.2) >> ->> endobj -516 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 424.237 258.587 435.141] -/A << /S /GoTo /D (subsubsection.7.5.2.1) >> ->> endobj -517 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 406.438 261.357 417.342] -/A << /S /GoTo /D (subsubsection.7.5.2.2) >> ->> endobj -518 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 388.639 256.933 399.543] -/A << /S /GoTo /D (subsubsection.7.5.2.3) >> ->> endobj -519 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 362.216 189.785 371.193] -/A << /S /GoTo /D (chapter.8) >> ->> endobj -520 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 343.356 239.389 353.284] -/A << /S /GoTo /D (section.8.1) >> ->> endobj -521 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 324.581 243.463 335.485] -/A << /S /GoTo /D (subsection.8.1.1) >> ->> endobj -522 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 306.782 257.053 317.686] -/A << /S /GoTo /D (subsection.8.1.2) >> ->> endobj -523 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 289.96 315.185 299.887] -/A << /S /GoTo /D (subsubsection.8.1.2.1) >> ->> endobj -524 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 271.184 298.288 282.088] -/A << /S /GoTo /D (subsection.8.1.3) >> ->> endobj -525 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 254.362 309.396 264.289] -/A << /S /GoTo /D (subsubsection.8.1.3.1) >> ->> endobj -526 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 236.563 303.738 246.49] -/A << /S /GoTo /D (subsubsection.8.1.3.2) >> ->> endobj -527 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 218.764 279.937 228.691] -/A << /S /GoTo /D (subsubsection.8.1.3.3) >> ->> endobj -528 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 200.965 370.109 210.893] -/A << /S /GoTo /D (subsubsection.8.1.3.4) >> ->> endobj -529 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 183.166 281.631 193.094] -/A << /S /GoTo /D (subsubsection.8.1.3.5) >> ->> endobj -530 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 166.448 260.081 175.295] -/A << /S /GoTo /D (subsection.8.1.4) >> ->> endobj -531 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 148.649 253.038 157.496] -/A << /S /GoTo /D (subsubsection.8.1.4.1) >> ->> endobj -532 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 130.85 260.221 139.697] -/A << /S /GoTo /D (subsubsection.8.1.4.2) >> ->> endobj -533 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 113.051 275.165 121.898] -/A << /S /GoTo /D (subsubsection.8.1.4.3) >> ->> endobj -534 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 95.252 246.941 104.099] -/A << /S /GoTo /D (subsubsection.8.1.4.4) >> ->> endobj -536 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -547 0 obj << -/Length 419 +517 0 obj << +/Length 19 /Filter /FlateDecode >> stream -xŚķÖOo‚0š;Ÿāį@×¾ŅŅ^7’$tSnĘ,«!tL·Ææ -ŗ),겓n§BK_?M)́B×¹œ»"h¢%Jˆf )„’ ¢)ŒŻŌcŌ}ó&QøT„ii'–#ƒ~ŌīG£ķ˜ÓŽœ‡Ł! -¬Œ!BrIęŒ'¦¶æ”p­ą½|*ƒ¹m0ržŗĖ§š_Ģw†ū łA†LhZAˆ¶/Ä*› ˆš|Ęuć8iēÉrjŠē®Y?zLøqge¦ū„`ģ£@—x¾ ō*š@믻ګ0“Ÿ‰«£ī&¦m}‰Į”šlŖNØLżQ5qØ© V&ÆG:¼&؋OYźs–¾°t:Ø×!ZMj5³8ĶI²Zyöē¤n']˜źjhf¦0ybźĖŖŪA>a}^> ēä‰fMxĀ,=Śø-³Ž­÷“o™×¤HWėtŁØk©å-ėž -¹±U`YŚ[ßĪ&OJĪŹw™l2“ÆćÓOSΈRĶŗ­*—ļ6F‘ -zcūĀÅę)WmżŲ¦8įzjūYQ„ +xŚ3PHW0Ppē2ĄAc(į endstream endobj -546 0 obj << +516 0 obj << /Type /Page -/Contents 547 0 R -/Resources 545 0 R +/Contents 517 0 R +/Resources 515 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Annots [ 535 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R ] +/Parent 402 0 R >> endobj -535 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 727.795 292.719 737.723] -/A << /S /GoTo /D (subsubsection.8.1.4.5) >> +515 0 obj << +/ProcSet [ /PDF ] >> endobj -539 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 710.171 291.065 720.098] -/A << /S /GoTo /D (subsubsection.8.1.4.6) >> ->> endobj -540 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 691.57 251.922 702.474] -/A << /S /GoTo /D (subsubsection.8.1.4.7) >> ->> endobj -541 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 673.946 226.517 684.85] -/A << /S /GoTo /D (section.8.2) >> ->> endobj -542 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 656.321 243.463 667.225] -/A << /S /GoTo /D (subsection.8.2.1) >> ->> endobj -543 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 640.754 260.081 649.601] -/A << /S /GoTo /D (subsection.8.2.2) >> ->> endobj -544 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 623.13 221.507 631.977] -/A << /S /GoTo /D (subsubsection.8.2.2.1) >> ->> endobj -545 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -550 0 obj << +520 0 obj << /Length 1520 /Filter /FlateDecode >> @@ -2018,39 +1931,39 @@ v łØØŪŖŖ·U<2ÉÉ;Żb“²Ć1ĘNöH[#a“ t½ŲśprŻ6ö'äāŅĶÉČĪY·AWzw8 pßšČnŽ”©X¦†ē›…7ižåžčUŚ3ž’7F¾Āæa]®ßüŹ®ŃŃ endstream endobj -549 0 obj << +519 0 obj << /Type /Page -/Contents 550 0 R -/Resources 548 0 R +/Contents 520 0 R +/Resources 518 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R +/Parent 525 0 R >> endobj -551 0 obj << -/D [549 0 R /XYZ 89 770.89 null] +521 0 obj << +/D [519 0 R /XYZ 89 770.89 null] >> endobj 2 0 obj << -/D [549 0 R /XYZ 90 739.935 null] +/D [519 0 R /XYZ 90 739.935 null] >> endobj -552 0 obj << -/D [549 0 R /XYZ 90 553.953 null] +522 0 obj << +/D [519 0 R /XYZ 90 553.953 null] >> endobj -553 0 obj << -/D [549 0 R /XYZ 90 553.953 null] +523 0 obj << +/D [519 0 R /XYZ 90 553.953 null] >> endobj 6 0 obj << -/D [549 0 R /XYZ 90 553.953 null] +/D [519 0 R /XYZ 90 553.953 null] >> endobj -554 0 obj << -/D [549 0 R /XYZ 118.403 407.688 null] +524 0 obj << +/D [519 0 R /XYZ 118.403 407.688 null] >> endobj 10 0 obj << -/D [549 0 R /XYZ 90 389.84 null] +/D [519 0 R /XYZ 90 389.84 null] >> endobj -548 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +518 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -558 0 obj << +528 0 obj << /Length 146 /Filter /FlateDecode >> @@ -2061,22 +1974,22 @@ xŚ• l4x¼Õc-‹ņ†‰?—¾łćņj”å_Õą1f endstream endobj -557 0 obj << +527 0 obj << /Type /Page -/Contents 558 0 R -/Resources 556 0 R +/Contents 528 0 R +/Resources 526 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R +/Parent 525 0 R >> endobj -559 0 obj << -/D [557 0 R /XYZ 89 770.89 null] +529 0 obj << +/D [527 0 R /XYZ 89 770.89 null] >> endobj -556 0 obj << -/Font << /F22 424 0 R >> +526 0 obj << +/Font << /F22 400 0 R >> /ProcSet [ /PDF /Text ] >> endobj -571 0 obj << -/Length 1628 +540 0 obj << +/Length 1625 /Filter /FlateDecode >> stream @@ -2085,121 +1998,113 @@ xŚWKs įP‹Ōz€EGė"<×e0œMhOAC¦6–}otw‰ óčšüżµņ.!I•)|Ń„jYN³xÖ÷¦•BopŻ÷÷7ø”šBŻk@ėw:ę…Œė²•|ߙy-‹R}43XÓś,ŠLWņ՜¾Øö ó, ‰d]&1Ńē€~2ß nóU=Ģž@5'dač·ØĘ5ŖM Ŗ’ģVk”5Ił øi“ĻŠ•WĄ •&„āĄ!!õ|~9ś|5ż8ä#—(]æ#Ū2©«ŗ” tØĀ‰€ri>ąžyÆUŚfÕŚ„vIEŒ[ˆ”ØsčG߃¶ś.‡F-ššŲ@÷ŠVŃ#%”7µbęQ`Ž—I-iŁG™(„ź×Rį&¬Z , `”½‹<£ )/d¦åU:‘+Ķ«cWČ`‘ʵ¶l;ć­Č¬å8ŖĀ !ģIJNJi©°;4Ą­Ģō8 ĶU²ĘØ®”h²‰"浣°­sżŻh- ˜ ”üqŠR©‚ -Op^Ä“/!9I©®Rļ»įįlžö¬迦eO!ök[€ Ådė $«¶]p” —€Ķ«v$AžG”n¶/ls5ź9\ׅĶ/št£|w²²\Bę±cU_1T…¹S[G¦_’āRÖawŸŌZéHƞ7#F0±ųmSRŒĶ·ŽŠ~GgN`@–z996¼³8„ž_QDałe|ńa6½'ӋÉå‡)€žqٌ•Ūd=~¦ĻŗŁģ‚L›‘ŖTī,ˆ|H*s"=YR'š¬ó]£G–}č”T’Ų,pģ#šÕĒū菔ć9, Ćs}} ōbšv«iYęå -³©öŁOė›žæ§Ö©J3A0ņž e(H7—Ÿ:õšįß½č`ģ° »c1Ūļ ÆØFxę‰ĪĢ›¹¬»łńdiŗ¾m +EŒ%¤‚fŽŌŖx¬@ö•¬ĮŌāń}1\óTŸcėŗ@)JE„lf2Tł Ęi" dQ)S-éR¼ž°Ēę)E@[ÖzūPČŻ[šŁ®Ų ‹×ōƒ1›‡PvšõB2źłzéß½_7ÄŲÅV￉“‘˜›w/*e‹īMēEāšÖV2ė©Źpø­1%°­ŠÖ™_Ń ŌĘ3wįļLR'"Mž‘oč ±¶ˆG»Ė ³0;īT5ŗĶUqžßäF/Iī.`³ŠśīņåYę!ü…h(p_–­>ĻÖł“Ż\Ŗ·-Sž˜Ÿ -ß4°ĮP}‡‹"Bcéć%Ģ“;RCźl‚ -T­»Mjz!Wo/K’¼‚ÄZ”įŪʁ>ņH_{oöƒˆūĢŚŃī={}6ēˆE›ö_‰–ķ·?šwų‹#ąåÕ  c=ÆĖ&®)ē’Ā’®}°õ ¾Ņڤ=®³7²;=(„ö;]œüd‚ā +Op^Ä“/!9I©®Rļ»įįlžö¬迦eĒüŲ>°ø(Ś#«¶pR —½«vā@G”M¶ē6W“ؘĆuŚķžÆCO÷ĮwĒ%$RµŻäRDґį–dؔTŲŻ'õ†V:«ē͈+,~Ū”Ācć«#“ßљо„FŽ Ļ(a×UQX~_|˜MoĘćÉōbrła +˜ęC\6cå6Y„Ÿésńe6{‡Āf¤Čż€‘idN¤ēOź^m¾kōȲÆq-’*Ģ1›Ž}D>źx_]9t<‡…d8b®Æ Ī•^LÓn5-˼œCŻ5՞#ūi}Óó÷Ō:Ui&„EŽ“ éęņS§^3ü»ż¶aw,fūŻūņÕÆ8љy3—u7ž,M×ד d„ˆ±ä€TŠH‘ś@/†Ą¾’5##\"|/kžźsģl(E©H€rĶL¦ŸĮ8M¬G•2Ւ.%ĢėĻrlžRd€£e­·…Ü=õžķŠŻ,xM?Ų³ye_/$£žÆ—.šmŠūuCŒ]lõž›H‰¹y÷¢"Q¶čŽt^Q$om%³žŖ ‡ŪƒPŪz hł@m^ĀL»#5¤Ī&Ø@õŲŗŪ¤¦ērõ“²ōæ)H,”E>]xą‰ōµ÷fß1ˆøßȬ} tĻÕė³ ¼6,Ś“æ¢H“læż¼Ć?y/Æ üėy]6qM9—žwķ;¦gųó•Ö&ķq½‘ŻéA)µßéāä? ¾|b endstream endobj -570 0 obj << +539 0 obj << /Type /Page -/Contents 571 0 R -/Resources 569 0 R +/Contents 540 0 R +/Resources 538 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R ] +/Parent 525 0 R +/Annots [ 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R ] >> endobj -560 0 obj << +530 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [429.414 487.604 481.08 498.508] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -561 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 331.427 127.798 342.331] -/A << /S /GoTo /D (main_8cpp) >> ->> endobj -562 0 obj << +531 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.008 306.101 191.977 317.005] /A << /S /GoTo /D (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) >> >> endobj -563 0 obj << +532 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.24 306.101 416.363 317.005] /A << /S /GoTo /D (LIBUSE_encOpen) >> >> endobj -564 0 obj << +533 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.963 245.775 231.074 256.678] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -565 0 obj << +534 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.995 236.31 247.598 247.214] /A << /S /GoTo /D (LIBUSE_encParams) >> >> endobj -566 0 obj << +535 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.71 197.993 200.978 208.897] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -567 0 obj << +536 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.678 197.993 347.539 208.897] /A << /S /GoTo /D (LIBUSE_encReconf) >> >> endobj -568 0 obj << +537 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.522 140.747 186.51 151.651] /A << /S /GoTo /D (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) >> >> endobj -572 0 obj << -/D [570 0 R /XYZ 89 770.89 null] +541 0 obj << +/D [539 0 R /XYZ 89 770.89 null] >> endobj 14 0 obj << -/D [570 0 R /XYZ 90 739.935 null] +/D [539 0 R /XYZ 90 739.935 null] >> endobj -573 0 obj << -/D [570 0 R /XYZ 90 549.218 null] +542 0 obj << +/D [539 0 R /XYZ 90 549.218 null] >> endobj -574 0 obj << -/D [570 0 R /XYZ 90 549.218 null] +543 0 obj << +/D [539 0 R /XYZ 90 549.218 null] >> endobj 18 0 obj << -/D [570 0 R /XYZ 90 549.218 null] +/D [539 0 R /XYZ 90 549.218 null] >> endobj -575 0 obj << -/D [570 0 R /XYZ 258.088 437.267 null] +544 0 obj << +/D [539 0 R /XYZ 258.088 437.267 null] >> endobj 22 0 obj << -/D [570 0 R /XYZ 90 420.2 null] +/D [539 0 R /XYZ 90 420.2 null] >> endobj -576 0 obj << -/D [570 0 R /XYZ 90 322.585 null] +545 0 obj << +/D [539 0 R /XYZ 90 322.585 null] >> endobj -578 0 obj << -/D [570 0 R /XYZ 90 261.925 null] +547 0 obj << +/D [539 0 R /XYZ 90 261.925 null] >> endobj -579 0 obj << -/D [570 0 R /XYZ 90 212.916 null] +548 0 obj << +/D [539 0 R /XYZ 90 212.916 null] >> endobj -580 0 obj << -/D [570 0 R /XYZ 90 156.897 null] +549 0 obj << +/D [539 0 R /XYZ 90 156.897 null] >> endobj -569 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +538 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -598 0 obj << +566 0 obj << /Length 1742 /Filter /FlateDecode >> @@ -2213,194 +2118,203 @@ $ ^M9‘„Ąm©Ģ£¹Ķw›^ ōŪąQŲ’;u,‡Ł?śö?śŁŅ endstream endobj -597 0 obj << +565 0 obj << /Type /Page -/Contents 598 0 R -/Resources 596 0 R +/Contents 566 0 R +/Resources 564 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R ] +/Parent 525 0 R +/Annots [ 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R ] >> endobj -590 0 obj << +558 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.768 668.546 184.625 679.45] /A << /S /GoTo /D (LIBUSE_feedInBuf) >> >> endobj -591 0 obj << +559 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.743 668.546 412.06 679.45] /A << /S /GoTo /D (LIBUSE_bufDes) >> >> endobj -592 0 obj << +560 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.8 668.546 490.067 679.45] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -593 0 obj << +561 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.086 581.879 185.631 592.783] /A << /S /GoTo /D (LIBUSE_writeOutData) >> >> endobj -594 0 obj << +562 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.008 533.07 193.092 543.974] /A << /S /GoTo /D (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) >> >> endobj -595 0 obj << +563 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.762 437.019 238.731 447.923] /A << /S /GoTo /D (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) >> >> endobj -599 0 obj << -/D [597 0 R /XYZ 89 770.89 null] +567 0 obj << +/D [565 0 R /XYZ 89 770.89 null] >> endobj -600 0 obj << -/D [597 0 R /XYZ 90 739.935 null] +568 0 obj << +/D [565 0 R /XYZ 90 739.935 null] >> endobj -601 0 obj << -/D [597 0 R /XYZ 90 549.323 null] +569 0 obj << +/D [565 0 R /XYZ 90 549.323 null] >> endobj -584 0 obj << -/D [597 0 R /XYZ 90 498.871 null] +552 0 obj << +/D [565 0 R /XYZ 90 498.871 null] >> endobj 26 0 obj << -/D [597 0 R /XYZ 90 491.71 null] +/D [565 0 R /XYZ 90 491.71 null] >> endobj -596 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +564 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -610 0 obj << -/Length 2003 +578 0 obj << +/Length 2006 /Filter /FlateDecode >> stream -xŚ„XYsŪF~ēÆĄ“ ܐš`p—Jf¦,ˑ臔ķRA(” -‡o²’}»§gpK–½Oģé™ééóė™v§1ķ×ÅŁ~ńņεĄ\ījū£0ĶsMĆᦶ“:7ģåš;Lß姦~yŁŌšCœM¹4™~×dq^WĄ -\—ėĪņóž÷Åvæų÷Ā„'˜f -‘Žgx–£²ÅĒĻL‹€’»Ę +šµq*ÓlnĮoŖ]/žX0©ŽųWØkyšg3Q]Ó6 —¹šĒĮ“ĪaxŲę‡ĖSœb{qæė"ŠĖ[qą™BI%u䁵ižmĆ/č̤>qīŽ/Y}·!āš&Š’:)ņ0Mæ‚_|GÆļc"²šÆ$k2ZäMv—DGś­šÓ©(ė8¢åį>Ģó8­h•äųėvā®Ļ®¤Ü"jRÉ<„9·’ÅyAPqmšFą8¤jŸĀ2¬cPŌut£wIJ„é»\ِTō|¼4żÆ0;©[}br³Ņ¶ŖĆüÓ„SYąµ/IKk‰KÜÖ īœł…ȼީ‡ūäpOds’®)hĶ•)a»ŅŲNšÅåiZ€# ¢öĀL 2»5Ł1ø.F¬ŠÅ=ņšĄA(Ź1Ly‘T Åf³“™~¾~{ŽW֖‘©Ė8ĢŠr F—Śž^-M½ŽĖø åoŪµ”AĒ0ŻæP‚‹µ”!-ŸJ!‘5iÄV?ä'ņuČ"NEU%·"źØLBĮEżrH ©Ć9E”CÄ ~]śéEVmPM ¾f€…a•$Ä© ])&č«Ń$”+W -é€ōļöŻłĶöź -éĖ+Ś‘é球SĘuSę­čƏõ»aPiD”©ē‘ɧŒhvϘ~°łs£5Ć:9@QįŒņn#rÜÅC¤ Ķ} Ósd­į !jżKģŠDÕcsfūŸ_‰½µé›†g£ ·{öĆłop–ĒYÆ±Č‡&„ Ńæ¾Ł·_@ćy#bn¢ L.ÆĮ٧W³3ö¼”CŹn3ą¤Ąt‚²øa2©Ļ†bÜkuLÖ“ÓļmlZü8½ -Ø»r’ƒ’ØpŌ†­ėG„‡e~­žĻÄųR$ōéĄ>³f 0øŲc'¹tįēåŚöAĘĻ$źośé%׊8£ČKī‹A‰÷_J+Ė2lϤ…L8īnĄ6¤9$‰/“ ĒvQ…zZl¢ēīŻĶęƛŻåĶ›Ķ~³źxļĪwoß^ż)Łųj’Q©¼Ųī7xęęz»’š^ź’£j^ī¢žÜžč‰\zžEˆX÷G~¦3¢ŗ]ϰ¼”ݵAč+³oĖąņ³ŒŁ¦ŹQƏ™#1iÖQ¶Ļ5`O˜`śšŃ<³ -ģł*ģ¢E,ƒ©}°jćŗøŽ3üŁ>!“x&9.?ģoĪvūėżÕvs!RvšÖćŠ:óJ4’‰ õ͚8š}Q]–øO¼×&B’”o"¶˜†GĪĒ>*AO>ūįS½”2åĄüWĄ'—sΘ»@®hoŒ¬Z«gū¶ķrų¶ -S1„śĘӆž ­M ń@V²•ž<Ŧ.'^vģ¶°øVŲü9ŠhqĘn<Ł©t+ōń{U1x’Ŗ~ŌŅéiųę eƒB 5õJhšøØĢ8Ɠc">f{yÜk?Æ®’…ī[†Åų÷žƒž?Ż4Q +xŚ„XYsŪ8~ׯąSŠŚ‘¼+3²£™ŃTgmåa+I¹h‘²YÅCĖ#žģńß· š–ćÉ>©Ń}~ŻÓ4¦ż¶øŲ/^’ʹĖ]mŌ¦y®i8ÜŌö‘öI熽\s‡é»üŌŌÆÆ›~ˆ³)—&Óš,Īė +XėrŻY~Ł’±Ųī’\˜šÓL!Ņń Ļr“C¶ųō…iš’Š˜a¾ö$NešĶ-ųMµŪÅßLŖ7žźZžęĒLTדMĆe®ęq0Įć¤s¶łįśēŸ™Ć^=nÄŗˆārÅVx¦PRIy`mچgŪš :3é†Ļœ»ćKVßmHĮ†8¼‰¢¤NЇDw …tĻ¢†ūdņŸöŃ» +Br\X6?B‡Ch“¶Ćōƒ‚šŒ}B[‰¢@…Dš'"÷[Y4!ķÜõõ`Q‘Ą‹ęxõōŪø:”É©.J%ŗX(5zUųM„ģZŁqZ·«kXl>ģV£ĆIN&/Ģ#" +e'Š÷øęøäŽźUt),cŚ„¢÷±¼ų”Ō2„Ų>ŹŁGn~[hŸfđ“hhmw° óņ•*ļgńįq=‡ažT€D–蔦>š„h`وVČžĢ˜EåM…€[ĘQšät“¹Ņ'BśyŹ'Ȝų™h{A'@Bv +ņ4āņ„Ė…ĢCŻ„)1ExZ ŗ1gŻõ‰ŗ:ĶÄÄ TL˜žĒ‡øŖĀņńcć½hIĆ€†IšŅ —*q„ÜKEØņ„m•!Ąl“m’ÖmĀĄ™™„a*Of#'¬—0—Ē2ĢZN‡¢be +n.~’ؤźåęź§Īo€Ž–„āh¶žĘa%É"‰PQrœ•Č“-ҧ‰’br…Tū"E:ÉN—+ß}ŸŌōc™Y£Ō½—ŚbR ŻGĘ ZļEj9¼UŠ1§Ćv•üK¤6ˆĒ$#¤Ÿ¦¢³&„ +†ēXŚø!: uEŲ•āHAB DżĶVŽö ČD*šĆåķĘO›éd*NØä @‘§DšŽe‘— Xd²zą†xTcP@EŠ{b p‚fMł“qĒée™øY£ó*¦Bo’Ż’B™Ī³~±±|™P@“Ķ*Äb‰Į§ŽgĖĄ[-RłÓ$žL¤°ŅHž”<דmÉIꊨ“ŗŚĶ@° ,=¤Ā/_AœÆæūu;Ky]Ą‘«ļŽ9Ē ˆŖ|  +š|9Ģ Ć*IˆSA»RLŠW£9HBW®ŅéßķūĖ»ķĶ Ņ×7“#ÓĻ!!§Œė¦Ģ[ŃßĪõ»aPiD”©ē‘ɧŒhv/˜~°łs£5Ć:9@QįŒņ~'rÜÅC¤ ĶŸ| Ósd­į !jżMģŠDÕcsfū_ވ½µé›†g£ ·{öćåļp–ĒYÆ±Č‡&„ Ńæ¾Ł·_Aćy+bn¢ L.oĮ٧7³3ö¼”CŹn3ą¤Ąt‚²øa2©Ļ†bÜkuLÖ“ÓļmlZü8½ +Ø»r’ƒ’ØpŌ†­ėG„‡e~«žĻÄųZ$ōéĄ>³f 0øŲc'¹tį—åŚöAĘ/$źßōÓK®qF‘—ÜWƒ8ļæ”V–eŲž3H ™pÜ7܀Ÿ6¤9$‰/“ ĒvQ…zZl¢ēīżŻęćŪŻõŻŪĶ~³źxļ/wļŽŻüC²ńÕž£R8xµŻošĢŻķv’ńƒŌ’GÕ¼ÜE=¹=Ń!¹8".ō<‹±ļüLgDu»žayC ŗkƒ8ŠWfߖĮå³M•9¢^Ļ™#1iÖQ¶/5`Ϙ`śšŃ¼° +ģł*ģ¢E,ƒ©}°jćŗøŽ üŁ>!“x&9®?īļ.vūŪżĶvs%RvšÖyhy„ š’LŠśfMĶžŠQ]–øĻ¼×&B’”ļ"¶˜†Ļ#ē¹Ź3čiĀg?|Ŗ÷!T¦X‚Ÿć +ųKe›uΜrĶY #«×J­¾ķ»¾½ĀTLq£¾ņ¼#~Š­Ķ ł@V²Õž2Å®.g^wģ¶šøVŲü%ŠhqĘn<Ū©t/ōń{U3x’PaŌņĪō<|ó•²A”Šš™z%6x\Tnœ×É1»½˜öŚÓ›ėDZū–a1žW’a’ėjX+ endstream endobj -609 0 obj << +577 0 obj << /Type /Page -/Contents 610 0 R -/Resources 608 0 R +/Contents 578 0 R +/Resources 576 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 606 0 R 607 0 R ] +/Parent 525 0 R +/Annots [ 574 0 R 575 0 R ] >> endobj -606 0 obj << +574 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.616 548.752 462.827 559.656] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -607 0 obj << +575 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 450.804 156.271 461.334] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -611 0 obj << -/D [609 0 R /XYZ 89 770.89 null] +579 0 obj << +/D [577 0 R /XYZ 89 770.89 null] >> endobj -603 0 obj << -/D [609 0 R /XYZ 90 635.872 null] +571 0 obj << +/D [577 0 R /XYZ 90 635.872 null] >> endobj 30 0 obj << -/D [609 0 R /XYZ 90 627.792 null] +/D [577 0 R /XYZ 90 627.792 null] >> endobj -612 0 obj << -/D [609 0 R /XYZ 90 592.959 null] +580 0 obj << +/D [577 0 R /XYZ 90 592.959 null] >> endobj 34 0 obj << -/D [609 0 R /XYZ 90 592.959 null] +/D [577 0 R /XYZ 90 592.959 null] >> endobj -608 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> +576 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -618 0 obj << -/Length 1597 +586 0 obj << +/Length 1607 /Filter /FlateDecode >> stream -xŚYoŪ6ųŻæBO¼EŒHŻ6ĄIÓĀ]Śu·=dE [”C@‡«#i6ģæļ#?겕”`€×wß²mģ Ūx½øŲ,Ī_1fD$ņ™olR#²Ą§ÄcŌŲ$Ę­é/?nŽ\±ˆŽŗ¼Ū*®ž–óló·:Žs µøŚ,>-(ŁU„¼€ŽgģņÅķGŪHąža' -G•.s`͌›ÅÆ {,”‰›J”ØŹB#` hĄPQ\“éK^ļȶMoÄ_¼^Z¾mŪęjÅ÷”Wņé„…mXq}o’*ÓÜš”>*`-gd-‹¢`–ćęłHx]ˆFÄ  Ź¶9“ ī·Kf›mŗdž „ń.*qhŹJY±3C·ŪBsd "9‡N—¢Ķa+MįŠŌ K™ži{6Bk8Šóįž”‰² }14?iK}«^\„Ž1ŗ–$а‹( ģķėžµU…ī ф' ”ž7å‰L#ā½#¦/z-4{{MÜ;e°ė„HÆ0P:Qzbė¤žÄɬ3Öx.ҦfC­§15fPJ"Ļc“`s=ĀlŸŒø„--*åy_-ih–Kj›"ŃŃ·. ųĪÅąŖ’ū6{ąĶµØ›z&¼A ®ńCäµ¹×4EŃ‹‹ä4Źc%rØõsŚĮė —5¢ŚėbńįõĀøÅ÷xwUČ_™p$Ņߓ“Šp»8Ė:f|œG[žtBž -ƒ7uSµ»¦­xMžoĘ­V—Wļ.ļÖŪڃ†Ž­ŹE ‡¹ŅŠąg.ŗ¼‡GW»Äqż©«=(—WŚÕžvō+Y?x§čzšĘŠ3ž sż±'żØ÷$lOJÜÕ÷e›I6”.r.Ļo8ĵ^qÉĖ¤ĶŹYzžg0”šļø¼{Ԉm"4B7q'®M'fZV9J”ānmVsKF‰5°¶:ŪcÖ ®YÜ(iƒĄ¬ćüÉŌ“]ļ/ßŖƒ ßĢŪŗĮ'„*¬5fZ•9Bń%õĢĻ ÆŠ8Ć7LZŚńkJÄA=ą¢3·>67Ü%üĄ‹D{D+ Õō"Ū,Ó\3eÅ) ĻȜāŹÉp©ų§VTR(‡FŚų²MęĮƒ4HŐKjB²( ō„«ŅBR@G©«§ƒF^æŪ܁5ąń^ģīń^ŌøR’ 6N`2a Ū©‡õ¢Ō[ØŌ§=ݤ%>+Ż“£:„6ģŖŽ®Łx`Ł•…Dß· ŗč ¤ņmŻBUŃPŌ×[4R˜/Ŗ¤˜]ł½Q7fČ,—}y]Ütń'Kžwŗō’±śżN„šm]wÄŻcü°.ΰKŖ&N:Ė P˜õ·3œ>žõ­›M*Ņ«—?碐|x±[iI„KHī‚ghr -CM³Śü(ĄĘ]YĮ^ģ8šźz1|ZÅ9æęž¹G™Ģrž;jGFja$H[œĻ“ÖE ·“%ōlrŹhl"‰  łÄö§’ß¬Ž¾æ¾ŗ»Xon$cbżt<2ź - Ćr<āE]+H•ķnWŻ`ĆU·«¾‘5²Ę+Qōʝ)ĶBCb±qeŚ4÷ņ®Ģ±ŠøC…u»ŌÆĻ†”y¾KĢ/éÅwØŹÆėN©×©§Š¾źOYL“@ķüjó#’GęrmS3ØEŽB;č Åøō]ė÷ūÆŹz9t'éÉŗŃOó'{ˆėæuōaĒ™L&)Ļóņa”µšå„Ž$"'UaŽ». _J -.€ĀćP¬ī|rĮž)CV'„×}e"śŸ)Ł›ObĄōāĖ\š|Ą=SY­aØ>č¾FÖÖü3;ˆuĪb¾ÄĘcõ4°F͚<Īńź„l”óĆ|eyz–\Ė‘†Q9CČ?įaµ’q{‰‡­"dįØ%Ų©" QeŌ>Č Eo3.žłęc%dwW  ®j&µŸ×aÆę - 'ū²b‚ó…Ųq¢ę[':n»øŠriœ¤,:ģb§wXŻ`“–$—Ģ}™w§qķ8C#:ÆaFēÓō;ž{!tĄ%ģk’]ų“T€y +xŚX[oŪ6~÷ÆŠS'o±"R÷ ą¤Iį.ķŗĘŪ²"-Ź& ‹«KҬčß!©‹­ 퀤Čsēw.Žmģ Ūx5»XĻĪÆ)5"+ņ©o¬S#²Ą'–G‰±NŒ;ӟXæ68¢yxĆ7U\=ĶŌ³Ķ?źxĒÕģj=ū8#@dD +ņ+pŲFēÆ Ūr¢Šx”T¹įRÖĢøż>³‡F9XQ`a±#‹ŠŠ(P4‚mś’Õ[kÓ¦·üVϾmŪęĻrÅū”Uāź'é…m,"Ėõ½ ž«LIpĆS x)e@“œA“ [8ŽE=Æ +Žš8 PŁ6‡¶ĮżfNm³MēŌ3A0ž%`CÅMYÉ(ź0čõ8J#u¬ rP#hоm[ +æw¤[ŹōoŪ³‘TĆ9ļĻJžČŃŠ·"ź‚gšN*RßĖ× +BĒ ŲˆŲĘ×=1j#- +ŻŽ¢‘NP‹xŽX'*,ä)}Ńy”Ō“Ō“hō¼cõ@»JXŃš”³ +¢M鄭’z„“I?&€Ö xic “PėdŒ±F B¬Čóčl®gQ[å'µ\‹ĪDŲ󮚓Š,ēÄ6x¢Š·*|ēæ 0ø¬Å®Ķ!xrĆė¦ž€7øAįiüu­÷J&/:aq‘œ¢<–† †Z]§š^\Ԉj§ŠÅūW3ćļćķU!žŹ„ ˆ÷„…¢ŪĘY¦•±amX¢<5Oź¦j·M[±Śśæ·\^^½½¼_Ėj:¶,±ü`ė³że +RŠŁ©‹x–”ąZŽė”ąA9…¼SPš®E}a:«žµcϼthQ×¾“u/ Ū“Ņgõ¾l3”&€Ņ¦Xö‰Lź†øV+.y™“Y9)ĻóL é‡ę[&Īc›pŐÄM¬­ĀµŃf¦e•£gprh³š-нź…~ Ģ*ō5‹im˜uœ2‘šāC ļŻå @8šĶ¼­¼’®ĀZ±Xq¦U™#›ĻüŌ°Ŗˆ3¼Ć°„Z_S"ś:܂ų8Üp–°+^쐭,WәlÓLiĶd„5,³¦—ģ€–Š}ly%ŒrH¤‚€7ŽTü©ŲŅfNLH&É ˆžp•^ ųPņč領Wo×÷M$xÜóķĻy+ńĻ`ć&u‘ŗ”¼phgJ­ø¹, ¤0į›ˆÄ'é{rT§0†ŗ*©‘ šmYö] ®sM!œoėŖŽ¢"¾źč¼Ę|U%q Å<č’Ō‡ģō"²^ōķUq«ń'r’UžZžy/Sų½D›īžø{ŒVÅvQŁĆQēy!…Y7”éĆY׌éØB]æü5ē…ŠĆŠķŖHKKJŗ„ä.X†!'0ō„0ĖM +tŲµ„ģՎ·®72ħUœ³Vģš=ŚDaÖóܑQżø2p ‘ bq>Ńz{@A¾P‘P³Ė©¢aˆƒ +pä[¶?¶üvłęŻĶÕżÅj}‹Ņp` +ėʤ棑Ļ"ŠPŽgy‘n i#³ŻÕÕ 6LvĆź;Q#k<āEWa܉Ņ,(%W¤M³×ĢŪ2Ē*āöÖÕ©_Ÿõ)ó|Æœ_Ó«īP•[V׌į×éK]Õ¢˜(ƒŚ|°ó¼‰• /*–Ǽ@DļŹų` ˆ< +—k›JAĶóŚA'(Ę„ėZ'¼?~S֋łA’xIūLV”˜æŲ=®?+ōaĒ„L$)ĖóņõaˆZų ꄮ‘£Ŗ0„]•…ÆH%I@įqÖwŗō¹`O””…6Bó>Œ2łĻ”ģ§~‚Ąōā‹\żĄ{¦².ś”ū„B’¢D[Yšerӏ;Ä|5ˆ Ēī h`œEYœćŃKŃ(§‡1ųę©Ys%FJÄč ĀåRąö?6R4Š…O5(ĮNĮ*Pū @ó,ŽdLžśęcÅEw—¤ ®r&µ›ēa/ē +E'ś²T‚óß2KĪæ0NhmŪøPv)ž¤,4w±U;¬n°IĖ ’Kä¾Č»SÜA;Nx߈¹Źk˜įŁ8żŽ’ż:š$ō[’ūš/7‡‡“ endstream endobj -617 0 obj << +585 0 obj << /Type /Page -/Contents 618 0 R -/Resources 616 0 R +/Contents 586 0 R +/Resources 584 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 614 0 R 615 0 R ] +/Parent 525 0 R +/Annots [ 582 0 R 583 0 R ] >> endobj -614 0 obj << +582 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.292 555.078 308.559 565.982] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -615 0 obj << +583 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.31 269.964 457.577 280.868] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -619 0 obj << -/D [617 0 R /XYZ 89 770.89 null] +587 0 obj << +/D [585 0 R /XYZ 89 770.89 null] >> endobj -620 0 obj << -/D [617 0 R /XYZ 90 607.477 null] +588 0 obj << +/D [585 0 R /XYZ 90 607.477 null] >> endobj 38 0 obj << -/D [617 0 R /XYZ 90 600.016 null] +/D [585 0 R /XYZ 90 600.016 null] >> endobj -602 0 obj << -/D [617 0 R /XYZ 90 506.851 null] +570 0 obj << +/D [585 0 R /XYZ 90 506.851 null] >> endobj 42 0 obj << -/D [617 0 R /XYZ 90 498.269 null] +/D [585 0 R /XYZ 90 498.269 null] >> endobj -604 0 obj << -/D [617 0 R /XYZ 90 164.95 null] +572 0 obj << +/D [585 0 R /XYZ 90 164.95 null] >> endobj 46 0 obj << -/D [617 0 R /XYZ 90 156.368 null] +/D [585 0 R /XYZ 90 156.368 null] >> endobj -616 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> +584 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -638 0 obj << +606 0 obj << /Length 2105 /Filter /FlateDecode >> @@ -2412,1592 +2326,1457 @@ U _ŃõtÖ×U#ŪÕ7 üž Š‚ŖĪ%Ąꁱ£4Ё<ļ—‡k®'”?ļÖšQƌ'‘oęz ź®I"uZ³~¤ŌĘķ6£µV:|øGßi81ü®pœ0ą©ž_ß]ϟŸØ5Q—śņDܧļbČšƒ•Æī]c?†c.ŗ1Gž,„Ģ4ÆõŒ'Ą‚6āHTŪ­\*p,MPT*°E_³€t<4 žĻ½ÓPœmäĖZI)M•¾ūrsĆś2įqD ņĪ`śĻ€éP[Ė\õĘÖ!?#ض~‚T.éÜ`éį»Ž!óś(Ū^ĄŽ‹‡6Ca×Õūņžnžx9>Ļz[óĒ›O7ÓĻOŻ{ųńw=VąxjI†¦–=:ėDŖŌϜ[¦ęƒj›‚²6Gėö#˜*ξž>Œ`¢>No‡ūT/²G-”w…6¼²k¤™Žƒ×’¶ūŽļŠż“’@€= endstream endobj -637 0 obj << +605 0 obj << /Type /Page -/Contents 638 0 R -/Resources 636 0 R +/Contents 606 0 R +/Resources 604 0 R /MediaBox [0 0 595.276 841.89] -/Parent 643 0 R -/Annots [ 621 0 R 622 0 R 623 0 R 641 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 ] +/Parent 611 0 R +/Annots [ 589 0 R 590 0 R 591 0 R 609 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R ] >> endobj -621 0 obj << +589 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.079 530.217 364.036 541.121] /A << /S /GoTo /D (LIBUSE_encOpen) >> >> endobj -622 0 obj << +590 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.854 520.753 396.229 531.657] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) >> >> endobj -623 0 obj << +591 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.239 520.753 513.996 531.657] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -641 0 obj << +609 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 511.662 135.668 522.192] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -624 0 obj << +592 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.852 457.354 497.666 468.258] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -625 0 obj << +593 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.965 439.73 257.778 450.633] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -626 0 obj << +594 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 427.774 194.448 438.678] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) >> >> endobj -627 0 obj << +595 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.194 374.284 296.714 385.188] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj -628 0 obj << +596 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.853 374.284 477.921 385.188] /A << /S /GoTo /D (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) >> >> endobj -629 0 obj << +597 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 362.329 234.487 373.233] /A << /S /GoTo /D (structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) >> >> endobj -630 0 obj << +598 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.735 283.901 493.846 294.805] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -631 0 obj << +599 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.762 271.946 436.527 282.85] /A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> >> endobj -632 0 obj << +600 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.591 230.411 324.858 241.315] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -633 0 obj << +601 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.351 218.456 344.116 229.36] /A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> >> endobj -634 0 obj << +602 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.52 206.501 372.788 217.405] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -635 0 obj << +603 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.167 93.195 271.208 104.099] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -639 0 obj << -/D [637 0 R /XYZ 89 770.89 null] +607 0 obj << +/D [605 0 R /XYZ 89 770.89 null] >> endobj -640 0 obj << -/D [637 0 R /XYZ 90 621.169 null] +608 0 obj << +/D [605 0 R /XYZ 90 621.169 null] >> endobj 50 0 obj << -/D [637 0 R /XYZ 90 611.997 null] +/D [605 0 R /XYZ 90 611.997 null] >> endobj -588 0 obj << -/D [637 0 R /XYZ 90 363.326 null] +556 0 obj << +/D [605 0 R /XYZ 90 363.326 null] >> endobj 54 0 obj << -/D [637 0 R /XYZ 90 348.39 null] +/D [605 0 R /XYZ 90 348.39 null] >> endobj -586 0 obj << -/D [637 0 R /XYZ 90 157.162 null] +554 0 obj << +/D [605 0 R /XYZ 90 157.162 null] >> endobj 58 0 obj << -/D [637 0 R /XYZ 90 146.838 null] +/D [605 0 R /XYZ 90 146.838 null] >> endobj -642 0 obj << -/D [637 0 R /XYZ 447.844 96.348 null] +610 0 obj << +/D [605 0 R /XYZ 447.844 96.348 null] >> endobj -636 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> +604 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -659 0 obj << -/Length 1739 +629 0 obj << +/Length 1813 /Filter /FlateDecode >> stream -xڽX[sÓ:~ĻÆšĪ 1–|I sŅ L[JĪ 0ÅVŽ|””3翟]­œŲNڦ0s^āÕjõiµŚ›bKĆ6ŽöNf½o87+š¹oĢF`CŸYgĘ,2>›£ž×Ł{Ć8¬Q̳xž‹ü®?ąžm~*ÄR¢To:ė}ļ1² ¦€¼”5t<#\÷>µųļ Ūr‚‘q«¤Ö†Ėų&ĘuļcĻī(ŘxƵā ä“Ü -,Ö0Ū¶Ķs‘F¢Ģju¦i˜E2§ĮeŸŁ¦ČÅZ–2/PI@vǵgÖČīl%iį"K’¬Ļ=ó6N—ÄŚģpŌx]%Qs½ØŲČ0žbŪ\FÄø]ɔز–Mõā“(Eź©øØ¹q‹$ž%#Kٵ6Lż}ńĘC°†Ķź3pĖēAˆPŪąęZ–—ØõŪ³Wć-’yąƒįĘćÉōbr3ž0ӌ"©$ȲWźŅ7°\ßū=Ų“ÓŁÕx6}Śż=čėńłåŁōQōßT|ņn|q1=;’šś0üjX’Dö™gŽe)ø€pń¢$ -Ææ"Õć|)‰ęVeFŌT"źv÷™®h“É„ņŒ_äE/µ`ŠåK}Wo{Ęg%0÷]ŪÜ]IŸ1fΦ-ĒŅ¢[× -.Z[t.­!Ģ}×¼U‘VŠ Ķ02|Ē,dIœEž­‰Röł‰G·Žć:ę@x—¹(%‰Er#ÓHće)})Špƒj=ÆwĪ“\.0^2,c$~ą>Z<\‰4•‰Fx7Hb½I0¾÷F+ŃHŅšŒšŠė8­ƒ\Ż”Q<)luźļœMČįŠ?!,o€ws6AĻ{I˜‰[DmŠHØÓČgy7PłśäŖkƒOv÷šö—×-ücŠ»I6s\˱]Īē:ēOčBÉšē*`šd)¦ße׃ӗļŪ‡`ÜT%‘¢ŠāŒHØ+©!/rdęńq¹"źį8F62Ģ^‚d3 •j¤Ā£;4Żą€`ņƘØ ŽOw{īA¾I‚”É\óT8¦]Ÿéøb“E϶A Ō ļE鄃ų™^•÷ŁČ\Vk™–Öē<…ݤˆžwźÆFŁłĢ2.Ė?‹l׎ųŸå'”Į-)Æ[žÄ‡]&°ŪŻ -N¤4”÷¾Qž©f(ĀT(“Œ²̬Åf#õ¤ĪńĄ-ė­·W -“ŗRµ ])ĀÕyy’śānćt #£šs×÷=óØ{aŠ4BŗmY©}X4tø"ē@ś/śąäĶéÅßć³Ó×Ūƒ¬ F)Ą›±N×0Õ ŖPA¦Ų’ØuåĮ ›aŠBo†Ł’ń4€«Ēxj.Å·CŌŒ?ĘļŪÓĢyT3ēŽŽÓĶ=NÖńÓĻ;ßø§” Ņ‘»éɅؒņåöņ½öŽĒųŚ@łmŠĀż÷€ś¹,«5°Ųv’š#p’:ņ•1é€ó»ŗ+lœÆÕ7*”:£ՁŃP½Gp,¢(Fć拳߷÷“ĶsŲ#=īŃ–4žń›ŁōźķóéźbzÕÕÖ"ŠS­„|`“m -3į~׉r„Ž8 õaPēg¤kHī_°š˜ĖPP+ƒŅ%}U­ÉŖDĖ4$°} ō(Ėæ%™Š2qBZØÅą1Wk°Ž—«²ŽK+/SUŒ”¶Ūķg§‹FĶŪmÓx—čę̦ UEµu½N5…²Ä”6…«'rfkč©¢Ś+KŗĘŖėķR@ś‘’WƒD.„ÜIO°fs³Ļ›Ż‘‰oä× Ł‡ó]ėmq܋·|×i¾( 3=朾Ejhb׉<"~.ź/$œÉ%žA„lõśgŌå+F‘ t”©įV+źhńć1¶VƔG„I".ųfR|“;ŠlåDąóĒsMų©ŌZ`· ĪĮ› )5|h Ą¢N“$ĢC K"6¹Œ$J¦5ŗzņ 0Ł؆ =ż‚G¶ŅøépŻæ GŽåŲü©’@ž²[ŠØ +xڽX_“Ś8 ēSä­0SŅŲ!„“sģ.m·³’ʲ÷ŅvvLb ӐpIčŽöę¾ūI– „]¶¹"˲,ĖŅO2Ž5·ėCėdŅzóžs+°ƒ>ļ[“™8–ßg¶Ē™5‰¬/ķAēŪä“å‹Ö(ęE<ĶEžŲérĻißb.QŖ5š“žj1r,¦y¾ķ»ž.[_¾9VüO–c»ĮĄzPRK«Ē]ų&ÖmėsĖŁ1Š1;šøæ•å ZżÕńœÅpĆŻéöĮqĆįéčźō~x=ь"YKeļŌ„ƒŽĄīõ{æ¦öä|2NFOŖžE‹o‡—7£gµ’¢į§‡WW£‹Ėė³fõūTõž‰ģ0Æż˜„nĄÅ‹’(¼^üŠTSˆ„T$š».3¢–`Q‹øĆŚį‚F«\ŖČųI±QżRĒ&]>ף7žŠ²¾(į°ÓsŚŪ+é0ĘŚ“Q-°“č&µ³Ś;n­ó~Æż 2­ AšafōŻv!KāĢņlI”ņĻßxtŌ{\ēOć2„$±H®di}YJ_Ź"Ü`½œš³-—3Ģי ˉø"Me¢µ ¼$ +±\%˜ßū!© l$éJzFxčeœš$Å.d/J[ķOˆ¾īÅ)Ę'¤å=šī/N1ņŽŅ3ą«‚Øś uŁp–£.(Ŗk¾=WŌ:vŸ?«x³>Z‹„ü£f§9jjˆē÷e6{ɾŁCJ¼čąÖ GžĮė&ÜÜÖN~ŒCwĖlęŗ¶Ė‚m5āŗRØQH\ŖTFź4K±0Ģ׹øĀłøJä:}€‰Õŗ$R¬£8#*ž@Ź'XAŽ,Ā<ž¢opų— ¢žFØ Dūö$«”L#žŻ”Į݆ŪBXĘl5Šl.µŗ=÷ E’ h°^ū\•^¦“’iÄb•E(†ćūŪ»ńųśīźģ®™‡ĢäL¬“ņķ&°¼śÖĒÄqWåDPÓūoS§&ĖužVä]SÉīšėq$w[ø]]ø‡Č[*°˜ĮŸ”ɉĖĒMõ.b@BU»=#{¶Ū *Ēģg + ĄÄŲ”„;Mb"²€µ‹õ|.”PDÄĘJ†ß©Ö  ^‡]T^¼$—%‘Å)”9“«[R®`97ÄĮG²V,6ż3üÜß Šr&pśhzįŹłjݲŅGÆYzę$z ŗĢ1MūŒ TČ'ˆ½Gż¤3pŚź˜õU±MĮežĶÜmĮQę Tc¾z…įXDQŒĪĒwņ’ŚÜ;LVėĢa’Až8`),©4SĆ÷“Ńųżs7¾w­µIé¹6„Ź 0ź>…™pæwÜɁr”Žøóa`°i#Éż VS +j“Pŗ¤ÆŖcŁ:Ń2 lżģĖņļI&“Lœ† F ž°Ę‚e<_”f/m`> endobj -652 0 obj << +620 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [355.495 631.309 443.983 642.213] +/Rect [355.495 638.078 443.983 648.982] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> >> endobj -653 0 obj << +621 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [262.824 514.884 387.276 525.788] +/Rect [262.824 516.334 387.276 527.238] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) >> >> endobj -654 0 obj << +622 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [457.239 514.884 513.996 525.788] +/Rect [457.239 516.334 513.996 527.238] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -662 0 obj << +632 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 505.419 135.668 516.323] +/Rect [89.004 506.869 135.668 517.773] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -655 0 obj << +623 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [265.141 225.181 324.718 236.085] +/Rect [265.141 228.08 324.718 238.984] /A << /S /GoTo /D (ENCODERBEHAVIOUR_BEHAVIOUR_TOOLS) >> >> endobj -656 0 obj << +624 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [279.485 210.047 398.877 220.951] +/Rect [279.485 212.947 398.877 223.851] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) >> >> endobj -660 0 obj << -/D [658 0 R /XYZ 89 770.89 null] +625 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [344.529 105.15 445.201 116.054] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> +>> endobj +626 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [463.147 105.15 513.996 116.054] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) >> +>> endobj +635 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.004 93.195 144.137 104.099] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) >> +>> endobj +630 0 obj << +/D [628 0 R /XYZ 89 770.89 null] >> endobj 62 0 obj << -/D [658 0 R /XYZ 90 739.935 null] +/D [628 0 R /XYZ 90 739.935 null] >> endobj -661 0 obj << -/D [658 0 R /XYZ 90 565.253 null] +631 0 obj << +/D [628 0 R /XYZ 90 569.326 null] >> endobj 66 0 obj << -/D [658 0 R /XYZ 90 558.285 null] +/D [628 0 R /XYZ 90 559.735 null] >> endobj -663 0 obj << -/D [658 0 R /XYZ 90 291.223 null] +633 0 obj << +/D [628 0 R /XYZ 90 296.746 null] >> endobj 70 0 obj << -/D [658 0 R /XYZ 90 284.255 null] +/D [628 0 R /XYZ 90 287.155 null] >> endobj -664 0 obj << -/D [658 0 R /XYZ 90 163.099 null] +634 0 obj << +/D [628 0 R /XYZ 90 172.768 null] >> endobj 74 0 obj << -/D [658 0 R /XYZ 90 155.01 null] +/D [628 0 R /XYZ 90 163.176 null] >> endobj -657 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +627 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -672 0 obj << -/Length 2059 +645 0 obj << +/Length 1942 /Filter /FlateDecode >> stream -xŚÅYŻoŪ6÷_”G«5‰ś²÷–zN×”i³.Ųŗ”P$Ś&K%/°?~w¼£¾,§IÓaR‘Gņ>Éćļh׌Y®õjöņföķ„ÖŹYE"²n¶ÖʵāČsBįY7™õĮŽēĪ"tķ‹9üwĢņк뻤,eĮŖüĶuÅ&ÆJ ĘbŲ«łļ7?Ī67³?gČs-Oóc'öC+ŻĻ>üīZŠ“\Ē_-­{=ko‡oaż<ūiętõGŗ -čʂtŻVj¾šĻĪ÷‡"Oó{®]ē»2)мÜŃč}ŽÜå%µ›;I“d™V™Ģˆz›7u£d²wę‹p)ģ˹چł±–ŠÖd.ĶŖ‘jšÄ¼Īan -ź1±Ī3©iż™·IśĒ ±ŲꉨǢ§Č9æ9i|¶9±Ż®Ž}æłč¬²_o`ĮĻė ӉВž†_3#†bĄp}ż(† ‘eōXśc_ō˜?IYąD{š4ī7ˆ Ÿ(¦ļ¹¬Ńö˜ĶŖ§GϤ o.7†żĻģ÷VÕļø7K!Ķįć܂6ŃOč×ZóŻÄĀė$WĪ„ODæ©ī©q©äŸGø¼’>•ā²ö §»^o"Ņ1õāqh”wņgŹ#ō™°BÉ­TWƒ›»6ž€øM˜Ū¬8Œ1óy)1E[GĀŪ:ÅŃą”œ_Āš×7˜P:Ŗ:ף9Ń Ęœ'ŗäpdĘYŅ$¼/†pæļĪ;ĶūĶ/GP¼­«x’ -³_°Į±IuKd™Õ¼¤-]!ӆąūŒJeµćšłż«™õAĻŗøĄj½y»žøžįāķŪĶ›wļæß¼ąó±9ę -Įžšį¼•Ż!„VÅ9ą×9`Øõ=?“į|žÓb&āa ¹*ŠĀBøPłpS„lŠņP8¼CĆįŚßai…ERczż;£½ ØTĖ=ߘaAūµMzūCµpæHż:¦ KźēxŽėd<'jČ’"jLwX^¶/tāwŗ;äü —ļń0Ń0Ÿõ §ń«R ų©ÆĆi Ŗ ż:(ł™ņX³¤ŲÜõŠŖųIr|×ė!¼B€ŗ˜BF„Š‚Ą ¢U€Ebµ'Š3 -B“¬y@ńü,ƭߢˆ#yˆ¬Ś*ģc  C£šŽyCßĘČÖ%é¤4ŖŸ /³žņ “".d;hXŸsŖónԐ!øŽ† zėq"‡¤…t€ĖTŖ6J=”õq;ņ-³ž+q_×)Ėd[eė:’ŗŗąŅ%›”#äµ=Ålō® "”®“HT® *© ©|GD1)·!Ęüš3Ģ@HįŸpCGßńžu¾Ļ<,æ¦:aš(Õp[W­ż ó2<|żż¼*œsC—79vS§T@ō&aĪÖÆžz.iØ'ŸśŖ·¢Ū ö"8ÉĀ8Ł«y.–*Uˌ„‰“kcŅ“VüyÓĀIӆāN/°IŪ’ʶõ”}sI“ŚR w#öĒĒū3ü’£Ņéń¹K߁łŌßq’³{ˆŌ +xŚÕYŻsŪ6 ÷_”GłZk"õŻ·Äuŗķš4s²§.—SlŚŃՖ朼C*²« +–“œæT UV4S,j,_]ÄŖĶśŖĶŅ•>å8l¼B”=ƜįҦ³źĖĀ$’­wC¾Õ˜xö¢(‰HńįŪØąq(Ūģ,Ąą<Żl  +7B‘0°hƜŖHXŒ"V]*"6„š+”ĢvÜÆZ1aT CЬ @dk_~ä¾/ģ ė£YVćźÉl™¤ŗ`ĀŁ‡¬¾×¦€&ÜAHå³b®.•U õā!Ž„}†å`¼¤5m÷ab|8±ŃĀŽdG=©Ų«Cc36²¼R51pĒąÓ%>ÅČG;ČŁmäøÉ ÖŪŖ&]ÓGa`p©X«Ļě«jVfwŗ*QD‹&Rv T–Ŧ̨ģ‘˲X–éŗ'#Ü}ž=Y©µŹkν œÆYF甤ęQ/i¶0øW(½Ż};/x $·ŹĄ~ ams¦„ĒĒĢkķME:j><»­}˜”ĆFIFö¢,ÖD†µ*ń@z®¤Ąp¦‰Eʘc +{²«ķfS”uE+:»dĀą“±ąĆ}6»'R($֐˜ŽsQ]ū‡­REĻEŃ@ö³ŗńżļńcŠa Į!0š +Ū-Šx±ģvE±¼¾ąl VŁ\if[ō.}:`®ZP_\‡óæ_»ś_=MödńüĆŪÉ­ĄĖ‹ŅaˆN•x5žtph?7¶Ö(÷5ŹŽĘńåWiģųˆ:·„ŅŪwņuK¹÷,wA9‚Å-õž3ÕL[m© ųF}ĶmįeoϽ/¶pwņé# —£É“ˆœP6Ķ•.Ņ"©KŖć#m1Y'’»ęwć©¢Ł9=¹ēVĻ|ź)öU·źZ˜‚Ž› (ŠČµ1;e +„šxœ+Ę4į¦K&ҼœÅk,#}¾ńŅ«4”@0[ŠŻ$Ü‘:*LÓq2żå”ÄMlą®ļ%öÉjÕ·E +XYö~ÆĢ¾ąt¶Ąl—Õv¹TUmŲW—ˆqo‚Į$@1j©“¼” Čߎ>¹ø˜¼’0};™ö¶lūæźÅpļ¹ņ¹?źż _óü² endstream endobj -671 0 obj << +644 0 obj << /Type /Page -/Contents 672 0 R -/Resources 670 0 R +/Contents 645 0 R +/Resources 643 0 R /MediaBox [0 0 595.276 841.89] -/Parent 643 0 R -/Annots [ 669 0 R ] +/Parent 611 0 R +/Annots [ 642 0 R ] >> endobj -669 0 obj << +642 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [385.11 405.012 513.996 415.916] +/Rect [385.11 93.195 513.996 104.099] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) >> >> endobj -673 0 obj << -/D [671 0 R /XYZ 89 770.89 null] +646 0 obj << +/D [644 0 R /XYZ 89 770.89 null] >> endobj -674 0 obj << -/D [671 0 R /XYZ 90 88.215 null] ->> endobj -670 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -678 0 obj << -/Length 1998 -/Filter /FlateDecode ->> -stream -xŚåYYsŪ6~÷Æą#5©h<7镶iģ>„y $Źb#’ -IYq§?¾»ŲQn“(I;SĻxģ.öĀr$œ[G8ß\<¹¹ø|¦”“xIØBēfķ$‰BéJ:7+ē•+ÅģõĶ÷ŽšJl2Ōēł¢NėūŁ\ĀżµIo3”ŗxzsńöB‚p¤ŃD^¤gY\¼z-œŠæw„§“Ų9©Āń•†qė\_ür!ŽPIßÓ~Ø,,(#E”'ål.…īõ~·«ź6[š'y[§mÖ Š¢wĪ\Şļ¤ćf“Į„Üg_’@“Ēg¾pÆp!ݧå²Ze5qvu5“{—Æ@³”¤4€B³:-o3ŚZ­‰Ō  ĮrĮмŁ\ iĻ—n‘—y±/XoÉŅEśn@Żn«™ -ÜčBĄU¤ō’ ¤«°f“€rWŁ.+W -Ŗ’ĘvĆÜĒūU^ŃōēÅļŁ²„łĶ,īż.Cl2tŸįm«š·YęĻÆŽtõĄ5ʐ7G¢#n»IŪ±\½ŻēõŃåŲO­+ŻC“aÕ‚éŖ¦%Ņ"mņ%Ʉ6Ż’ĄŚ/ŻęĢ@M[gian¬ÜļXϲ*›¼i’2žŲm£åŗŖ‹”wn²”āčyIœģāJ„0ŽŻ -ć–8q›ė—šŅ¶2ÉCE†pČŪM^ŅBÄ>pa±Kļ·Uŗ‚{łpcŠ2īćéxĆŗN‹¬É’`Į‡b±/™V”ŪΤ‹ŗqžć‹§ßĢ}œxøA½"Ī*k³ü€iƒÜÖnéąh斾HĆķ¹k D¤öč§ Sä~ūtŽ]Ė(-WćŌEz`t(S¶Ć——p‡ŅĘѶŖŽĢ÷;Ž‹t±å˜¤Pī¾ÉĄöö¼Č •=ųB¹·Uµ¢Ła& “—·HŠī®‚£ˆg\ #ZÆ”©‰EJ9ƒōvŻŽĻĀĄż -(ĘMZ춬k’Éaˊč‘ÅsÖmbtK>•õĆCŠķj.»ƒ5ĆŖŃ=›œgÉ$vš§ŃH²¬:äo#qčOd˜+¢sŌÜ)•č>xšįā]·?~čVUÉå~¹IĖ2ŪRǤ< rč ®±¼eåĻø?~Lć›o’@—؈“DŗT;yøū%?EĘ[Ą‹Ō1jįr“g˜Zwxø}¼ €5Uib÷Tu²O„čĢ,Öō ˆQžōžńšĒY‰k -D?˜0LĀH÷‡‰- ¦ĀĆzW5MNéŪ-H`äånĻ2»ĆźŲī(ŪŠvŅģN“E¶L!u; 'ė6cÓć'Ń÷įÕØ™“um«]F͈a™œ†qµ7µųœŸ@+ŖĻL*/oyŪŲžČztc}tc. pŻĆ&_nECjāSs˜÷PŒŻ3(üRs±k >e•-“䬢}Įc–ޣħ£^l!±ĀGŅ-«–gŌą ­…ćØ¬ĆŚ”ū ",IŗxŅłܔ5,½G»ąl“ßn¬ŒķŌ:LŒ%­O'ĢśĆ]“7UĢ™¢ĘÅ×ŃMQŅbP”:(JčGĶu8) }W…ŗ×4‹0#ą8 }ūŅ0ÉŹ:_"É8šD§Łä·ōF1‰×÷=IŹ& å-ö ÄśöžˆEś_<;Ąk²ŅäpL3āL=ȱ ¼C¾e`õÕ~É[Yۚ¼‹ā.ž€ÜW°be§z›¾KÖzĮ4lœęˆĒŸ£8ė^ģ÷ß.Šæ]^fĖŖ( [·_/×}6Ćźe‡…[Śīó†WU±ČKÓ¾ļ÷ŽÖ 8޶[ę$­cŪĒ wü©ƒż DtóŽŌwōŖHCĒzxÜŅgp”µžMu»Æ¹Ÿ5Ē„Ų}b3™Õ|ūŚLOę[×T²Qü@Żåu»gŪŲνÜY]ķŪ×A”—!ÅŪfą3s†õ™įć5ģ}ęŁ/NšytĮŁÅŅ&‰īŪ֎—ĻtäDšA+¤u•ņtÓqóO’gķ˜x~h;4Ź’®d?q~ŸpSÓ?y|’3"’f¦;±b‘Š[:Š¾Ø³uV×ĒäŸ*&ą*—/BČoH>H¼2eėuæß7ĒuÉb”5½„ņ­„wt™+Čkļ„9/bLPć+(gƒ3uo& tųSRóD‹‰2Ü9^8xŠńŽ‹4„?:įxß¶ęWd³ē<>¢įśÉĖŃśÅõĄtxųĚ3GŹ$Iz)ć-ˆd|ErŹ÷pKgCq‚fäNÅēĒĄ4 Ōg4Āiü«ÕŪ1m‚Ķ?ŪŌ†:a#ā`āūŚĶć)fĆ’œö§cB1Äńį˜ć÷³ógNˆ÷±Œ’e2@~h”łŸ1äåGé ĘųyūBA}¦%Ć HgÉORįF ÕŌŻ”ž”“ČŠ‚4žaÜ’«65‘’OT(fė_ą—§‘˜8.ų“ÅäoŠ~ˆmC›Æc“Zž‹6ž¶„×`‚6ä²(ĒÓ£cOŁyNŃŃžŁ¶’BĖÅ’¢#‡æJO({9pž> endobj -679 0 obj << -/D [677 0 R /XYZ 89 770.89 null] +647 0 obj << +/D [644 0 R /XYZ 90 533.064 null] >> endobj 78 0 obj << -/D [677 0 R /XYZ 90 739.935 null] +/D [644 0 R /XYZ 90 523.588 null] >> endobj -680 0 obj << -/D [677 0 R /XYZ 240.275 493.236 null] +643 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +651 0 obj << +/Length 2196 +/Filter /FlateDecode +>> +stream +xŚåYsŪ6óŻæ‚Ō4¢ "Õ7ב{%qź8ķCŪÉP$l±–H… ¢øóżųo»ą!QŠfśPĶh싽°»]ėÖr­ļO¾»>9½šłx"`’k M)ŒœČ­tuņūŸ®•ü'Ėuüilmõ¬•x>“KėŻÉ/'n+‡+†‘Gūoyŗ ŻÓ¤ Ī\Rūśķģ{ź•µæ„ēŚg#į‡öÆZęw#įŚŅLĢd5 +CŪŃĀŗÖX„ŽšŚģb$B»\.Ė‘ŚŪ¼ø„E×£Ųµ“ł’idR„U>—Іõ‚įi¹Z/emF‹¤(ä’«d½nČŻnēeĶ¢w'_j™dń‡ėz·›*©ó²PšėF{¦=½š#+¹UBy”3ńXØń׳żM`ŅN,Åė2DžėŚ’¶h©1£É}üogæöŃāĒÅųę™’1^_¾œ}Ą™Ė,N q©A†ć§µĻ¢²ÆĶ„wKlēyžhŅ+ņNĄCTķyĢ~$h|=A±™ōFŃšĒf>]!’z>ˆ@ŪW³³«ļŽ_]]¾óņĮ‚}}•Ūż•ĒŖ¼QÄÅÕå›ėē³7׳+Īą’ ß æzIµSc-;BšĘ×ŗÖō"ØA‹²– ŚźŅ‹ķ\0_­ĖŖNŠš†TtB'-«J¦ M6Y^Ņŗ¶^EøRłm±’fõv! źmļ™ņzD;Ž+æ5 +Ė9€6'Kg²<@ĖƒĄgɦ€ Ž¦=`d„.3ØQńü,W5TćøÅ†4@fmvĖ€«:©ź–xMmmö¾©Ź¢ܭȈœ,²īņ‘jc¢y’ޱʙˆź»^Lj]Ö”¼Gč¤1ąFū&Ź.Od“tÆ'ŚĄE*«ĘJķÕ–œó}‚é¼Ā>÷x’L.%z„Tśv)ŗ%åĪečf’%ńvõ9ĮKŅĪE(]&UŽL¤śšóą[NģÄQDĢ͈š·thwŖŻO7{ :ńŽxÖ)׋'н^¼ü±XojŚ”±‚ß -ēeĆĮyGķć„#¬|óV8Nžį†.;9S0§¬(Kœżī|Ęs‰C=y_WKy3@Ž ö‚/NŠē–7Œ3€ó·³Ż½X–Īņ*æ]|A–ŽäśūC7cĮ‚!ĮŌ¦ŖŹM‘ńnŽ^V­Łž°hį hżķöóÖ lĒvcŁ:̾ŗ I͵¼“»ų]’ žrTōC”?˜x|”ƒR³åA¾Ć{-lżn³Ę,¦#ĉļņŗJj©$Ź©ćF½<éŁ/¦ĪŁŁ(]ą@Ų3Č1ōĘ˜uUb`ś”gśE 5ŪnĄ”ėūŃ$“_ÜXa…Ć1&é㚰ā6‘§ēL[ū0м+ÓNŲ¬R§ĶĘ>mƤŃ<~Ņėž0a» Šŗ]r¾įZެ  „c'€QkŻ“F8b˜œ"a‘<¬ dÖP=Ā;ȹ¬:čøZQ?D4ڈL½ +®;āų“‡N «ŪŲķÖ»‘hחSl/]0ĄćĻlŃüŽĮqw ¤²H‘źżd& 1µw?üżb§*7‰ ‹ļŖ\ķĢŁOĶG’ŚČŪĒ%é"—ØšOȊł S•E{fŒ”k\¹_ōwO|÷H…Żo187čŸ“Ż‚p”Ļ:“$1tLšŃ¹Ęė®¶Ä$,7Lx›ŅÅ:v;z‡Q_ļ4WŃr1”1hš:s™&%ŠĆ7Døóö’oąÕœ1²)P\®%U=„£“x„Ļ‘`+żå{śŠ.ÆyY_AO~ObGb@ ®ł‡\(" źą;bĻ<PĢ5»Ž‚H(KÉ }‚“™ z‰¹„āįĆźQ‚=Ō¶½c9öąÄ ĀI“D‹;MpĄåŸāŁŌ öPµ›9¦&lxb^šébØpXC%ŗ®r²¦›'›øÆE‚S‚Žž€vĀŚŃ猘„š¶~CŚ7ԮȔGŒcoPŪƒ.“L¬±%‚“DÅĒ%ķ½QLĢDSn‚ tš”×Ų(šõå=W =č(Ā)Yčó³ōtōŅbŒn›/™Šz¶IyÉ\Öµ>wQÜų€ŪÖįX{ŁńŠŻ5Ś ÷Ļ‚‰ƒūg¤’ž±ū©=ößõū„ż’éeÕü +endstream +endobj +650 0 obj << +/Type /Page +/Contents 651 0 R +/Resources 649 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 611 0 R +>> endobj +652 0 obj << +/D [650 0 R /XYZ 89 770.89 null] +>> endobj +653 0 obj << +/D [650 0 R /XYZ 90 364.929 null] >> endobj 82 0 obj << -/D [677 0 R /XYZ 90 474.897 null] +/D [650 0 R /XYZ 90 357.31 null] >> endobj -681 0 obj << -/D [677 0 R /XYZ 285.086 410.994 null] +654 0 obj << +/D [650 0 R /XYZ 240.275 96.348 null] +>> endobj +649 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +657 0 obj << +/Length 1137 +/Filter /FlateDecode +>> +stream +xŚķYKsŪ6¾ėWš(#oG[qšÉdŚ4ŅĶõ’h›­HŖeO2żńP" źMÉé4ž±/–Ą·ß>ø‚ óä@ē—ĪķØsżcGĮ1wFŽ€ŽĖ`9£©sßÅį^3ŲżL’( +āi0Ղ”Ķgaüd–ż,Š3?6 +·a–®¤ƒ$‡±Ÿ…I¼čõĆPtź=Œ>uīFæ;H‚R˜ \œIŌ¹€ĪTŹ?9į9ÆJ+r(&rœ9ĆĪļX3Q@(Ē…5Xēā²5ĀvĶ‘FȓI‰Fčō± įśÜѳ|ŒŃ}Lf³¤‡Y÷UDˆ×Ķüń̬ĪÓ¤‡X÷%œ -ńc­¤åłŸ } µƒÖHõ˜–ķÉ āI2 R½:Iā? ÄOĖTA6Ēł©YÉMĶyÆĻįäŁLƒÜ®Ü„€`L[2 ² Āø`müM/aš- 79¤|Œ—Q&Ė…žo.² ^œ‹l uŅiź lø#pNÖ>Čxķę¦ĒXwŠ’—óy’f¹’ +y®ś% ƒ4­‹M€žHŸęą”j„R“Q©q?³ėÅĆśyŖŽ[eUm±ÖĄ“Š5cĻ~ čČ×”§E¾ćż_æ—Ī$kŒØ“µ÷@ÄL“6ĖŸģ— fµ—Č–_mqüĶ@söٌWzPq[ś’˰D]nŒü…z©oVB¬µ”·0½Óz˜‚ü‘‡°A¦ōČ< +¦…mœn§ņ/Į6¶ŗĢĀĘNÅfsHD›–å8 ‡”“š{6fµ~N>„Sė˜‡e‡cööćłĢ ±3ō2€2zʐGG“tĮ?± õ‰Lr $vOc²• +W‰mwsņ”“ +HNĖ •g ī’U ³©Š"ŃjPåjEżcą“> endobj +658 0 obj << +/D [656 0 R /XYZ 89 770.89 null] >> endobj 86 0 obj << -/D [677 0 R /XYZ 90 391.718 null] +/D [656 0 R /XYZ 90 739.935 null] >> endobj -676 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -684 0 obj << -/Length 1081 -/Filter /FlateDecode ->> -stream -xŚÕZKs9¾ó+t„JF‘ZŅH:ŚN6[©Tv7ęęņģ ą`R©MķFš™‘˜1į¢qKLż©Õ‚īAoēćĮ«?Ę:…ļ&H¦  hĆ"€ -(!ÓĆœVĄ(GårL¬®žhéÉ·C`Śg÷ū(¤Žź’ čŚ8唳’ˆÉ¬»$ž'Ób«““ex£”hJīŖlNĶ0Ÿ„^$ļ_æt%H!x’8Į÷łęS^ݜĶ:)Ź‹b¬ÕP¬„>ŖŻuĻü6ÆżŻ|žŻnÜóųæ‡Ym“M ęę\}Ꞗ÷„e2/æ=<¬Ö›¬“+ļńßėŁŻl½®‹?¬°{XŻYpšXŹŽiV -sJ†W7óĶ«ĒėŻ÷¹U·- h»Łér+p͘‹O“%Š‘ĶU:žW’žłćŗĶ¹Č?NåwP¦J¾_}Yöͤlš/ ŒÖQ3k^øĮx©}h®Øx%4qµ 7„QO?ūņdč“·Ć2GŖ„¦Ś«cś¦±ضR^ •=`VŃ}ńāą=i­^:»ŠšJ+ -*ꞄŠŖ#ļIgć„o¼ßųœķŒg'l¼_éƒHcĻOÓxēć$ŲQÄ3^<›ń¶ŽŹ X$4§+Ŗż”÷ÕeĻąŻŗļP^hĄ¤­żŽƒ'ŌqŌ1īK x7ąÉ[ü<]ófįćI9#·āp/ķĒó’c”Óēč.c\†oÆāė?P 3}7š6Ø, -endstream -endobj -683 0 obj << -/Type /Page -/Contents 684 0 R -/Resources 682 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 643 0 R ->> endobj -685 0 obj << -/D [683 0 R /XYZ 89 770.89 null] ->> endobj -686 0 obj << -/D [683 0 R /XYZ 90 587.506 null] +659 0 obj << +/D [656 0 R /XYZ 285.086 690.081 null] >> endobj 90 0 obj << -/D [683 0 R /XYZ 90 582.899 null] +/D [656 0 R /XYZ 90 673.878 null] >> endobj -682 0 obj << -/Font << /F22 424 0 R /F37 577 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -689 0 obj << -/Length 150 -/Filter /FlateDecode ->> -stream -xŚ•Ž1 Ā0F÷ūßŲĘĖÅ$Ķ*ØP\Ä8•µÕ"ŲĮ:ˆ’ŽXtptśąńīqŒŒ -#Ķ×"*8qˆg†wZYшŖLK^Ē&1 ’Ž&ŗ½Ēf|ę3±œīMz[“Št#$†žJÖ+o,ځŖšŃ%^‚• “5`!&ķ{ھśīO«0ʰü›zd1± -endstream -endobj -688 0 obj << -/Type /Page -/Contents 689 0 R -/Resources 687 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 643 0 R ->> endobj -690 0 obj << -/D [688 0 R /XYZ 89 770.89 null] ->> endobj -687 0 obj << -/Font << /F22 424 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -694 0 obj << -/Length 2326 -/Filter /FlateDecode ->> -stream -xŚĖ’ć¶ń¾_”šCŠŖZŃ$ų’Ŗ’ĆŚŽGœJģ²g+‡$ˆÄˆČš!ąNĘ_ļ~āģr“Th4ŗ[čwƒÉī²Kvļ_%²~{’ź›wJķT—„*v÷»S²+óS\³Ż}³ūGō]«ÆŽLūƒ*’(Ū’ėžęČćźX„ȑģEēGÅ o‡zlĆ·¦Õ{UDŸģ8O sšĒY^*a.³8/äß²8ŻŅ$N=4ū“ˆžlć[įĢv§ųTŖRÕ1®²3Ž·fČ*½ūž/¤Ń›7ū<‰¾ć —B’ŁĶŗėžł¤cō0zFĶNdyšFs×1źa2æĪ Æ&&=\„a|`”·±Ću©Ī^ݽŽņDEē½J">QŃdœŸlķŖ‰Š„i|* -VŒEŠč acŠV×õ85vøšÖ¼ÖfņڼéģyŅÓóĮąAųsĘ:ć=š¹xØņ‚,'Ź æ޳ümŻ¢z o‚ąåR^Ÿ;ļš‚‡-žŽŽĄ›ßļI„wĄr<±8XY’LÕ ¼č××k8.ūĄ°F ~ĀŲҶC™p˜¢uUÓ|²ļ–DõŲļÓØĒ vv0ŒŌÓ>=F—¹7ƒgś»ĆÓŻķŸœ‘›Ō’ dN²Kw¦?æµh[JŒżź0 >: Āܜw@†×kUq©rę’0¢RO†Ņ=Ca›¦‘Å[¦SŽ÷ÆLō-rPP0ĄūŽa°±0X+SxŗÖ³»‘…hAzōY;žFćĄgn‚“–ŪtÖy3`Ō&„8ŁTŃÕ`ÆēʎŒŗUGµ®Ž°‘ź4m€źõć>K3ځ— T’é暓sśsį­qš÷ā?įélo=ÅRōć ‰¹”:D²čl)Ø¢Õ] …€˜Įžł|‹ØTČ£GąüFXÉ«Ä )nDN~䕊śŹ&-#tųŸš×š7œøüPofheQ·ĒįÄtõ[1ĒķZtœ»fK]:Ōp=¤Uh9\:ōņ²5THpƒaTŠN½Œ=ŗw+ÄķÜcH h“P[aoõŌ°õTĕž¦²Š®fŖ½Õ)”؀š­)÷0–“,²rQķeķ:œ¢÷\Ģl©Ž%OU9ß§;YR0tĄĢ ‚ō©²/Ÿ‹MŖąń5Ėd$HšÆśė-tšBü²ß#Epc¢p’ž\Õ=Ś+Šųœś{Œ­$‰Ž•Ä -7•ϵ†«NŚ“£Š’3 Kõ%ęI(MW“PQĘiRbžćʬTÅU~ -b±Ē„×%ŠB,Č%¦\(¤ø!š2Š2ēā–źˆ}²\””GrĄjÖŠ%lfv=8!0/łńš „3āģ‹F»ō-•Y.¬|…†7”Š#üd)Ł²Óź½ND#¬-…$qNN'AŒq]{A9(RĄgč«A®ołF'Ź×­»l8¾µ—–*e^¾÷ņjÕr2ųĄč~¤£Wd,ÜÓ¬ī‰ĒŗžF`fnU°„ŸNŲ©¹l ¹•)ŚŽu=OL fŁŠ‡,ÆÖ1]©7Š4F(½éHØõŃć(FPŹāņ0éVĘ/Uš&+]ŅT†}Ģ0Ī|%EEI ļvc}YOaÖx2XĪ6ę¹¤•ŸŠžz求 é CW3ņ°¤ŖŃĶŚģ2Ńą.L4“ C€4””Į ĶżÕŪq 0OåµÄ·Œ“v€ōK+'ėĀÉŖ²² -”ł’~_ō <ÄĄę“®•€•ž¹yϲæNc UĒ4Æ%øZ[· ŚAXęi˜˜ øX{mˆų+oļ<‹axoo%oļw“īEČ/ö· ųņ¤·2€’ „bĀ’ųDd§’żJ‡:Ó]d«zAÉL¦¼…‰É1Øyi,‡ PUF(¶O†Ź`ĮęžMGȀž8‹ -)8_R>°¢xŠ™įB‰čf$MÜEfįĘ”¦łJßĘÉd`™Očd“ -”¼©ŪĮBˆŠ0”.Åwh7'¤<™­>Zvä•ĖŅ–@@÷RXµ¬‹‰q#Ź"‡Œ…ų_c'ļ„WmUtH7H#zóA‰,-ĆK"Z»gFń+4LØw‘”‡óÜN\­é™B{ĶŪN{~ Påģ ‡ōŖAq– ~¦J’ xc•ÅW›ˆ$]’‹~8oÉ·‘ƒ*•<ł<})Ą=y£¼¹QōCčŽaaćgųs¢fDvĄ,Æ$ć?P/že˜ēKüfŌYiue*ż”ŃŚÆFršjQ¶Ł(č ° Ē’#ĶĮUĮœ€s°=ŌrœÕYōćķ›œj^ŗœ˜õŠ_ʓw` āBé” ¼įYĻĻ‚Yåé"gÅ}«kŚÆĻŅčö"‚ćPas!…0-8^’čĻæ|’7†€ep½…VJ#‡Œ¹oĆg—ŽhŽ,µ£‰„a²ŗ>‘5gg(Ł‘·”ģ€4Ń|%ābü ń4EöĒe] =£B=Sšl ²øó3O`jõa7ėO)Œa‡!d…FĘy6±^DÖ -•—iFØÅģ1æü~¤PWų9„†GŗyēF†n/wżėOoßoŁ€rŁrdäkƒēÉźSC¾ōLĮš©ōCżģ-¶™k#»UøĮnéH§ėG} t,łāŪĻo@ž„)![ģܕ×_ĆśöžÕļĶe™ -endstream -endobj -693 0 obj << -/Type /Page -/Contents 694 0 R -/Resources 692 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 700 0 R -/Annots [ 691 0 R ] ->> endobj -691 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 462.89 178.158 473.794] -/A << /S /GoTo /D (CommandLineUsage) >> ->> endobj -695 0 obj << -/D [693 0 R /XYZ 89 770.89 null] +660 0 obj << +/D [656 0 R /XYZ 90 229.999 null] >> endobj 94 0 obj << -/D [693 0 R /XYZ 90 739.935 null] +/D [656 0 R /XYZ 90 223.004 null] >> endobj -696 0 obj << -/D [693 0 R /XYZ 90 553.953 null] +655 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -697 0 obj << -/D [693 0 R /XYZ 90 553.953 null] +663 0 obj << +/Length 915 +/Filter /FlateDecode +>> +stream +xŚŻYIsŚ0¾ūWč“ZѾ³µL¦KBO” ” K ™L:żńÕb#9Į¦fJˉē‡õ½OŸ%½g†wÉa'ŁKŠP "@ēh¤Ą :ŠmaŅīuN56¢‰ł“³ž.ēżłc;%µ¾Üõ‡™õJN:ɏ'°»—PR®ĘI·‡ĄĄŲO‚T+šą¼Ę€jŚ[p‘|NP•@B-^¢"¤$~ü“³ćv*jķłęāšÜuPėW;ÅÄ“Ō|!1ĶMk­ó¾qcʹĮ‚›m˜r–„µ7e ā¢Ķśy^H5d‚W…ÅW`Ł…ŠցŲ"XĢĆJćĻ^%Sl_žŲ(xoƇĮēlo<Żįąµƒ'˜4<ŪĶą½ĘQ<MĻ’­ąESĮfƒ‡ųƅvüʃu> endobj +664 0 obj << +/D [662 0 R /XYZ 89 770.89 null] +>> endobj +665 0 obj << +/D [662 0 R /XYZ 90 369.823 null] >> endobj 98 0 obj << -/D [693 0 R /XYZ 90 553.953 null] +/D [662 0 R /XYZ 90 365.215 null] >> endobj -699 0 obj << -/D [693 0 R /XYZ 326.66 252.084 null] +661 0 obj << +/Font << /F22 400 0 R /F37 546 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +669 0 obj << +/Length 2253 +/Filter /FlateDecode +>> +stream +xŚ}XKŪ8¾ēW9,d V$źecwGO2 d“Ģav1 %v‹Ū²ä©īĶüś­e9Qö`°Xd•X¬Æt²yŲ$›^$2¾¹{ńśV©Jā²TÅęī~sH6e~ˆ‹}¶¹k6æEo[}öfÜīT‘DŁößw?²DWū*E‰d³+Š8ß+xß×CޘVoU=Łagį4³¼T"\fq^Čײ8ŻīŅ$IŻ7Ū“ˆžmć[‘Ģ6‡ųPŖRU²’ļZ³Że•Šnßż‰4ŗ¹ŁęIō–'& +·LnŅ]÷…WšĮ8f÷ƒgÖäD—g„it?u³īGóĒŚšh¢aŌżƒ ÷Ģņį4¶?O¢Õه^wƶ»vB¾ÄīÖLų'æŪī“%^2:Pޤ‰%‰ź„žķėó9,‰½gZć >!¶“ķP',¦ńüł"N³| 1KdŽüō‘‰ó8 żO¶A „ć€ˆ’d“nF $~žįÅę7–eh½’ōö÷7Ū¬ˆn>½ŪfIōėĒwwD’ćKöŸõØOfŽ"ō™Šügrž«+Xø™ĪŒgūļ¹³µõٲˆā«/„ńõmVm Ŗ$Ä$Äō!±Öµ„åļŸ’ ƒwŁŽĢ|Ąe™ elXDÖūIw]š_æ‰Ā•\÷‡ņl(ģńōviY„{ +1įxĪńÄhźįt2}C0ƒfX`ģ1 ä„ †ĆeŖ¤Özr—mĶ HĀ>jĒŹÓhčy­ŸNf„“$§é¬ó¦ĒxZ BˆP¦%"jPyAÜ÷lō£»vÆéŻ4šÆŻk‚Ēu|Aŗė„ Ęِ§¬æxŽUŔ©ŁĆh¼­%e„ „$fQR‚ń~y‘1„Og +]XÉ÷¼šųįOfp@bč%ĄrČ}–2&¬NgÉ_°Aå<=č›bæČsó¶Jņ+ģ÷­M”`W.>äV„8÷Ø,¢£Į\O˜uÉīj™Ża"Łö0Ś€uŅŪ‹Ų¼d ¤_–’œā¾VŽjQ§y.ž™Īž¬'œįŽÓ0õ~Ķ(tˆ:dŃŃ؀"ČĄčΆą$ʧ’r¾EVŖöHäŃ#H¾Qņ*ÉB~1¢'ßóHEżhz!Ģ ¾> ŸįĄåOÜo”B)Žŗ-žˆ'Ī £/²LŸńF‡©kÖĢ„E Ēý +o‡ż²|*8’įbT°N]cĪŻŹęv:!$4Zv[oõŲšķ©ˆ+ÕÅdĶX{ÉS²Æ§§¦ŲC,'Ydå ŚĖŲuœŠūf®L—®SžŖr>O÷dÉDąŠ€3Ķ ²§Ź¾-l¼.wR/EF# ĮOĪ“½—Ķ׿ +īn¬ +€'…(÷hϼ(źsźOĄŅ Š÷ģ¬˜qĶįpŌQ{®¦%# SõCĢõ#Mõ£(ć4©@ ’m„ĀTq•Ā†æ³Ś}Āć E!7Ģ9€¦X($¹!q E’s±lJš'eh‡Ü4A­Ą:Ʀgaw'į9>^Ńa»P\_SØ[*Ū³^ł OBGśŁR°e‡Å‡€½ DR#¢-A’ČĪ8'«£#®k/,IŖśu5čõ-Ÿč@ńŗv–Ē·ö”„L™—Wķj^- +ANŽ3ū4P…ĪŃ+ŅĢĪiēÄe]ƒ 45ć°o‘0…X©ø¬+¹¤)šu=¼®eÅŗi¼ZbŗR!nYŒTz±7l”Ņ ĒFPĖģņšŗ ­k?gĮ‹®tSy¬ aśaā3(I*J@$²ė…õ:ŸBÆńl0­4æōV~źĮzŖū +@s2LĶĄ]ŠhF7iøsGƒ³ŠŃŠ$4e@RS†śĄÉö4.1SŖ½0āQń„Ҭ€oĆ(ūōj+Ē Ų9Ėa¦;f”±z\ē6lnŽŁAĮ叆z“Ē JmŻõuJ{|ž“ ÉĮ¢³©)(2>5šä0Ż ^ĮM§³·CO0Oåµ ›/'å÷Ļ„œnVŁh—•UŲ™Ļį÷MĄÅĪöĘ­UµV+5sŃņĶü¦Ŗ!ė˜ę•€«µuū՛oūĄ©”€¹åė‹…翃lļÓ2üw äæƒ[|n±’ĻöĻ ų/ņ—„•ügH#~ć‰>dĒ’ó/ƒ€ēm¦6ŗČ0Ģt•Ą·Š19&5eČĄŹŹ(ÉöŁP,ŲĆ\³i‰€ ģ‘£Ø„óķĪ{6:Ó?P »™„IwšY`øa‡ „i¾S·±³ĮÜĢ:o…XŽŌmo"Ō „³GÉnN¶rg¶ųӅøœž€² +B»—28`Ō2ĪWŒ1%¤-Äo AŸ¼”Zµ]įaDo¾"‘„ex)¢µūĀ,~…†®ķĪ‚#Ņ"Ō0ŲēĄßÜ·“TkN¼C{QĶÓN{~ ål/‹ōŖAu– ~¦K‚(xc–ÅW›Ø$[×*–Ų‡ż–ü·³S„’'¶=<'o”7"‹cH½d Ģbü ÉaS3ō¢;pę×n㨫gEśł’󟬔ŗ2•zŹlķ-9uµØ[”¬˜Ü€z,ŁSŒT®xĪ÷¹{õ}żóņŸ¬jŗ YōŒ’ +4Ģ'ļĄŌ…Ō ,ix½"®…³ˆÓYĻBś’;–{æßK£Ū@ćPaq!ƒ0,/Iōńó»OLHļNJ)UŒ"ę® »œŒfücŖeŒ&Ćdq.|"kŽŽPŗGž†“ŚÄņ…ŠÓć«’R½æ{ń?ņ€— +endstream +endobj +668 0 obj << +/Type /Page +/Contents 669 0 R +/Resources 667 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 675 0 R +/Annots [ 666 0 R ] +>> endobj +666 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.866 460.515 319.169 471.419] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) >> +>> endobj +670 0 obj << +/D [668 0 R /XYZ 89 770.89 null] >> endobj 102 0 obj << -/D [693 0 R /XYZ 90 230.219 null] +/D [668 0 R /XYZ 90 739.935 null] >> endobj -692 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F11 698 0 R >> -/ProcSet [ /PDF /Text ] +671 0 obj << +/D [668 0 R /XYZ 90 553.953 null] >> endobj -704 0 obj << -/Length 2474 -/Filter /FlateDecode ->> -stream -xŚŻ]oćøń=æĀP@Fc-II–t@’Żģ]»×ķÅow‡‚¶›]YņŠrr¹_ßĪP–-°Ūn “Or†Ćį|‘3“ĶDL¾æøY\¼z«Ō¤ŒĖ¹šO“RLņ¹Œ3%'‹õä—H¦Óß?N’TÄ,ńs·õŖY›v:S™ˆnĢVOU=ŚęŠ"ķÅķāāӅb1‘ž_–Ēy’MV»‹_~“5Ģ’8qR“'Oµ›¤*o5¹æųŪ…8‘-9“MĮ0W$‡>¬mƒRČčÓAW¶{ʁŠž¦RDĶ”Znič»jjgAn½¬ži†§3µS9CĖ­W¼¤Ū2°“![ćLū8U°Ī¶LdVŪŚ~:˜!SŽ]EØ=Ne¦ĶP.ŲļÉv+Ų‹‚xeó€z}šś“™”q™etņU³ŪW¦3pyÅÓY -ō×°¬Ģ£­Żl½qʂņÉVw† ”x@q&xńp-άO1Ć\I=8½3„ 6É£M` įį¬[ž©ékj0ˆY9ļ©Ö3ŗ$̓cąm·4Ż ->²¹»;ŽwgPéO“Žį‚F¤ Š£m»ĖĆ>ü(8}o/7šžŠIYrŅj-'­²7Dö!°ī}yܧ)lĄ°¹$’Ą»n‡žzöń‚ýYY ~_ŃOß®—źm«õ¶y@C"Ē»»{BÄį燿 dĪ“¹ ŗ^’…Zįķ=i`ƒn«ƒĪ ŃkŃæ‰Č| - @’ƲČI€$V±„ĖZ@øuŻéĪRˆ(ĄŹ{øˆ @6oCD‰čŽžao2|ÜĄ*““¤=ą2OÄ<śįvv¼æ`ü(ńKIŽ}łŚE0˜@°`§mķh¤DZŠźÆßÓx;¼#æ7Ģ”Æ`n y –Z&֕濚šwہUņ><²T‚“ŠoŒƒ}H`żĘ/¢‚ƒ­ĒߦńŠšrr7^¾?“ūʅ-ÜaÅĮ¼ć jõśęĻģ!vc»°“Õ LŹó£!Ŗ¬»e -ųŚėšdn)ꖉŒ…,Ā“ś§(cQŹ@š÷i\=Į[pȤŒ~žĪŠčś=zgŻĀ=•G÷#¼3ēYæ{o×IĶa‚#MŃŁśųĆĮߍˆ3ĖE,ą¹8OÓ’ŚĮŠį¹@«I–žór'€˜Ł&Éb*<˜ų·9(|³UrLō$–PŸššļ^ņTq>Ļ>K5¢ `ŸĒj®ˆ³v®Ł šćĆvĮ];sź…Ūk¹w!|LXŪßæĒģ4ęČįĪD'%–—GVIĻĖäŪ¹ņ >Æ¢»é īŌẎA7Rä_ĢõqB×)Ą›Fų%q’ż›nł’+„Č{¶Ÿ‰•• Āā[‡Ī’ŗ"‹S=&™<‹ģBŒ¶ˆÓT}q`Å1BÉW…ń05$łhn(b™}9ÓŃ̐HHZłü43ō’ćõؗMø;ÓyŒÕ„j(`ĪڞSėAŒ^{_ž}¼.8ż\U&G?lXˆ‹ó«T•yœ_°’·ņŒGXYÄešżĒć«ų?‹ÆD‰oqs~ū“i1æ8E\*ł5į!‹ ¶ś×ććŲ|rܼĄ»óÕĆńɏ-ŸĶ”õœ­C;äåe “Cb9/ŗ'eōņ‰Ió\•WĻĆ& -Ē,Œ×–:Іk~læ@52؊PxTA<öz_L ß-UŖˆ ®^* -}Źg˜ēņ -e@Xpæ×PĪŽ½&ņ\Gȃcr)TJHØW:(ŠiŚēųņć Š¾vį­ø„€YK{HŖä¦ -ZfPœ$}“l䄬ף»7Ænß½9Ļ+ģ¶Ū×H 1ģ{ˆ(“œūHŹĻ:ēŠį½=lģQŠåą¼/@ĖXĮ#‹ Š$”ŸĆVübZŖØiŖĻ•—y\&óa“ʁ+ĮĄōÜ`ąū}ÓśW Œ?Żū꞊>0$£÷ø«;S;źõ¦”[„ĄŖćžö(“Rß~r¼}ēÅõąŚģMM½665m×ICgE³›Ł˜żj_Į„ó AVχG˰.ę0ƒŹ6¢B×ƾy$|ƒ’o6@5¼ī{E…-ø ˆŲ»Ž°ŽC`ģ»!8ŃøäZŸ:`Ś·šN6gī½:²£:°‡]Sóg~Žķęė ģ€Ż"²»}Ū SS*ńĒ’ĢĖāŲ‹Ē•Īq»“ŒV¦ÅNĶņٶ9ćSPŽ®£ļNō]ŽĻ0žæēę'Ā^n/ʈł zÅP ±eDߎtgżÄą.€NVĘ9zŸū„x2mųÓېż–^8ŠśKBBz¢é?ѐž:ƒŻŲ½Š+ų/Š–šO -RŹ0ŅĒj(‘$2?Õø];É’ ໦. @śŠ5ŲpāΦ'ņ’µ*d~txTvŁź6ü,ʤ V˜w°Ž’ܲĢ_²ėĮó”*Bj£ļū·ßĻTčõ!tšWWŪ¦q”a×’‚Į"ƒ«{Č5i§>ŻApĶŻ]÷7?#Ą}z˜8÷ÕõÕšš@xŌ'RŸšk3’퐖4[a“æ>Ęō,Ķ ”b~%ņ ŠĄ€ī›a§ŻhƹŖŲ××Wgåæ^£ŸØ<Üņ”#ż#įōų»7üÆ=’ķ[Ą-%Ōמõż'Œ€¾_ -endstream -endobj -703 0 obj << -/Type /Page -/Contents 704 0 R -/Resources 702 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 700 0 R ->> endobj -705 0 obj << -/D [703 0 R /XYZ 89 770.89 null] ->> endobj -706 0 obj << -/D [703 0 R /XYZ 270.681 581.458 null] +672 0 obj << +/D [668 0 R /XYZ 90 553.953 null] >> endobj 106 0 obj << -/D [703 0 R /XYZ 90 564.73 null] +/D [668 0 R /XYZ 90 553.953 null] >> endobj -667 0 obj << -/D [703 0 R /XYZ 389.265 262.19 null] +674 0 obj << +/D [668 0 R /XYZ 326.66 222.876 null] >> endobj 110 0 obj << -/D [703 0 R /XYZ 90 244.342 null] +/D [668 0 R /XYZ 90 205.505 null] >> endobj -702 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F11 698 0 R /F8 707 0 R >> +667 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R /F11 673 0 R >> /ProcSet [ /PDF /Text ] >> endobj -714 0 obj << -/Length 1378 +679 0 obj << +/Length 2621 /Filter /FlateDecode >> stream -xŚ„VKsŪ6¾ūWšŅ9S1$DRdzR;qlj3ŽŚœŒ‡¢@ E°$˜Tķōæ‹]PŹM§=ŲŲĒ·ūķB³vēÕE@ß‹‹g׌9,š“„ÅĪ¢t²ĄI¢ĢÓ©³X9īå&oo½ ‹7ņ>-~BČŸ„³4gĒ~”2RŪm^Æ&•Ø9jżÜåkNšS'ó³„%VqęG³ojø£c œŠi!@XÜæŗp&q”ŗŪ\Ō~Ń4t Š™ŚšV{ƒenź«®ÄŲ6ßņZåŹ ]!ėå²ü¶ÓAčæšœc ­xĆ땨×d·öl`öüc°švóūĖ׏¼īüq†!ačgq‚Łx{włęåķĶŪ+o2 "— €ˆk V̢įŚČŽD¢Ćo^(į±Ųż’rÅW¤A&¾ˆN,+ŅQҚ1‚Ų-ä¶•u×ņ®įƒ¹0vyµó’Ųõ½I4cīKfĆuķŲā=„e®ų‡ŗĆłSuŸjj5­„ˆ¾ˆļŠZެ}ū9oe%Ō‘b0å4ĀҤD›²Im±Jcī[kö+ –Ä5ŠtZĖsx‹ćNȘN;Ē’ˆ*×€Ncw^uo…ßc` 1Õ1G²ÓÅ•P;:1ŗ”Ūö5 -4Ž”Vm^”pM‘WĻ{%·¹ ŚĆ²Üa/D¹3Õf&k|‹+Qć7§īWøŠZkyę',BĖļ%é—ųŻÉūށŻQĒ0ˆ‚؇.t§·r#EMaČņäšNóŗĶ Į’ėńīłŃģ÷ŁõtęĢülŲ”§G`šć! ‚ćya$Šz¢ź»“ĢŹhĖ5½j¼ssóžń]+ Žu—ŪUu+:FššÅ|””_ßÜ^ż€‚ļ¼śXź&G?“Ö_ē§.›łS[Ų'\cü&EyŪBVóbƒ«żt/±Į)0¤ĖŽėŻ ĆŠµxˆ0V}_ʒó¹T:%‡ŠģhچźSłÓ(a„tšł,iäkDa 8oa:¬{xŗ'S”Mi/ ­”Īį)!A]ȕyõ걉0žA–oT‡e픲Ŗ$“čWģ£ ;ķNPÕA¦6HŚt¦{eK§†É‡6e£Ģ«v¦w+]Só0ęŅģbSw+Ö…ĀZ*”-9 -Fs -Ž8ø į;dīTbŁęŠzpRČź“ī[“"f©{ i4cW_ŁŹ–œŠZĻā-%LÉśš fī˜{G|4l‰`zqžō[c¦Ģ܋÷ņźķåć;OĻÅłżüĶɻ朒a>|×aė>P™>įvC»€,”$”ģ•‘Ō6YØ­ł%µræŃ4Ź•“ÓoÄõoENS„…~§h~óćüdźf~ČŅ£™67t®Įm,'¤Üß\_?ū0’åŹĒ½é-XŌżv e2ĄÉ]±ÉėšW¤ję,“:.–BiJŖ ītyĻƒq8pĮ—Ė3¢1ŠŻi\÷+!m„šž0u0 †;eĖėµĮm¼-ėś¦‘-¤å ¤ƒwī(ė™b|Ž»?Ÿ_’A³_s `ńHŹF’äT˜ŒYt*™š§02SōX%E™ŒĢ¦©?Š1ŪĒųoŲ°OćiMžŒó[äōÄ®DYZ‹“N)s\ -żŌĄļÆÕQaĪ’Ē<æ¶ĀŌĻXFcƒ f·%ö®W±4Æ;Õrų]b˜õʰŌO2F£ ŽF£ąĪ óš’N‹''8ó}öļ–æźŸŹTĄ]ƒG¶ÆĪĢÉ +xŚŻ]ć¶ń}…±@]ėH}+@vļö’ ī’kÖoIPŠ6m³'K>QŽĶę×g†3”e[\ŚköE’Ćįp>É”˜l&bņķÕŻüźÕŪ(š”a™EŁd¾ž”b’g2L#9™Æ&?2™ž:’~'"LaŠė»Æ—ĶJ·ÓY”ŠąNoÕ4Jƒ'ÓZĽŗŸ_}ŗ’€,&ŅŃKó0ÓÉrwõóÆb²‚žļ'"ŒĖbņģ°v“$Šį_MÆž~%Nx‹Ļx‹ ™GÄ.,‚§©L ĢDE č·2kdi­[]wŌUézÓmĪSSßā„ӖA¤t`Ü)Ł–z:³ć ć<›Ŗ"j­VĖ-£m«SķTĮF3öĀt­źt8Å"~¬5M]6‡jŜW¶!h§>N„čwļ¾’p’­Ó„˜Ģ¤ Ė4%,›Ż¾2 +· : +no§š}M ķõ„ē­A6T.šŒõb©oß6«ĆRskŁŌ¶ė‰zŁ9<µüØ6oŻ0u’ĮėVķō ĄY|1 ¤Fv£+ƒbHešé *Ó½`#"^YX0¶ŠōG6 ģP-Ŗź!ÄéL €ĄjšnM½ä)¤"¤į4 ƒ­¶ŗ}BęÓ2’^nkó頇DyõčÜģæņė=›n ėo‘ ĻlČ,Ovž ōØ; ÉŅ %ü[˜VęĮÖl¶Ī˂نN“'‚†ģĘ{€ąŲùÜ>X½:!CŎ-ćXå,ƼN óØh(Kć°×-÷Ōō×5(DƎ hśTź)nŁcåa%„5Gvā<§ųĶģ;jM,OÉÄØŸģĢ-č–(Ķ4 T»Ŗ“µ„*p’Ž(Ć(I ō¢L…|Óø“3§ŒĀŗLß0Į•žEˆØĘķbSY"›É$é)1ź^·£.¼Uu­«SšŲ[Ü:Y””Įn#€‹:H[ŠĮ¾Œ¦ss2TzE&Žt ėÜāalhń€įd÷›±erĒų˜ø0×zDŠ}C궃ˆø£NVvo½$£”݇˜‰ōGĘbd‚ó°½1.Ū8ó®i„tcäŲõ‹H…ŁŌMkź ‘ĀahÆV«¾SąJpøTˆą):Ió¬–ē9…C—¢¦mfčāŖr–Ž=× ˆ„³oLŻéöš(ōŽģܽ²gqi„ɕƒ6Ē+ė£LÕ ’ĆČÓO_ZNzŠ ƒIEÆč›ŃOÕK]2„’F×H+jŲ†ŠŁ’瑿œ3s ō2¶ŁVÕvgŗĪE†¼¤•įÆųÆU[·óÜŪ:ŽuLœXī”5Kų u[Ō B•V+Drļyļ]“ę޾Ńń6<¶ŠŻ32>²ø½MU–Dņä=lŻ•H 'Óvę?fYlõ'Æ/;ęnÓqYrŠj ­²w7ģ]`ÕŃšõ ­C7¹ č6ׄāi× ”%€œæ`sƗFŻWŌĘŻćæė¹zŪŖC½mÖīÜiĄ hD–ž āŅøĢ™4·^Ö Ņ@+mĮ½% tŠm•—ł1 :)ŗS.-įQˆć0Mł”‡Q(!Y ˆ÷N{Ŗ3äbĄ +r§œVmŲ/ŽzĮ£łĪC“Čšø +kDI'%­q‹‡æ,ųī~vĢ_Š~’ų§ ļŚż9ķ"čÕ + h°S¦¶ŌŠDRŠģÆßSX;œ#x|ƙ(§j`lōq ¦F¦(BMĶ«ķ@+9ќ,#ARčĘĘŽ°~į Æ`ēEķń橽c¬žNęĘÓ÷‡vßXæ„=,ŁY¼u¼A©ŽŽż•-ÄlLē§¶ +„Iq~Ō„X“õa·šœćA’C}]“Ō-å@Ż2–”…æ$ż0be(Jéž1B# Ė¢Gx —ĮOÓYܾGė,ƒ{ČSyš8B;ažö«÷ +°NjvļI‚ĘŽŠĒļ~÷:ųf„Y.B7·Y”…‘(’k+†ū©Ę‰Ÿś7ŒĖģ|rd™8 é*ÉČŌNų ÷AzL6’c¬Ē”„'Ļłę’fęYīĒÓ8ŽFäó0Ź"DsH`…(öÓysķō©¬ÆÅŽz÷Ń~nŸŃi̐}Īx'–Ė-GqfeüõLłWĮĆt9uNڳį(„Čæ˜ź¢„¦S€5Š‹Ć8ż7Ķņ’*øČ{²Ÿńœ(-A„Å×v’uA§rŒSyꣅwl&IōŎ=ęĒÅŹ‡”!ĪGcCŹōˉŽF†XBŠŹ³ÓČŠüéQ-Ÿ;“,ÄŪ„ój®a ݚŽS«^®æ<ś8Ypų¹9»™üt0~"V,ĪS9Ø*=r*8O°O’—šüŒ{XY„eĀ©IžĒÜ«ų?sÆ8_#q~}’’I‘ēM– `ņŽčK¼C),õÆ»ĒńTh¹v©óÕśxāNJĻęŠ:Ź0¬|5ä2CēŁ9ĪEń¤ .O˜ŌĻ—ņźeXCa—…öy«/p\АyA8vxŸO W,Åś2\«—‡Š‡o+óiMS}īv™‡eœ ļ0‰˜4ślŲĆ~ß“ī­ł®¶’Į{<Ō®-•z_,B`Łqł KäZ‰«>Y^¾sģ:p„÷ŗ¦R6›š–ė<§¾°Œ¬™ĶlLµ»Ą%™ē õ³³įÖR¼³›Įŝ¢{® éŃ„‚””†ēŻbÉįG؜«€8śŠŃسh»bv“r\ėBt»JÓÉāL½Gz–°kŖżdŸ)vƒ°ųQf·ooP®īX҆¹pYKńŲ ›3B\--ƒ„n±P@½¼w‹UN 8Ē˜š—ėčļžx= ĄøSüŸ«Ÿ{¾#Zä3@Ō †*ˆ- ōÕH{VNōęČd©­5¾ō¹o‹gŻśgœ^70Ų/é˜C­”OĀu’…štҬĘę…VĮ@[Ŗ=E␇‘7œ†I,óS‰ _““ül’YR‡®Įz6’{ÖBŲ?TČ|ššŹ,ZÕś·¢TJÆ…ģø‚±ü sJ2æ$9V‚ē(T®}h£?>FĪ"_ė]č4®.·Mc}½®^#ƒŌ=¤šŒTS×Zuą\£Nó°¦$šx÷\¦‡Žs[]Ż 7ˆGy"ö™`|„G¢ā’¤q)¬ń×GŸž%¹`†ŒÆ„īč†Æ”'ķh©¹ŖŲÖW7g·=L£ŸˆÜgyŠ‘īpŗ|æ÷šēļųd)żŁgü?ÉŌ: endstream endobj -713 0 obj << +678 0 obj << /Type /Page -/Contents 714 0 R -/Resources 712 0 R +/Contents 679 0 R +/Resources 677 0 R /MediaBox [0 0 595.276 841.89] -/Parent 700 0 R -/Annots [ 708 0 R 709 0 R 710 0 R 711 0 R ] +/Parent 675 0 R >> endobj -708 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) >> +680 0 obj << +/D [678 0 R /XYZ 89 770.89 null] >> endobj -709 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_adacbe0175a79dff748855d8c9839f82b) >> ->> endobj -710 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 -711 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [222.662 305.783 304.703 316.687] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> ->> endobj -715 0 obj << -/D [713 0 R /XYZ 89 770.89 null] +681 0 obj << +/D [678 0 R /XYZ 270.681 557.547 null] >> endobj 114 0 obj << -/D [713 0 R /XYZ 90 739.935 null] +/D [678 0 R /XYZ 90 541.456 null] >> endobj -701 0 obj << -/D [713 0 R /XYZ 90 549.218 null] ->> endobj -716 0 obj << -/D [713 0 R /XYZ 511.624 400.033 null] +638 0 obj << +/D [678 0 R /XYZ 389.265 260.122 null] >> endobj 118 0 obj << -/D [713 0 R /XYZ 90 382.227 null] +/D [678 0 R /XYZ 90 242.91 null] >> endobj -717 0 obj << -/D [713 0 R /XYZ 90 273.114 null] ->> endobj -122 0 obj << -/D [713 0 R /XYZ 90 268.316 null] ->> endobj -718 0 obj << -/D [713 0 R /XYZ 90 141.394 null] ->> endobj -126 0 obj << -/D [713 0 R /XYZ 90 136.596 null] ->> endobj -712 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +677 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F11 673 0 R /F8 682 0 R >> /ProcSet [ /PDF /Text ] >> endobj -722 0 obj << -/Length 1234 +695 0 obj << +/Length 382 /Filter /FlateDecode >> stream -xŚ„W[sŚ8~ēWų1™ÖŽlƒĮŁŁsI“.YX ķ̦™aĖ ­±‰,—¦æ~eKņdHg_‚äĖw¾st““įŖssgYškøŽåh«PsÖwL£g™Ś*Šž®LēZ·-Ėé]’Żʁį]ėV\}Jį]?Æ>v&«ĪKĒd*f*z}£o÷4×yzZĄ¾Ō€a»ķPHķ“®e³ßH[vžź€ŗ;v_ėn˜¹;¦90×Ņśs±oqŸ¬ŪkŻąźq>ł włŚóF|1M|ĮüŻG覯|’ō“ҧ#¶2s·™MŻ5ŗN«ķS{7[¾š„!ö1Šż×#‘ÜĄżDgūĀ@ń-Kq¼įĖåł”Ąˆļ† J¾Z }„}HqWz–ĆE鄎5ś‹»Śø’Ó×ψ¤„AėŲ¾’n©ć.ų¢Œ` Ü!J°_ųkŗ†i¹ h—”TfęĖ*:)Ī2ķ²ßBž.!§ńMĒ7“é˜Æ×˜¦” øK„ˆ/Ā$Š’Cé¬7[„F=×@ū‡ō1Šą«” ‰}ūI¼…±‚6EķQŠ,¬”’ķIź>#0£Å:BbžŽ Ķ$±ņˆ›MŹXĒ‘š¶uī̻Р-{=ēgėūłRp¢kŲ]§‰–¾ę2O )zęd’5·'±Ÿ%„4ßąø‚’ÆöHä E~߬¶ā@€B˜ETą £¬ü¾Gq tČ:¢ņ”—X°}¶ž—•½ ÕėUaZ€¤0)ŃbŻź=ßōœSzµ–ÕxZĀĘPwMPłn—ķš‚[Ł_ć”Ā˜*`Ī# ļęžüĘædeä'QŠČ÷‹° =-x–œo2Āūä)œƒ[å™6˜ŠfQ¤p¤±æb¬Ķyi—L¾ˆX,8ĮŌ[Ŗę¶)QlP YĪøD«$ņQņdésՔĶņƼńƝŖE–’^-ĶA–÷Ō[=ŠBĶ7ŠśJI Š9hŃY¦LÖļĀū"†7ścŅōOXu[¬¾MWżĪ•pÉ4NgŽņ¦R›“½ŚÕ5炵{N•¹ƒĢ+ßčö”DŻ&‰ĘˆŻ„»b+H‹RÉļB…¤5Ž™X £Ø6żŌ -QÕķE$ Óɀ;‚^²jˆ(}möŌ{DčĻćQK6ČčõŲŖk‰D žī©lĘ_M»KP(F„ɽ÷łaöińĻŠūsüåa¼ŗ?źƒ¢Gé¹>÷"€†!3²ĪHŒČÅz…įEšŽ -wŸńAh{ -óq)BńF•īś%&įš"Ē›ü(_rŖįĘV·dKķžjōPÕhć:ečū\FĪܔhēČŲå490ö†ā&—©/mpĆž¾SyŚ3­3›ŗ[oU$ŻP!pA‡:m?%ubG$¢ H”zĮ qņh÷Ą­˜_¾‹‘,ä{“’Ņba»¼ŽR¼aybóÕÅVõ°Ė_6˜6[‰~sø-µoīWņ®üQ·rś:Į /ęĖ{ķW_Sõ#‰æeµH©D ąv/Ü"XV4K>N‚Ö«y$ø)Ą©Ÿ¬u®ÄØ=£G¶éžŅl]œK ‹å{ūųŁ>° Xæśj’Ķæ$ +xŚķ”]Oƒ0†ļ÷+z ‰Ō~C½Ū—sʏD¹[ŒA(‰a ”čĻl·¹‘Å%Óx!W}ō=ķ9ęIŁuöĪ/ A!a +$‚IČ +Ā̜į"ZiUøįČaīSxm śēÄ^£²4Ū§y¢Ž7Ģ e‚X‹ q{ƒŲõ0B諳&+µõR ”DX+ń”¤ĀXÆT”Ģžh-ōŠøI¦Ź3•ŗØb½ŽŖ<[ęö¤(OŒČņŗŅŌÅõ£XŁ—o™^õRd*52Qe\d+Żäøh.¹éčvEƒ¢ ń0é5õcŸūPf®ßﻬ®z|7|TéØN»“ Ģ<Œä@×ćčß/LŹm“ŪōV³ėʑĄw°<@ē[Zõw†1”œ·@Mó~įāĄ™—mV~ĒźTdż²tłų9’ūČźIģPż*ŃBu«t4Št“ʧ¢Õęu$(ņó3u_éC’AŽhéŌŁ¢G!‡½°ö endstream endobj -721 0 obj << +694 0 obj << /Type /Page -/Contents 722 0 R -/Resources 720 0 R +/Contents 695 0 R +/Resources 693 0 R /MediaBox [0 0 595.276 841.89] -/Parent 700 0 R +/Parent 675 0 R +/Annots [ 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R ] >> endobj -723 0 obj << -/D [721 0 R /XYZ 89 770.89 null] ->> endobj -720 0 obj << -/Font << /F22 424 0 R /F37 577 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -726 0 obj << -/Length 929 -/Filter /FlateDecode ->> -stream -xڵWkoŪ6żī_Į66±|čaŲ·N‚q×ÕF±! Z¢“äé‘t’~”xéJ‰# ©÷é’ŌŃѹä¹$EŠt5y·™¼¹d Å8Yˆ6Š ŠBŠFŃ&E7SәĒ2]”3J¦»f/óŗšŻn>"ŸrLxdˆ:$ŚŃÉÅfņĻ„šA‚hĒD8āJö“›[‚R3žĢć9zčP{ä3n¢FėÉļŅWfČ#G„¶ŹØł\LQČ؈Ło~jö[Y쐐i‘ŁX5[ŪČJ±—•m«ÜFaC]м:eŻCŚę_$ ©ĢD£įŁ/6Pó€ā.o‚¼ūai{ģ­…\’¶Xæ¹^lV}”ļP> ĖĶŗxŌĒÜMœć˜ÅēUÅMOSŽeyŪ½EcLŁ| `] —H*“"Uł’…Ńź •©äI²–ƒ`ČŃ/ć;9ÅįRs’Ü|•å¶Ø€§hźCSŠˆ>~cZJkQžūw¦“Ģ›ė¬ÖĻjᐐšØĮJīÅN·)&Ž+&sģG>2„IY¦Ė ¦…ÖŌӇnzŚś*µ*r”mļ Ź½¬eYŁ®(%4fŒLļŪ7…Ņb«aXe6®d-¬“¶W5ėńTF¬y-µUßµ„Ѷė;éfŁŚŖj;ZmĖ6ė0˜v ŌÅGUć lę˜ó½‚Łž®nPƒ0åsĘl°ŖJęĀų"6©zEŪ–©]zPŅ[ĆĻźóŕ·üņ¾ƒö®ØįĖW2—„ØĮX-¾k4ÕŃ՟ˢuą?¹'6|%éś er÷Ä&Įó6éz?7ė°—ēɲ5į#ŗł™L²ās™Čóq4gĆ扜ÓJ®ˆč¹½äŌ²³šÉÉågpƒćf ŪßR ]ƒ–÷RĆ -׀^‚OĆKLśīū¶ēqŠ1öØ{rÜ’†É}Z§“"ĻŌ®1šóR ?ŪČ Jhq:rYł2{oī„ī–ł^}¤yTŪ–N§ŠŽąrVۃ̦˜ŹoųɼōŹ Œ`rœŠž€¬čE£lng3ccl‘ƒ}ȳģōzż ėµnʲhņō+ężjLj±FŽØ$¬Z2ŗžĆ{Ć撃9ǜ°—žüŹ™Ax -endstream -endobj -725 0 obj << -/Type /Page -/Contents 726 0 R -/Resources 724 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 700 0 R ->> endobj -727 0 obj << -/D [725 0 R /XYZ 89 770.89 null] ->> endobj -724 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -730 0 obj << -/Length 149 -/Filter /FlateDecode ->> -stream -xŚ•Ī1 Ā0ążżŠŪ”ńåÅ¤ÉŖØŠMŒSéPl-BS’¾„čąčtpĒĄ8Š&Ņj/‚ ‚‡xE`”N++±CiŸFÄŁl{O©ŗb¼M}^ˆåģül‡>obE»HŅ3ÉŠ aKU‹K¢ŗats_• Æe•°3ēˆ‰?w¾łcy£ ĖæŌB-0‚ -endstream -endobj -729 0 obj << -/Type /Page -/Contents 730 0 R -/Resources 728 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 700 0 R ->> endobj -731 0 obj << -/D [729 0 R /XYZ 89 770.89 null] ->> endobj -728 0 obj << -/Font << /F22 424 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -744 0 obj << -/Length 384 -/Filter /FlateDecode ->> -stream -xŚķ”]Oƒ0†ļ÷+z ‰Ō~C½Ū—sʏD¹[ŒA(‰a ”čĻl·¹‘ÅÅé•\õ=Š÷“ē<˜&=d×AŲ;æ$… „)&!(0s†‹h„Uįz„#‡»Oįµq0č>nxœCkxŹŅlŸę‰zßX0ƒ” b-‚BĘķb×Ć”Æę›¬ŌÖK„Ra­Ä‡’ -c½R…2ū£µŠ +ā&™*ĻLTꢊõ:Ŗņl™Ū“¢<1"ĖėJS׏be_¾ezaŌK‘©ŌČD•q‘­t“㢹䦣Ū Š&hÄƤ×Ō} -<ģCA˜¹~æļ²ŗźńŻšyP„£:ķN60ó0]£æ0)·ŃnÓ[Ķ®Gß!ōoiÕßĘPrŽ5Ķū…‹g^¶Ył«“‘±æ@–.?ēY=‰Ŗ£ā§¢-T·JG£HGū |*:Pm^G‚æ?S÷•>ōäˆvN­ą(dć°÷Ļö -endstream -endobj -743 0 obj << -/Type /Page -/Contents 744 0 R -/Resources 742 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 746 0 R -/Annots [ 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R ] ->> endobj -732 0 obj << +683 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 482.911 185.567 492.839] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -733 0 obj << +684 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 483.992 513.996 492.839] -/A << /S /GoTo /D (section.7.1) >> +/Rect [502.041 483.873 513.996 492.839] +/A << /S /GoTo /D (section.6.1) >> >> endobj -734 0 obj << +685 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 469.98 178.195 480.884] /A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj -735 0 obj << +686 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 472.137 513.996 480.884] -/A << /S /GoTo /D (section.7.2) >> +/Rect [502.041 472.037 513.996 480.884] +/A << /S /GoTo /D (section.6.2) >> >> endobj -736 0 obj << +687 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 459.001 191.107 468.929] /A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj -737 0 obj << +688 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.7.3) >> +/A << /S /GoTo /D (section.6.3) >> >> endobj -738 0 obj << +689 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 447.046 189.991 456.973] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -739 0 obj << +690 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 448.127 513.996 456.973] -/A << /S /GoTo /D (section.7.4) >> +/Rect [502.041 448.226 513.996 456.973] +/A << /S /GoTo /D (section.6.4) >> >> endobj -740 0 obj << +691 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 434.114 184.84 445.018] /A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj -741 0 obj << +692 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 436.172 513.996 445.018] -/A << /S /GoTo /D (section.7.5) >> +/A << /S /GoTo /D (section.6.5) >> >> endobj -745 0 obj << -/D [743 0 R /XYZ 89 770.89 null] +696 0 obj << +/D [694 0 R /XYZ 89 770.89 null] >> endobj -130 0 obj << -/D [743 0 R /XYZ 90 739.935 null] +122 0 obj << +/D [694 0 R /XYZ 90 739.935 null] >> endobj -134 0 obj << -/D [743 0 R /XYZ 90 553.953 null] +126 0 obj << +/D [694 0 R /XYZ 90 553.953 null] >> endobj -742 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +693 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -752 0 obj << +702 0 obj << /Length 147 /Filter /FlateDecode >> stream xڕޱĀ0C÷ū ķ@øÜ‘¤YA€č†ČVu@XZ$Ō>ŸPĮĄČdÉz~2ć -ʖ–‰ęD½x¤ "#xkœX¤M!\¶©†5 ēóhjWżqĖ™8.v·īü|3“Nt'›†<.˜ §š–Ń徍5`!š³ĒöğOßüqUj”å_Õ ŗÓ0Ł +ʖ–‰ęD½x¤ "#xkœX¤Ma}٦Ō,œĻ£©]õĒq,gāøŲŻŗóóĶŠ:ѝlFvņø`‚:œjZF—ūl4VxLŌ€…hĪŚ>}óĒU©Q–U/¾~0Ž endstream endobj -751 0 obj << +701 0 obj << /Type /Page -/Contents 752 0 R -/Resources 750 0 R +/Contents 702 0 R +/Resources 700 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R +/Parent 675 0 R >> endobj -753 0 obj << -/D [751 0 R /XYZ 89 770.89 null] +703 0 obj << +/D [701 0 R /XYZ 89 770.89 null] >> endobj -750 0 obj << -/Font << /F22 424 0 R >> +700 0 obj << +/Font << /F22 400 0 R >> /ProcSet [ /PDF /Text ] >> endobj -760 0 obj << -/Length 354 +708 0 obj << +/Length 314 /Filter /FlateDecode >> stream -xŚÕ’OO„0Åļ|Š9:-m”ŽÖuwżw2ÜVcXčJd Øß^°Ż]Wc44žŽ4¼×Īü„{@Xxčō$õŽęŒC"%®A!H®ˆH"H XśÓ2kzŻ!čĖą6½° Nā$¦c!‚š„ŁĄÜTŚŗĻėB?픓ˆKę2"\ø'$”AHńMöŹt½‹F ˆ’Lŗ$‹‰Š¤MžéÖłMg5³Rń×j³vŖŹ7ˆ¬ŅĪžhśŅV«Öhg-t—·¦éͦīŽĒ&v¼öŠ@”cq½šĘńhAHc"·ķeY®ėü®2«€£Oʃ»`éŚ8?½“/O&£qj³:ß[ņĆmÖ>»aėa#ė€SånžRg;Ɲp[‹®P‰O’¾ünR–HŸ©OHI~ų'(%J ż!35ɛę=lŠBž„’&\©-2ö9~k‘³Ō{¢=÷% +xڽ‘ĶN„0…÷<Å]Ā‚z[ŚīĘqfü[vh Eš˜õķ„¶3:1n]Óp¾öŽĀ+ ģōzU[ʀ!‘’ (ZČ$ωČ((ĆuWfe¢˜ Eō\Ü9‚“4K©%b!Ϙ¶ŗW.};4źżDPN.™'dBøšOB£˜"āöAO³GČI.™ō$KIžHGŽ(ćózrZ9é-žåĘÖč{gžYÆ|üMĻs{£•6jŖ>Ģz¦K;Ä©ÆoE `ģĮšĒ]`×£i1M‰d܍WUµź—^ļ#Ž!éĪī‚Ņ#p{}ļ^^­lpķ›”›có˦2~Łał#mD—­jæ§ŖSÖmxōb)WäYHY*ž9/šWqeLY&C&žhś\7Eš ՚” endstream endobj -759 0 obj << +707 0 obj << /Type /Page -/Contents 760 0 R -/Resources 758 0 R +/Contents 708 0 R +/Resources 706 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R -/Annots [ 754 0 R 755 0 R 756 0 R 757 0 R ] +/Parent 675 0 R +/Annots [ 704 0 R 705 0 R ] >> endobj -754 0 obj << +704 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 481.935 154.843 492.839] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -755 0 obj << +705 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 483.873 513.996 492.839] -/A << /S /GoTo /D (section.8.1) >> +/Rect [502.041 483.992 513.996 492.839] +/A << /S /GoTo /D (section.7.1) >> >> endobj -756 0 obj << +709 0 obj << +/D [707 0 R /XYZ 89 770.89 null] +>> endobj +130 0 obj << +/D [707 0 R /XYZ 90 739.935 null] +>> endobj +134 0 obj << +/D [707 0 R /XYZ 90 553.953 null] +>> endobj +706 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +712 0 obj << +/Length 145 +/Filter /FlateDecode +>> +stream +xŚ•Ž1 Ā0„÷÷+nlćĖ‹I“U°b71[édŖ­ą¤?ß4čąčtp|÷qŒ+{ŚFZ·"*8qˆF㓲¢śJūzˆŒg„YēQiŪŪ4Ö+±\īi|-ķ"=h!ŗhl£cqž©)÷X™ąń,Ԍ˜œNt$ž\śęĖeXžU½[x0[ +endstream +endobj +711 0 obj << +/Type /Page +/Contents 712 0 R +/Resources 710 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 675 0 R +>> endobj +713 0 obj << +/D [711 0 R /XYZ 89 770.89 null] +>> endobj +710 0 obj << +/Font << /F22 400 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +723 0 obj << +/Length 723 +/Filter /FlateDecode +>> +stream +xŚÕV]kŪ0}ļÆģÅ~š>-«ŒAŪd£ƒ•Ņę­ű•FąŚÅ± ŪÆŸĖnģ8! 6ÄŲŲ÷ž{īŃÕQ0zF}=Ćī~¹8ūų…RD1„!h±B +£+C‹=xWėųµŅ„P½Š’±ųÖfp‘$MFĄ#ź²x³iĆgERæč¼Š+Sä}*įĄxH]jȀ W+ācģ]\ųBxW󛫧Ėz5ӛ¤E¼ÆŹ:©Śē;½²¼Häé<Ń-:“H +ičĄiŠE-ų“'YŗHBv"©"›° ü4%ArÕÄqbK>ef ė 4I@2Ņ~bŪw@*#0DÉ6ō¶^fĘ5zQU„Yś{u„7 FæhŒķ”#!pۣ͂H9!)ƒō+ėõͽƈ ²łÖ<Ümš²yżbõÖė1¬ D‘Ńń"o ė¤N¾ĆÕ®—¼“ęcÖ\(ū¤ŪAq¹­4‡˜ƒ¢ŅńU'‰2¦*A¹Kõ4šŅvHG,}*<;«×©Ż ĘBQ]"Ī`ŖNśļæ7æō’ĮtžķsŻŪu‚åpÓYĻé]g¦«Ųd:uīe]§4Æ;ŽÅFī"€ ŅĀ“ĮK휯ZėöĮ䯵ó«8wĄE]õ/‡ā²WEŁ„߮։ęyó+Rżˆ¶ėßÄ%q–Į”į}1Øć»~Yv¾?‹«ų˜„”e Ųė;=öšĄ’Ē`„;XóżÓįü|F „C~M°[”U{×q²žZ÷5ÓM÷ŻŚŗĄŸÖ¢aZ &b±+żwbLyĪ)Ŗģ&ż:ąŒŲ³ZėćÓk™sÜ3Ÿ0ÉŃ({'k̜Ęo>9tY”£SGŃØĄšÜ9¢ö“¼T4’÷¶0y’—Ŗ*Ś»„*<TŻÖO +»ÉLnņēĆzĒiZźĶĘ ßžGĻgæ×½c1 +endstream +endobj +722 0 obj << +/Type /Page +/Contents 723 0 R +/Resources 721 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 731 0 R +/Annots [ 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R ] +>> endobj +714 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) >> +/Rect [132.999 435.524 171.524 444.37] +/A << /S /GoTo /D (structAACENC__BufDesc_a324387bb8e5f44650c6e17c209bb05a9) >> >> endobj -757 0 obj << +715 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.8.2) >> +/Rect [146.369 420.346 165.317 429.192] +/A << /S /GoTo /D (structAACENC__BufDesc_ab13b6a5c10505c3defd8bb1c19eac81d) >> >> endobj -761 0 obj << -/D [759 0 R /XYZ 89 770.89 null] +716 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.471 405.168 206.751 414.014] +/A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> +>> endobj +717 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.471 389.99 176.575 398.836] +/A << /S /GoTo /D (structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) >> +>> endobj +718 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.471 374.811 185.432 383.658] +/A << /S /GoTo /D (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1) >> +>> endobj +719 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [269.505 308.206 336.772 319.11] +/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> +>> endobj +720 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [239.926 156.727 349.733 166.655] +/A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) >> +>> endobj +724 0 obj << +/D [722 0 R /XYZ 89 770.89 null] >> endobj 138 0 obj << -/D [759 0 R /XYZ 90 739.935 null] +/D [722 0 R /XYZ 90 739.935 null] +>> endobj +581 0 obj << +/D [722 0 R /XYZ 90 553.953 null] >> endobj 142 0 obj << -/D [759 0 R /XYZ 90 553.953 null] +/D [722 0 R /XYZ 90 553.953 null] >> endobj -758 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +725 0 obj << +/D [722 0 R /XYZ 90 454.643 null] +>> endobj +146 0 obj << +/D [722 0 R /XYZ 90 356.227 null] +>> endobj +150 0 obj << +/D [722 0 R /XYZ 90 289.622 null] +>> endobj +727 0 obj << +/D [722 0 R /XYZ 90 264.292 null] +>> endobj +154 0 obj << +/D [722 0 R /XYZ 90 264.292 null] +>> endobj +728 0 obj << +/D [722 0 R /XYZ 238.442 221.46 null] +>> endobj +158 0 obj << +/D [722 0 R /XYZ 90 199.722 null] +>> endobj +729 0 obj << +/D [722 0 R /XYZ 354.316 158.904 null] +>> endobj +162 0 obj << +/D [722 0 R /XYZ 90 138.143 null] +>> endobj +730 0 obj << +/D [722 0 R /XYZ 273.44 96.348 null] +>> endobj +721 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F11 673 0 R /F23 401 0 R /F14 726 0 R >> /ProcSet [ /PDF /Text ] >> endobj -764 0 obj << -/Length 144 +745 0 obj << +/Length 827 /Filter /FlateDecode >> stream -xڕ޻ -Ā@DūūS&…ėŻ»ī«Œ˜NÜ.¤r£‰`„Ÿļ&hai50œ9 ć -ʞ¶‰Ö¢ŠNŅ‘įVV4RFW‰Ō}ja+ĶŗŒ–¶¹C½ĖÕįž‡×ŒŠ.уf‚”õŹ‹óD]ĻČ„oĮŹÄ€ēBM؈)9āDGāĻ„ožø‚Q†å_ÕWŅ0V +xŚķV[OŪ0~ĻÆ°“—ä”ʗ8iŃ4 (L m“o€›ø­%Ēa¹ ±_?'vJRBŚÓ¤I­Ņŗēö}ē;ĒE`ųź.½£ BĄ Ī"åĢˆ# Į`™‚[Ÿ `B #’Lń² &„!ž'u&tÅ+™ėą~yå/½Ÿ61Ąm Ƙ2dŽķ=©9æŅŁ<µV 5Oެ‡˜Æ1±õDCĆ`‚Bžåõ²ItĆžcÅMšÖć!jcš˜Īęä$`Ģ?;æ>{8­×sQ&ĒĒ«€ æ^/äoQ:ŚóŸD²Cd‘ ÓŲZ†ņµ} +žlķ'. Ģ_‹ĀžImŸÓÉJVĪģ¹%© BĀ<°­ū]gęó4ØžŗĪV]e]żĆŖmaŽaD˜õ[nčt ‹öh»€ÕV:ń”UQ'ķS€‘ĻŻ”EĮ+‘:×"Ļ:_ŃES*ojy’zcLw‰Ē­;ĮN 8CŲŌ”»#„ ¬¬V‹ķń»0C&ē‰ŠÉƒ’« D>ܼڮąŅ0"­ ŗ\!ƒ”u½!®/½v\ź“¢A»qh=nD# <õM^aūDć½>Ķ c’“Ō‰ŖSg‰q_śĘfƜ¬?Ä2sĪ:ƒØę^“›!ʝń—*1†3Ę~J!‰$ahMæ×+%'ÉŖ*¤ÕQe'©Of_Ž»¶EF“Ó7Śęšä&¼‹MZ£śK½ąŁ£ŚKŗ ŌȘĮ(¤ŸéD'§Ļ#čöØź¤ŅcŹhb§–¹ØøTž›į-äc·bß]·¦ē¢-ʽ‰‘ś±v"ć­Ā6ķ„–{ÓÉõaˆF'ēŗyå©IĐyć}®»„+Ēd‚^£īfä›xY;s^ń7®˜×ė°·ŗŚx;ǶįĖųµ ±ß°ĆĢŽmE®©/žŻŽŪUŻnoׂܹNˆ–¼ōŠjĒ}0äż`:’šŠ’Õ,T®dśZ1u*ŠŅ%p;—”¬V•4GĆX=ēd˵Ŗl¤ņ’ŚxßµAĒ®öņĶū×Å?zuģČŲ’³8„"ņŃ’Š›“©’ endstream endobj -763 0 obj << +744 0 obj << /Type /Page -/Contents 764 0 R -/Resources 762 0 R +/Contents 745 0 R +/Resources 743 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R +/Parent 731 0 R +/Annots [ 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R ] >> endobj -765 0 obj << -/D [763 0 R /XYZ 89 770.89 null] ->> endobj -762 0 obj << -/Font << /F22 424 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -775 0 obj << -/Length 750 -/Filter /FlateDecode ->> -stream -xŚĶV]o›0}ﯰ“xĄó'†jšŌ6ŁŌI«Ŗ6oķTpK*b*mæ~6„DÕ¤}HA ø÷śųœėsƒĄ3@ąór÷ĖÕŁūO„‚`V#²ņˆ‚U¼«mņ¢eå„#OųßV_Ś E$°Ķ@ ą²ˆø„<ŁļŪšE™Ö;YčD«²čS1ƒ”…Ä„†2īÖūFy>ēŽÕņęźé²Ž,ä>m+ŽėŖNuū|'7Žq¹-5ǐ Į˜ˆ·įu¤L” -ȹB}LavH&(}Ā=ÓŖ×™9 -Ź”"²:Üō"ń’ü^żoBJž5Ņe~ˆõąŌq Y(ʇĪXNo: ©•ĖĢ™—1J½ ¬‹NĢ…ANsµĮkéŒOoeū Š—ŚŁURøĀe­ū—ćqŁ›²źRNWćDĖĀžŹL>"ŽĢ…§üŪø4És8gDč āČų*wėĪö‰NN9ś!-lP°ēw¾ Ģģ@‚NŪ`Rw¤łįp8??ģƒ‰`AH g|,› v¢lŚ»LŅķœ4īk.ķī;m]ąwcŃ ½E -ŲLR[¾™Pv:e]d{ß%Ŗčō‚ó,šq8d‘ü=ēĢź$NīaŅoŠ -ż€b3ć„<Żö9C=ņwœo,ūāP'Ī« ?£§dnųMOŗ2Ķė"`Mt¹-UŃ’‡Óe{7P¹'SŻ™MZšc­ -U<*ɲJī÷®Ż¦Āruöo€ė -endstream -endobj -774 0 obj << -/Type /Page -/Contents 775 0 R -/Resources 773 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 746 0 R -/Annots [ 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R ] ->> endobj -766 0 obj << +734 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 443.064 171.524 451.911] -/A << /S /GoTo /D (structAACENC__BufDesc_a324387bb8e5f44650c6e17c209bb05a9) >> +/Rect [113.91 592.512 165.576 602.44] +/A << /S /GoTo /D (aacenc__lib_8h) >> +>> endobj +735 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [132.999 450.227 194.766 461.131] +/A << /S /GoTo /D (structAACENC__InArgs_aefc45c133d4f9775d8d0aadf56302ae4) >> +>> endobj +736 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [132.999 434.584 191.997 445.488] +/A << /S /GoTo /D (structAACENC__InArgs_aa33d59e07bbd49bfe4dd6793763c6d48) >> +>> endobj +737 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [229.386 368.779 296.653 379.683] +/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> +>> endobj +738 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 168.668 165.576 178.596] +/A << /S /GoTo /D (aacenc__lib_8h) >> +>> endobj +746 0 obj << +/D [744 0 R /XYZ 89 770.89 null] +>> endobj +166 0 obj << +/D [744 0 R /XYZ 90 739.935 null] +>> endobj +732 0 obj << +/D [744 0 R /XYZ 225.72 704.412 null] +>> endobj +170 0 obj << +/D [744 0 R /XYZ 90 681.628 null] +>> endobj +697 0 obj << +/D [744 0 R /XYZ 90 582.846 null] +>> endobj +174 0 obj << +/D [744 0 R /XYZ 90 571.761 null] +>> endobj +747 0 obj << +/D [744 0 R /XYZ 90 471.869 null] +>> endobj +178 0 obj << +/D [744 0 R /XYZ 90 414.953 null] +>> endobj +182 0 obj << +/D [744 0 R /XYZ 90 349.148 null] +>> endobj +748 0 obj << +/D [744 0 R /XYZ 90 323.609 null] +>> endobj +186 0 obj << +/D [744 0 R /XYZ 90 323.609 null] +>> endobj +749 0 obj << +/D [744 0 R /XYZ 276.798 280.567 null] +>> endobj +190 0 obj << +/D [744 0 R /XYZ 90 257.784 null] +>> endobj +698 0 obj << +/D [744 0 R /XYZ 90 159.002 null] +>> endobj +194 0 obj << +/D [744 0 R /XYZ 90 147.916 null] +>> endobj +743 0 obj << +/Font << /F22 400 0 R /F14 726 0 R /F23 401 0 R /F37 546 0 R /F11 673 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +756 0 obj << +/Length 1110 +/Filter /FlateDecode +>> +stream +xڵWKsŪ6¾ėWšHĪT4’zä&KIėLd§¶z²=%tH€%AŪŹÆ/^”DEU¤I|"°v÷Ūowoåļ÷Žõ¢wõ !oŽhą-2o ¼į† ‚Ž"õżA}”2 ’ÄŸ~¼ž}ó%¾xUC¤]ŽßӌVł”ŖDQ4N|ƒēÅēŽĒEļßTʁ±d£Ä#Eļńx©’ö@GŽ«ŁUx1ŠŌ7÷zöĄć†ć$A­ēH"ėł×f™3āœ—²bĖæ‘“6Ž“š”šh?„q4ņś…%VÓBIēŒ÷ŲOš’ŗ¹]8¹FS­¬{³CŪ-šŪ]#ƛģzshw« x}ˆĀ¢_`lĀÉ–ąĻZb\AśÄņü ՉšĄÄ§ł;Ćc¼lät9§ł{Ģ*\Š/”ÆäśQ©)­f4Ē›Ÿ5żcrŚ> endobj +739 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.192 704.694 211.922 715.598] +/A << /S /GoTo /D (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c) >> +>> endobj +740 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.192 692.282 198.632 703.186] +/A << /S /GoTo /D (structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) >> +>> endobj +741 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.192 681.928 201.013 690.775] +/A << /S /GoTo /D (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047) >> +>> endobj +742 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.192 667.459 199.748 678.363] +/A << /S /GoTo /D (structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) >> +>> endobj +750 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.192 655.048 193.641 665.952] +/A << /S /GoTo /D (structAACENC__InfoStruct_a993149bc5985d79c40d6e96a2d90a228) >> +>> endobj +751 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.192 642.636 197.506 653.54] +/A << /S /GoTo /D (structAACENC__InfoStruct_ab5c902598267b09b625e440b53937c76) >> +>> endobj +752 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.27 630.782 185.91 641.128] +/A << /S /GoTo /D (structAACENC__InfoStruct_a5bb3228c5af5584f97c54bdf8ed946e3) >> +>> endobj +753 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.192 619.87 177.043 628.717] +/A << /S /GoTo /D (structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) >> +>> endobj +757 0 obj << +/D [755 0 R /XYZ 89 770.89 null] +>> endobj +758 0 obj << +/D [755 0 R /XYZ 90 723.104 null] +>> endobj +198 0 obj << +/D [755 0 R /XYZ 90 606.782 null] +>> endobj +202 0 obj << +/D [755 0 R /XYZ 90 546.674 null] +>> endobj +759 0 obj << +/D [755 0 R /XYZ 90 522.346 null] +>> endobj +206 0 obj << +/D [755 0 R /XYZ 90 522.346 null] +>> endobj +760 0 obj << +/D [755 0 R /XYZ 185.222 468.561 null] +>> endobj +210 0 obj << +/D [755 0 R /XYZ 90 452.32 null] +>> endobj +761 0 obj << +/D [755 0 R /XYZ 230.083 412.503 null] +>> endobj +214 0 obj << +/D [755 0 R /XYZ 90 396.262 null] +>> endobj +762 0 obj << +/D [755 0 R /XYZ 252.31 344.49 null] +>> endobj +218 0 obj << +/D [755 0 R /XYZ 90 328.249 null] +>> endobj +763 0 obj << +/D [755 0 R /XYZ 123.803 276.477 null] +>> endobj +222 0 obj << +/D [755 0 R /XYZ 90 262.293 null] +>> endobj +764 0 obj << +/D [755 0 R /XYZ 281.769 208.464 null] +>> endobj +226 0 obj << +/D [755 0 R /XYZ 90 192.223 null] +>> endobj +765 0 obj << +/D [755 0 R /XYZ 318.71 152.406 null] +>> endobj +230 0 obj << +/D [755 0 R /XYZ 90 136.165 null] +>> endobj +766 0 obj << +/D [755 0 R /XYZ 477.971 96.348 null] +>> endobj +754 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +784 0 obj << +/Length 1249 +/Filter /FlateDecode +>> +stream +xŚĶW[sŚF~ēWh¦/Ņ4lö¢L§36ąÖ;q<Ł)³H Ø£ ÕÅĘżõ=«]ɂBϤ/H¬vĻłĪw®‹µßz—óŽŪ+JøŌ5ę+c€ Ļ%ȔƇƽI©Õg”y®9ŠyQX}ź`sœU"Ņ’—Q–ZŸęļz“yļļ™Ų µ ĒCsŒ éŻĀFėļ ŒŲĄ7žź]‰aSĻؘõžčį“x(üõØĀć"†(ņ­>Į›ÆßϤ‹ ĖqĢŃäżhq®,ź˜Ł¬Ģ« ¾ūP•—Õźņ¹…„ :XG6śŌF¾ē*·|%Uv3f¦U²¹|§f¶Rk" ²°Y\FeQę‚ėżĖZGżå)*7QŖ–³TØÅU΁¬¾ćųę,śGØĻ”؊4Ōē2}&yĮA;8˜ÄFHŲ„ ć(ŲEµŻfy)B ÄvĶ`ĆÓTÄŅc¶gJrµ…®‹’§„ưo^YXÓß@šČ%Ų(]«£ŲĮ\‹« +a3TVź —v<ŁĘb_ėŲ²ĮC—?ƒņFĖÆm—o%Ō5ĖL=—ś?feRÅe¤€×ydyćgĖuLŌžšKmub¾Ń›Ć½Ø­—txOéŲ.źØQļOśĆZ¤"ēŠ_y4Ļ’ę¬h¤Åq&CļI‘KÓX ėi‚Ü .²™Aē"ĻÕv=PźģķR©”ÆuNMįÜ}߁˜ē</.āh)YE›½Suö1Ū„2“ū.8¤N“C¶ĪŸNÖ܊’yÉīY‡…©XAÄ_PéüƒōńQ­PJ’)Jƒø +õNB:;†<ØXmüåˆ,Øö Łšb©²ņ@šG ÄfóÆ:±Įü:\“ł Ź…ö3łd ¶ŽUĖ8 +tŻ(Ė˜¤Ų¬tqčrŁ­­×€]—|«×€iš–bz2·̼PYaBLµ°OG‹»©\žpu}3łŗä:¬ó`±Ķ3iGtĄÉŒ°”’#ŌA–lĻ…Mæ[ƒ”=@-Ÿ`hnł:uÆE !}#d¦>Ź’%ā’FŪ¹śk[$ąy½ČÅjwuż¢€zų#t—Ć?Ž~昞Öz7š,’hŖrœ.¢p÷*ęž”z2Ÿ]/ĘÉīęńuž}]%”ÉRä·Ńīõbź ­E•ēY•†ÆŖ÷ ‚Ć,^>ĻåY(ŽtĄn Šu[v€vˆ$ŗŽ”ļEqÓÕĒ¢ņhŪ̵_u•-Skg!ŹjŪ$Ŗ\ c­ ļ÷$ ‰jH·BĶzū’?ŗ&åƒ)¶ŲZ©Üy8)7=8ģF©=‰µ'OS0ŖĻ5ó•J6Č;µ°Ÿńz'#„¼7œ„2żäĖXČińø PÆk'=2ŠČ†…eĆb4¬cŖ’MæbMæ:ĮŠjR²fwÕéۃL%r#øœ+Ÿ­¶ @9(Śį³ķ~rž¾gBœüļīʝ`t/r˜fōŲ ė€!ŠLėֆ_ZŪYA¤^„U…6ć(‰ŚˆjĀAń(²H'j¦5@håqĘƆƀ·¹,ļ_źøź w5½o§ēI»ƒŠī½Ķ< ®aG Ūhą·3'ÕR˜įĀ ŠL»!—čłóˆł®¬æģ‚*µēŖĆ µĻĆō[ļÓ’ļŹćį +endstream +endobj +783 0 obj << +/Type /Page +/Contents 784 0 R +/Resources 782 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 731 0 R +/Annots [ 767 0 R 768 0 R 769 0 R 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 ] >> endobj 767 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [146.369 429.703 165.317 438.55] -/A << /S /GoTo /D (structAACENC__BufDesc_ab13b6a5c10505c3defd8bb1c19eac81d) >> +/Rect [113.91 634.621 165.576 644.548] +/A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj 768 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.471 416.342 206.751 425.188] -/A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> +/Rect [113.91 502.077 284.43 512.981] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj 769 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.471 402.981 176.575 411.827] -/A << /S /GoTo /D (structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) >> +/Rect [284.928 502.077 330.637 512.981] +/A << /S /GoTo /D (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) >> >> endobj 770 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.471 389.62 185.432 398.466] -/A << /S /GoTo /D (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1) >> +/Rect [113.91 487.956 284.43 498.859] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj 771 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [269.505 327.92 336.772 338.824] -/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> +/Rect [284.928 487.956 340.051 498.859] +/A << /S /GoTo /D (structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) >> >> endobj 772 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [239.926 169.446 349.733 179.373] -/A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) >> ->> endobj -776 0 obj << -/D [774 0 R /XYZ 89 770.89 null] ->> endobj -146 0 obj << -/D [774 0 R /XYZ 90 739.935 null] ->> endobj -613 0 obj << -/D [774 0 R /XYZ 90 553.953 null] ->> endobj -150 0 obj << -/D [774 0 R /XYZ 90 553.953 null] ->> endobj -777 0 obj << -/D [774 0 R /XYZ 90 460.366 null] ->> endobj -154 0 obj << -/D [774 0 R /XYZ 90 375.124 null] ->> endobj -158 0 obj << -/D [774 0 R /XYZ 90 313.424 null] ->> endobj -779 0 obj << -/D [774 0 R /XYZ 90 288.911 null] ->> endobj -162 0 obj << -/D [774 0 R /XYZ 90 288.911 null] ->> endobj -780 0 obj << -/D [774 0 R /XYZ 90 227.116 null] ->> endobj -166 0 obj << -/D [774 0 R /XYZ 90 211.623 null] ->> endobj -781 0 obj << -/D [774 0 R /XYZ 90 151.841 null] ->> endobj -170 0 obj << -/D [774 0 R /XYZ 90 136.349 null] +/Rect [132.999 473.834 214.393 484.738] +/A << /S /GoTo /D (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) >> >> endobj 773 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F11 698 0 R /F23 425 0 R /F14 778 0 R >> -/ProcSet [ /PDF /Text ] +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [132.999 459.713 223.807 470.617] +/A << /S /GoTo /D (structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) >> >> endobj -792 0 obj << -/Length 843 -/Filter /FlateDecode ->> -stream -xŚÕVßOŪ0~ļ_ai/ÉC=’ˆ“M“€² ¤”ö r·µä8,?†¶æ~Nģ”$-hŒń0 äbīĪ÷}÷Ż]Ų>ON–“÷Ÿ1ŒC‚åÄD!†Œ`°LĮµGJ BļTń²ō§„!ož'u&tÅ+™k’vy19[N¾O°‰‰nc°F”$›\ß"šū € gą”µŹ@@Ø9XL¾MŠ :ʇ˜?#bó¹kQˆŌ¦²śiόK}ƒ2æ6)p!0„œŃȆ‰ †l!ä_.­ z.ŒA59¶7Ńq#˜ŌœĶń±Ļ˜wzvyzwRÆē¢LŽŽV>A^½^Č_¢tž}|Ӑ@00%&»hfć4ĘV¾¶§ąÉÖ¶ń|Ā<Ƅ½“Śž³éJV/•(["č8‚! Ž€AÖc°rˆ]gęó!ōhˆū²ĪV¦łļ+!ķ™u\nĻé@ŃķÕ:w™T[ét_VE8‚|Œ<īž±Z¼źŽ_yÖłŠ.šRyāAź½2Š"JµżÓ5Ą! čĢŠĀ(t“ÜĀV¶ĶŠė·+ćw=e¦ œ'††;%W~€<øxµõĤAHZéuoĘ4ģŹJ\I{•<×ĒEwćą.z<“Üūxę5üŪ‰ K<ƒAčJõNźDÕ©³ÄøßoFf>ø^śp –™)AÜ™}!ļŹfč}²l®HnŚ®bó¬é—s½ąŁ½=ŗ ŌČ8€˜„ÆéX''? 1åš5D‘x'ˆXę¢āRuśoھ÷Żvx¾éē¢i-ŹQĒH}_;ńV`›¶CĖQwrż> +>> endobj +775 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [132.999 431.471 193.242 442.375] +/A << /S /GoTo /D (structAACENC__MetaData_aa2fbd6a3c66ac05e69e42782807e7ba4) >> +>> endobj +776 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.27 417.349 265.371 428.253] +/A << /S /GoTo /D (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24) >> +>> endobj +777 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.27 403.228 246.791 414.132] +/A << /S /GoTo /D (structAACENC__MetaData_ace0f370c1026d179ea122c0820e1d17c) >> +>> endobj +778 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [149.616 391.164 214.841 400.011] +/A << /S /GoTo /D (structAACENC__MetaData_a1e67ac741a9080f11325d0c02223f046) >> +>> endobj +779 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [149.616 377.043 225.919 385.89] +/A << /S /GoTo /D (structAACENC__MetaData_ad2646dc407b31f38dbf71178b6780916) >> +>> endobj +780 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.27 360.864 236.281 371.768] +/A << /S /GoTo /D (structAACENC__MetaData_a0ad6337da83fa3a43a22f87d4ee8b192) >> +>> endobj +781 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [239.926 152.897 410.446 163.801] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj 785 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 528.724 165.576 538.651] -/A << /S /GoTo /D (aacenc__lib_8h) >> +/D [783 0 R /XYZ 89 770.89 null] +>> endobj +234 0 obj << +/D [783 0 R /XYZ 90 739.935 null] +>> endobj +613 0 obj << +/D [783 0 R /XYZ 90 626.477 null] +>> endobj +238 0 obj << +/D [783 0 R /XYZ 90 617.294 null] >> endobj 786 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 396.15 194.766 407.054] -/A << /S /GoTo /D (structAACENC__InArgs_aefc45c133d4f9775d8d0aadf56302ae4) >> +/D [783 0 R /XYZ 90 522.197 null] +>> endobj +242 0 obj << +/D [783 0 R /XYZ 90 344.658 null] +>> endobj +246 0 obj << +/D [783 0 R /XYZ 90 282.964 null] >> endobj 787 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 382.024 191.997 392.928] -/A << /S /GoTo /D (structAACENC__InArgs_aa33d59e07bbd49bfe4dd6793763c6d48) >> +/D [783 0 R /XYZ 90 258.109 null] +>> endobj +250 0 obj << +/D [783 0 R /XYZ 90 258.109 null] +>> endobj +617 0 obj << +/D [783 0 R /XYZ 283.313 215.753 null] +>> endobj +254 0 obj << +/D [783 0 R /XYZ 90 196.393 null] >> endobj 788 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [229.386 320.317 296.653 331.221] -/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> +/D [783 0 R /XYZ 414.431 156.05 null] >> endobj -789 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 95.352 165.576 105.279] -/A << /S /GoTo /D (aacenc__lib_8h) >> ->> endobj -793 0 obj << -/D [791 0 R /XYZ 89 770.89 null] ->> endobj -783 0 obj << -/D [791 0 R /XYZ 90 727.815 null] ->> endobj -174 0 obj << -/D [791 0 R /XYZ 90 710.602 null] ->> endobj -782 0 obj << -/D [791 0 R /XYZ 90 650.476 null] ->> endobj -178 0 obj << -/D [791 0 R /XYZ 90 633.263 null] ->> endobj -747 0 obj << -/D [791 0 R /XYZ 90 520.575 null] ->> endobj -182 0 obj << -/D [791 0 R /XYZ 90 511.386 null] ->> endobj -794 0 obj << -/D [791 0 R /XYZ 90 416.275 null] ->> endobj -186 0 obj << -/D [791 0 R /XYZ 90 365.808 null] ->> endobj -190 0 obj << -/D [791 0 R /XYZ 90 304.101 null] ->> endobj -795 0 obj << -/D [791 0 R /XYZ 90 279.244 null] ->> endobj -194 0 obj << -/D [791 0 R /XYZ 90 279.244 null] ->> endobj -796 0 obj << -/D [791 0 R /XYZ 90 217.104 null] ->> endobj -198 0 obj << -/D [791 0 R /XYZ 90 199.891 null] ->> endobj -748 0 obj << -/D [791 0 R /XYZ 90 87.204 null] +258 0 obj << +/D [783 0 R /XYZ 90 136.691 null] >> endobj 790 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R /F37 577 0 R /F11 698 0 R >> +/D [783 0 R /XYZ 336.891 96.348 null] +>> endobj +782 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R /F11 673 0 R /F14 726 0 R /F13 789 0 R >> /ProcSet [ /PDF /Text ] >> endobj -807 0 obj << -/Length 1110 +802 0 obj << +/Length 1123 /Filter /FlateDecode >> stream -xڽWŻoŪ6÷_!`/03$%YV1 pģfKŃ$]ā=„AAK”­A5‰Jėžõ;~Ȗ=Ļk°f©ć}’īŽ4vÖv~].GW”:1Š'tā,3'ĘN4!(¤ÄY¦Ī£!ßÓ»³™†īüķķüÓu•y4tŃlŗDšćįžžg¼ńČŌåUäūqčŅŠ{Z¾½]Žž0Ž¢…ŠüŠIŹŃćvR æs0ņć©óYs•N@}X ēaōŪ9NäŚ{N!ˆ<'’×Įį‹+?¤;c”؟?äURt©å$dĄś(‚ °aüé„.<ˆ{Ę0ł©ČWhsB[D K¤gžŁpØų ŠĆPĒ?&¾h4uʰ†”įüŠ­Š<±JŁä+b·“¼Õhōé]žĄ™ ĄETiŸM©E°—qĒ!$÷÷ėŪ„„+H›µÅö^s(»%ūr×ÉĖ.»ÜŪŻé‚¼Šh|c³*ł?,å„t•Å{®JźŁ#”Ė‹W7Zwr¾aUŋ×0kXÉßój-7Æl *_¤¼Yš‚mĻ› -’ÅŌüףży[‰Ø2īXZ=N‚§Cśw‹PY}Čæņć®;ź`Ūwƒ†)†ˆc .Y^šŌ“ó‚·I“×2•žŃ R³1¶s Ŗ>ŸóśB‹·¢äž­©L˜[‰ĪB¹±§Æć#ĘtŻ5LŁE§ę¶žļ/Dm7¼\õŖL2»IWņJ²A(ōŸCŃ -w91ˆŸæ”޼± ÷ŸĻÕü0H‰]37µVuCm -‰³gyŚ­”e¢)™4tÖ³|³.ĶÅCĶ“\éOz;ęPX„ą2gåM÷嚘%‰hҼZ.) YĮéBÕ˜Z^šDö•"Vµµhzh·5G;©MØ•Ņ—Ÿŗų¬ÜjėŁ™šƒ+!†A§ņįÉŠß sŻ߂OßēĮ¹ķö%$2³>+]¬Čwn˾ČBƒ¦?Œ:x…Øż—D}<öNGöU™ru‘¾›j½ÕĀśa~c6-+ė‚·‰¹#” žĀ¬Øy•¶†EX=ß 3ß5U©Łh—ļ¼»K/ -\dØ ”Ón%doŽ<vśtī}¦/żCö6Į  +xŚĶWK“ā6¾ó+\•‹]=,OU,0›ŁšŁ{šŁøŒ-WłAl3üś“,lĀ2ģ!'Ėzt÷ׯ_«…•÷½wóŽ·”ņźó„įaĆuā”óČx2Ä­>åŲ-ĪĶŃäćČ’“©†…E°¹*ÕŚ¬*6a„ĘS±°80E +˜² ¦&e֗ł‡ŽdŽū£G@36H­‰»ČeÜÓŽÓlD0’ĮĄˆyc[ļJ ›2ų&ʬ÷[ŸµšĀÆK«mD‘mõ ĘŲü<śu8żŠQć  +nn¢TųĘź3rF[*QŌ£,×Į‰•É"ź +”Ą"öy…D+¤żšE‰ 6Qœ«į:(å‘Ņ–eĒ@!Żń5[ČycčuĘ\bĆQNõ›`Ų굋ėÄjgÓdny03¶7‡–ĒMõļ§#’qj1l~ŗ½»ŸœKĆ:’B­ņšcš\†“÷ät¤až® Q–ūŌ\ZR^› ”*™X¬4%§µ{µ6n!cĢ -Bˆ©&hv­&p*ŲĪāi»ÓŃī¼ū8æĄ= œšŖ?¢‚rs/,ĀĶW9!’·żõ¹:ö•N—HHēdš,µ“ŻZ„U³¢@k\*ŠGužĶĀ iömćJē"qŌwWŚć;epģ`%9¶ŖTǘ0ßFŽ€6{ØĆ Ŗd§Ž@ †āØM某ĀŃĄqĮł‡]Ž§²ž2‚l×ÓqźŌS÷Āz:™Ļīüqŗ»Mt2‹RdՙŠh5·I°ś^w©c“īśÉ«özł’oķģ…×¶ˆ«JdM}Ӆ,čY(ķ9“…tƒ Ń=Ž&~ļ¢\&Ü6óćh÷MP‚œ+Q«WE¦¢a}&óXß."éĮœ7Ń{qP—¦•Æš.żä:ī=,fÄV½‚źaę}—grĒĻjeI¾Śčc}ĄC›¹&, —GļŌ¬ć˜˜Xo¦Tæe%Öeü—ŠG1¢ūƒ åXŃYt–35¤„Eņ8W°N‘[±ņ’EmŒ„œŠ>Įß ü’™2ŸżB‰=.øĶE.ļµ+Қ lö«Ėvūļ.½S“²nć„ĢßfP%¾z> endobj 797 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 643.375 211.922 654.279] -/A << /S /GoTo /D (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c) >> +/Rect [243.463 566.951 413.983 577.855] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj 798 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 631.131 198.632 642.035] -/A << /S /GoTo /D (structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) >> +/Rect [113.91 163.04 165.576 172.968] +/A << /S /GoTo /D (aacenc__lib_8h) >> +>> endobj +803 0 obj << +/D [801 0 R /XYZ 89 770.89 null] +>> endobj +262 0 obj << +/D [801 0 R /XYZ 90 739.935 null] +>> endobj +616 0 obj << +/D [801 0 R /XYZ 90 626.132 null] +>> endobj +266 0 obj << +/D [801 0 R /XYZ 90 610.195 null] +>> endobj +791 0 obj << +/D [801 0 R /XYZ 417.968 570.104 null] +>> endobj +270 0 obj << +/D [801 0 R /XYZ 90 552.01 null] +>> endobj +795 0 obj << +/D [801 0 R /XYZ 337.021 511.92 null] +>> endobj +274 0 obj << +/D [801 0 R /XYZ 90 493.826 null] +>> endobj +794 0 obj << +/D [801 0 R /XYZ 296.703 453.736 null] +>> endobj +278 0 obj << +/D [801 0 R /XYZ 90 435.642 null] +>> endobj +793 0 obj << +/D [801 0 R /XYZ 349.285 395.552 null] +>> endobj +282 0 obj << +/D [801 0 R /XYZ 90 377.457 null] +>> endobj +792 0 obj << +/D [801 0 R /XYZ 126.353 325.412 null] +>> endobj +286 0 obj << +/D [801 0 R /XYZ 90 309.375 null] +>> endobj +796 0 obj << +/D [801 0 R /XYZ 222.412 267.228 null] +>> endobj +290 0 obj << +/D [801 0 R /XYZ 90 249.134 null] +>> endobj +699 0 obj << +/D [801 0 R /XYZ 90 155.459 null] +>> endobj +294 0 obj << +/D [801 0 R /XYZ 90 146.979 null] +>> endobj +800 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F14 726 0 R /F13 789 0 R /F37 546 0 R /F11 673 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +811 0 obj << +/Length 628 +/Filter /FlateDecode +>> +stream +xŚ­UŃn›0}ē+üxö5†Š·4é¦VZ·®¼µU倓"襬źßĻ€IšvŠ2 „1ęŽsĪ=¾&hƒśęœ'Ī—Æ(Ęq!JÖ(&( +)ę@Q’”;ĻgĄ¢Š](Ń4žœøĖ*m Yj”óŖō’+ē"q~;ŌÄ$ˆö1x„#ĘQZ8wefž +ĢāzéW(fž +Ż:7™ą”ǜĆ ¾@?Ū•ŹÓĒ\ė:_y@ÜV˦2F2aŲ-ā€Ķ€Ć‘īųŽ?čĪ焸—׉īČŌĖźWæ K[¶ÅVŸæNsnćäS0 čé‰.Ė[Q<«e‚Ó3ĶĖō=„i5üQH`:‹†¬!ę˜z>%&ÓRj‘+™Y£Č&­óēŃ&“¢š`ÄC˜„¼'JiM¦Ÿä0ØZżÜźa,jĪÜMļ>»n]Õö[ł9G!Ņ‹²»ŖĢdāÄÜt*V·.Ja wąVÉ®fƒĖēēīāāzńhl77 +wӜMjvX\ėõėö _µõJs„Dż:¼f[Ų«>ä EU6†B6~˜”FöbÖ>|˜3„ā`—ĮoĻżŸ»ēü|3N›åÕ0llČ’HļdGÜķ#Ēóūćw…ŹGō¹nt-Eń®ŒYŹZč‘fÖÖy¹9y· ’ō=(Ā!Ų*'£vŁžū÷÷Ŗ~Ź-4ƒøMm‘^:eÄaĢėŗ*&ÅYWJU/›~Ŗė JžķŻ6ŽyüQó?(D×;ĘŹ4qńÓĮF<=’f 3Ēž…ć +endstream +endobj +810 0 obj << +/Type /Page +/Contents 811 0 R +/Resources 809 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 731 0 R +/Annots [ 799 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R ] >> endobj 799 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 620.944 201.013 629.791] -/A << /S /GoTo /D (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047) >> ->> endobj -800 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 606.643 199.748 617.547] -/A << /S /GoTo /D (structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) >> ->> endobj -801 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 594.399 193.641 605.302] -/A << /S /GoTo /D (structAACENC__InfoStruct_a993149bc5985d79c40d6e96a2d90a228) >> ->> endobj -802 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 582.154 197.506 593.058] -/A << /S /GoTo /D (structAACENC__InfoStruct_ab5c902598267b09b625e440b53937c76) >> ->> endobj -803 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 570.468 185.91 580.814] -/A << /S /GoTo /D (structAACENC__InfoStruct_a5bb3228c5af5584f97c54bdf8ed946e3) >> +/Rect [132.999 704.154 190.343 715.058] +/A << /S /GoTo /D (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) >> >> endobj 804 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 559.723 177.043 568.57] -/A << /S /GoTo /D (structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) >> ->> endobj -808 0 obj << -/D [806 0 R /XYZ 89 770.89 null] ->> endobj -202 0 obj << -/D [806 0 R /XYZ 90 739.935 null] ->> endobj -809 0 obj << -/D [806 0 R /XYZ 90 661.618 null] ->> endobj -206 0 obj << -/D [806 0 R /XYZ 90 546.786 null] ->> endobj -210 0 obj << -/D [806 0 R /XYZ 90 486.829 null] ->> endobj -810 0 obj << -/D [806 0 R /XYZ 90 462.501 null] ->> endobj -214 0 obj << -/D [806 0 R /XYZ 90 462.501 null] ->> endobj -811 0 obj << -/D [806 0 R /XYZ 90 388.934 null] ->> endobj -218 0 obj << -/D [806 0 R /XYZ 90 375.001 null] ->> endobj -812 0 obj << -/D [806 0 R /XYZ 90 315.403 null] ->> endobj -222 0 obj << -/D [806 0 R /XYZ 90 301.469 null] ->> endobj -813 0 obj << -/D [806 0 R /XYZ 252.31 249.697 null] ->> endobj -226 0 obj << -/D [806 0 R /XYZ 90 233.607 null] ->> endobj -814 0 obj << -/D [806 0 R /XYZ 90 162.054 null] ->> endobj -230 0 obj << -/D [806 0 R /XYZ 90 148.12 null] ->> endobj -815 0 obj << -/D [806 0 R /XYZ 281.769 96.348 null] ->> endobj -805 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F11 698 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -836 0 obj << -/Length 1178 -/Filter /FlateDecode ->> -stream -xŚĶW[oā8~ēWDŚ—D;x}‰ØV+µ@w;j;ŻĀ<µ#d‘ragJēׯŪ¶…eVŚāĖ9ßłüsč,čü޹št~¹ĘŲéƒ~€g2wśŠ (FĪ$vž\x]‚Iøƒ”U•×ÅŗĆ"Ŗ3ž &’"÷¾L>vF“Ī_$mB56hBB(ė<}N,Ē?:~ĻyiVeŽ‰|¦Īøóg¾‰Ė×kē„\n-Ģ^õ3cIž )”? n¼‹›ą~›™šf2¶¾Ģ£«WĮąåŽ­“¬Ī“ŃüI,’4e„3Įl@ŹAó÷e™DKC$3LĶøe®āe‹GQ˜łDT¢äĢø~IÄŅ’\äfļ¼d?š¤Ž‰$}ŖÅU=?•'BȆ'BpƓk”a[Į©9C•š±qŖį&N5hāģRŚsĒÉ7®§c¾āylöfO¶Å[8ˆĀaUˆ@ŸR »ŖW«ĀŠļm™ū”µŻ@׃•g®ąŲsÆU*fNZć„«3@nUJfĘ\]ɼqcż2×{“K,[„|×ėŠóå ]ż¬ჱßÄ®ž-µŃĄmä"Ÿ33Įv¢ t”YŠD;PŠ¢¢TIš¾zufēdiĒ;EO«®0) OʼjTc”ź!éĆL,xĪK¶‘÷¼,2»×jøHÓBIļeS6ž!Ä)æhJ¬­‘ -€OzRt@“ÆQ>cLwVéJ\.LI~”ūžŗTjž±Hžā4MfŠU°ÜŁÕ$ņń¬¤Żµ¾|h°)Į¾ÉŸVÖÜqĮ†›Œ·XhŹ›‡zJ<\§ ÷ҧ ä§$Ņ:6 j-¤„²@½š×¦dĻńūvĮ6P䞵É…ģāß6„C焉^–Źš ¾•ŠC=K“Č” !JI$†nmjC›Źv‘Ųš,F=rź”I¢åai¢GÆOÜKBČÕÓįć`śšØ†?]ßÜŽŽ·ÜØŗŒ¦²9i”ķm1zS AEĮ’uTd«caÓ€m@Ŗ ‡ß`hāõdę4*^p!}ĖU¢~U‹§’޶cż7±žą\$Ļ‹iÉēÓ“ķSŅĻ+Y’Ūąū>ĖēēĮ—o{}Œ¦Y²Žu5ΧI¼>.\z¶ėŃd|3fėŪÆ?†įńū.e™¼¼KÖ?NSGx­ź²,ź<>Ķļłgéģul1?ŠŪ-ĄŌķv  Ó‡²ļ%©ķźC^Ee²²ŸEļ\¹m—ŪĘYqQÆŚ7‰ŗl]k[Ą n!aéŽoļę[Ėß}³}Qnƒk n¢Ōē¹S¶=’ā¢-!Ō%4Gł6ƒfŸ½_él“‰§vSŽÜ‡ä)Ā{8s•2_ ‚ĶR®n‹;g»’Ś#€@|ź'źß?-Ź: -endstream -endobj -835 0 obj << -/Type /Page -/Contents 836 0 R -/Resources 834 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Annots [ 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 ] ->> endobj -819 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 501.74 165.576 511.668] -/A << /S /GoTo /D (aacenc__lib_8h) >> ->> endobj -820 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 373.073 284.43 383.977] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> ->> endobj -821 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [284.928 373.073 330.637 383.977] -/A << /S /GoTo /D (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) >> ->> endobj -822 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 359.557 284.43 370.461] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> ->> endobj -823 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [284.928 359.557 340.051 370.461] -/A << /S /GoTo /D (structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) >> ->> endobj -824 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 346.042 214.393 356.946] -/A << /S /GoTo /D (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) >> ->> endobj -825 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 332.526 223.807 343.43] -/A << /S /GoTo /D (structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) >> ->> endobj -826 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 319.01 226.995 329.914] -/A << /S /GoTo /D (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61) >> ->> endobj -827 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 305.495 193.242 316.399] -/A << /S /GoTo /D (structAACENC__MetaData_aa2fbd6a3c66ac05e69e42782807e7ba4) >> ->> endobj -828 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 291.979 265.371 302.883] -/A << /S /GoTo /D (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24) >> ->> endobj -829 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 278.464 246.791 289.368] -/A << /S /GoTo /D (structAACENC__MetaData_ace0f370c1026d179ea122c0820e1d17c) >> ->> endobj -830 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [149.616 267.005 214.841 275.852] -/A << /S /GoTo /D (structAACENC__MetaData_a1e67ac741a9080f11325d0c02223f046) >> ->> endobj -831 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [149.616 253.49 225.919 262.336] -/A << /S /GoTo /D (structAACENC__MetaData_ad2646dc407b31f38dbf71178b6780916) >> ->> endobj -832 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 237.917 236.281 248.821] -/A << /S /GoTo /D (structAACENC__MetaData_a0ad6337da83fa3a43a22f87d4ee8b192) >> ->> endobj -837 0 obj << -/D [835 0 R /XYZ 89 770.89 null] ->> endobj -234 0 obj << -/D [835 0 R /XYZ 90 739.935 null] ->> endobj -818 0 obj << -/D [835 0 R /XYZ 90 685.588 null] ->> endobj -238 0 obj << -/D [835 0 R /XYZ 90 669.748 null] ->> endobj -817 0 obj << -/D [835 0 R /XYZ 477.971 629.678 null] ->> endobj -242 0 obj << -/D [835 0 R /XYZ 90 611.681 null] ->> endobj -645 0 obj << -/D [835 0 R /XYZ 90 494.202 null] ->> endobj -246 0 obj << -/D [835 0 R /XYZ 90 485.776 null] ->> endobj -838 0 obj << -/D [835 0 R /XYZ 90 392.587 null] ->> endobj -250 0 obj << -/D [835 0 R /XYZ 90 223.074 null] ->> endobj -254 0 obj << -/D [835 0 R /XYZ 90 163.014 null] ->> endobj -839 0 obj << -/D [835 0 R /XYZ 90 138.432 null] ->> endobj -258 0 obj << -/D [835 0 R /XYZ 90 138.432 null] ->> endobj -649 0 obj << -/D [835 0 R /XYZ 283.313 96.348 null] ->> endobj -834 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R /F11 698 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -852 0 obj << -/Length 994 -/Filter /FlateDecode ->> -stream -xŚÕWŪrŪ6}ēWą‘œ©P\^Üéƒ"É®3vźČŹ““rh’ŁįE%)[É× [ŌČŗŒŻĪōE$–‹Å9»g— €Ą…õafżzNačĢę DĄ÷0dƒY -īlŗĪ€0d‡cöhņi]ó6Ēm¬ܶõ*iÕż”ĻyķąĄęeĀ…‰2ŲÄw¾Ķ>Z“™õ…űąīęCŸ2ÖŻ7Ra’¤až:Æø„Škn­ĻŚ ™ˆ„Ož!C‰3ĄõqOfN(,c‡2{č„ĢVėh<E7S‡"ūĻó˫ɫ„ĻĪ’ŖXFĖŽbõ!’sÉM¢€ ś -Ļdv{©B>šŲ!Č~ü®–2XĶ›&«JeXÖ:(t‹Ōņ.¼„rV/tņ¦ø3]“AŽJrĀ2t0ʶ2v®a§"Ŗl -xP3 }Ō‡!u73JuF/?ĶeHœLģX¤ Ł Ž -U\q3ūQx~8eĆōļU£5•gEÖ -Uu‹¶RW•GłSe©2Uśfó:ÆāŌä0‰s®]ž²öAŻaO]ļ³Vū­*ģn "˜‰Ną:P¢4tt†6>DG”Ą‚¤Į‹…fŹéÆQ <_dżÅ {»*#z -Cꆺ@l³@®.Š—ŃĆéž„U~’żvU+ÆŹōŗJŠńe™fIÜ>«u^颌e<= DTQ­&eR„Y¹P+y -ģ«OptE’$€ŲÕ\¾¶4:`‚:S…zõ“B²čīŹJk'SEż{1Düż'b}"$Z6ń*Ķ“—qmi¶NŻ@Ųōr™×ĄūĮÓĄƒa[Z¦n]ÖSūW†iŚ 09už^ßL.4Ééč9I½£&©IĻ[‡é—ĘĢ?3=S.“Sźn颭—“æ«'ć,Ī«ÅJoėł‰>t©o‹ŠgéåE×1„m¤¶óojŁ“|Łd?øŽŠ yŽhŚYŽ«v–d;KK×Ī‚¤¤…1 ™§hķjīŽwŠŪ[Ū;Ŗµ½ż­`€ń®źcōåsH=Gµ -»=pĶ‹\¾×tüēwĶö_©€BŠČ©’¤~’…tj -endstream -endobj -851 0 obj << -/Type /Page -/Contents 852 0 R -/Resources 850 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Annots [ 833 0 R 848 0 R ] ->> endobj -833 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [239.926 701.322 410.446 712.226] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> ->> endobj -848 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [243.463 422.307 413.983 433.211] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> ->> endobj -853 0 obj << -/D [851 0 R /XYZ 89 770.89 null] ->> endobj -262 0 obj << -/D [851 0 R /XYZ 90 739.935 null] ->> endobj -841 0 obj << -/D [851 0 R /XYZ 414.431 704.475 null] ->> endobj -266 0 obj << -/D [851 0 R /XYZ 90 682.008 null] ->> endobj -847 0 obj << -/D [851 0 R /XYZ 336.891 641.044 null] ->> endobj -270 0 obj << -/D [851 0 R /XYZ 90 618.577 null] ->> endobj -648 0 obj << -/D [851 0 R /XYZ 90 486.734 null] ->> endobj -274 0 obj << -/D [851 0 R /XYZ 90 466.425 null] ->> endobj -840 0 obj << -/D [851 0 R /XYZ 417.968 425.46 null] ->> endobj -278 0 obj << -/D [851 0 R /XYZ 90 402.993 null] ->> endobj -845 0 obj << -/D [851 0 R /XYZ 337.021 362.029 null] ->> endobj -282 0 obj << -/D [851 0 R /XYZ 90 339.562 null] ->> endobj -844 0 obj << -/D [851 0 R /XYZ 296.703 298.597 null] ->> endobj -286 0 obj << -/D [851 0 R /XYZ 90 276.13 null] ->> endobj -843 0 obj << -/D [851 0 R /XYZ 349.285 235.166 null] ->> endobj -290 0 obj << -/D [851 0 R /XYZ 90 212.699 null] ->> endobj -842 0 obj << -/D [851 0 R /XYZ 126.353 159.779 null] ->> endobj -294 0 obj << -/D [851 0 R /XYZ 90 139.37 null] ->> endobj -846 0 obj << -/D [851 0 R /XYZ 222.412 96.348 null] ->> endobj -850 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R /F13 854 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -863 0 obj << -/Length 859 -/Filter /FlateDecode ->> -stream -xŚĶVĖnŪ8Żū+ĢFj–Q²Œ¢€§““½KŠ‚–hGE„z$ķß)’Ž¢8)wQĄ€,źņ>Ī9÷’ģ&ļ֓×ļ )Lcƒõ¤$1†Œ`°ĪĮe@fį”šÄĮ‰äMN CĮ²ŹŗRؖ·E„ĀoėO“ÓõäĒkŸąŽK`BČŹÉå7r½ž HÓøė­JŖŸ¬&_'čŁ|ˆ~MˆĶ'$ćpŠBĮźäßŅMj± NNĻO¾Ÿ‰–/yĖēó¦«ėĻ‚ŖSłYńó?b܆BšÄu4:ˆ†Ą”DF© ¶Ņ»ĶN ÆBĀ‚;U?ķ‚fįÖøŌŽś„+Ä‚&Æģ;ϲŖĪ µ³Æmåž|#…¶Å&'0&‘ŗ¾>ąę~i[ÕĪĆuįČhŚŗĖZū’ĪTĘŻ‡P¢ę­péoėŖō{…÷&„-jŸįBDŠyOŖgąFt¦±a„ĢfyE{`e¹ÆwNzßåT£pž •}—Å&ŒPÆģźéĘó˜¦>M!I©'9¾$īŚEmźŻ¹zW .ÄVōÄėČĀM“Ń LilüSØLv¹³Äx`É(L“j‘5|sĄ—VŗŒ3ø/Ö:ņ–`ŻŲæuŌ`˜2ę ’Ä@A>ŠGµāåü]$r|¤…Ź—ō˜ÆŹ%Z•ŠĻ”„ž8…ō­¶MV7~:>?d–ĀōœĶØ9«®½éœœyÆå]? šŃ$ąźłµ"O•łU¹9ȏ!XĘ.ćRĀC‚DĖ&®ģ3Qn„ĖĆ Ü'އŃLŠ;Ü#i8ĻóA«Ļē#Īž÷¼»O°ŚzĄ²BJ^’rSvŸ÷¦÷iĮØT£kČż‡7¢G³6 Ā#ÜõX?~Ģč9(y”<š02TC‘FCdČ yŠ7‡”aO#SØ{Åuyį«Ęy< -˜čĻƆĄŠ3œ\/—Ģ­9$¹,|ÖE«O]ĮĖGŗ¹yW›“õŲž<˱:’ņ FōG/ž9¾”Ī(¤ˆ¼ō‚ś?¾ūŠm -endstream -endobj -862 0 obj << -/Type /Page -/Contents 863 0 R -/Resources 861 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Annots [ 849 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R ] ->> endobj -849 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 660.227 165.576 670.155] -/A << /S /GoTo /D (aacenc__lib_8h) >> ->> endobj -855 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 535.17 190.343 546.074] -/A << /S /GoTo /D (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) >> ->> endobj -856 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 522.219 194.766 533.123] +/Rect [132.999 691.202 194.766 702.106] /A << /S /GoTo /D (structAACENC__OutArgs_ad4d8784f4d5504a5f87ef44af1e7b6db) >> >> endobj -857 0 obj << +805 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 509.267 191.997 520.171] +/Rect [132.999 678.251 191.997 689.155] /A << /S /GoTo /D (structAACENC__OutArgs_a7d481a0e52142dcdbdfa34677b111d7e) >> >> endobj -858 0 obj << +806 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [234.367 450.731 301.635 461.635] +/Rect [234.367 619.715 301.635 630.619] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -859 0 obj << +807 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [289.908 219.509 357.176 230.413] +/Rect [289.908 423.742 357.176 434.646] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -860 0 obj << +808 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 159.642 165.576 169.57] +/Rect [113.91 381.499 165.576 391.427] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -864 0 obj << -/D [862 0 R /XYZ 89 770.89 null] +812 0 obj << +/D [810 0 R /XYZ 89 770.89 null] +>> endobj +813 0 obj << +/D [810 0 R /XYZ 90 723.104 null] >> endobj 298 0 obj << -/D [862 0 R /XYZ 90 739.935 null] ->> endobj -749 0 obj << -/D [862 0 R /XYZ 90 653.253 null] +/D [810 0 R /XYZ 90 664.677 null] >> endobj 302 0 obj << -/D [862 0 R /XYZ 90 645.532 null] +/D [810 0 R /XYZ 90 606.141 null] >> endobj -865 0 obj << -/D [862 0 R /XYZ 90 554.12 null] +814 0 obj << +/D [810 0 R /XYZ 90 581.812 null] >> endobj 306 0 obj << -/D [862 0 R /XYZ 90 495.693 null] +/D [810 0 R /XYZ 90 581.812 null] +>> endobj +815 0 obj << +/D [810 0 R /XYZ 322.456 539.982 null] >> endobj 310 0 obj << -/D [862 0 R /XYZ 90 437.157 null] +/D [810 0 R /XYZ 90 523.255 null] >> endobj -866 0 obj << -/D [862 0 R /XYZ 90 412.829 null] +816 0 obj << +/D [810 0 R /XYZ 324.688 483.439 null] >> endobj 314 0 obj << -/D [862 0 R /XYZ 90 412.829 null] +/D [810 0 R /XYZ 90 466.711 null] >> endobj -867 0 obj << -/D [862 0 R /XYZ 90 351.217 null] ->> endobj -318 0 obj << -/D [862 0 R /XYZ 90 336.647 null] ->> endobj -868 0 obj << -/D [862 0 R /XYZ 90 277.049 null] ->> endobj -322 0 obj << -/D [862 0 R /XYZ 90 262.479 null] ->> endobj -861 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R /F11 698 0 R >> +809 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj - -875 0 obj << -/Length 357 +828 0 obj << +/Length 558 /Filter /FlateDecode >> stream -xŚu’;OĆ0…÷ü - –dØėW›­ō -( Ź8N)/¢tčæĒ©ŻP -ȃķä~ēÜseö‡łż> ęBAsƒ4Ī$Œi^Će”ŗĮōьÄ(Ń{śč‘ą‘@`ǐ ā€MYW½jõ”6Ķ †²m&3H'žä²Ų[ ˆ£F…JiÓč]U~D …°pzߏ/&·-aŚ*ć•)Pr½p"!fĀ·“zrÜb1ź-ŻeŻč6;'³V½źīR66qaۈöŽ…QSķB¤2ŠłŅä§/Nąi’£ļmŁčźY nCŻŌJecvƱ3°øł‰`¶ń:deėĖǼ„·gvl23i2;ŸǔϵļUēg™·>ĢõØļFŸé\ļė4Ąö€8”P&`Ä!Åč:ų ”’Sv*¹<Ÿ~žI’a¾­ XµĮ³]’ł}cX©+ +xڽTMs›0¼ó+4é(śōę§M?’©Ė-éxT636ø€ł÷Hø6™¦=x:>ęķīŪ§} °|š»Ž¤Žõ-!€ (į -@Œ€`1äiżłFķ;Ż!įȗĮō“E0(#‰{!ēEÄnĖ­¶ÕIvŗźTWÖÕ‰¤L‡2ī¤$ÄAˆB¾R™®²Õ¶ü0äƍåūͼԅi G¾©ŅŽ™‚ʂGL$Œ©p-%Ÿ-n6ėłęöaQeu>:3RjžķCYĒE€M#™SÜhu¬}Bˆl5“ŗTžėb aV÷]YeŪCn(„1uµS٦¬ōŖ{Žkø¹źńA˜ĘWꐗµ+mss ¾±}“¹Žė*7ó 0÷Æu£ön–EķĢLGż¾×9dz]¤67`€%…±Œ‘F’€lēżņŒcAŁPrz?¼‘īė»Iķ}3æ‘, Göš„~L+Ę0朸“’ž¤…Į|«ŚV·g&CĆ2ŚHc{"„ŸaĄcČĶ“]sČ:÷¦ļ«Y»—CĶI¦÷óÕ]UŌßO!ēĆĪ‹@ዪŽŠD·ŁŪ’äĀFgĆś­Ū’iōįŠż›ģeĶ~՝JT§¦”: b8ƊšÜ2·Ķi ™o–=×ÅÅ"ŁY>»¼Īɤć‡d±“_ ĢNU(‡‚öf¢˜Į¤= ™Y@ū8»O¾,VÆÕŽśf¼kā‡b endstream endobj -874 0 obj << +827 0 obj << /Type /Page -/Contents 875 0 R -/Resources 873 0 R +/Contents 828 0 R +/Resources 826 0 R /MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Group 870 0 R +/Parent 832 0 R +/Group 818 0 R +/Annots [ 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R ] >> endobj -869 0 obj << +817 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./aacenc__lib_8h__incl.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 877 0 R +/PTEX.InfoDict 833 0 R /BBox [0 0 256 164] -/Group 870 0 R +/Group 818 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> ->>/Font << /f-0-0 878 0 R>> +>>/Font << /f-0-0 834 0 R>> >> /Length 495 /Filter /FlateDecode @@ -4009,23 +3788,23 @@ x ł/ź–źIo(“Æ]TU“Č‹¼TČ““ėt½Jڶ»ōĀżv> endstream endobj -877 0 obj +833 0 obj << /Creator (cairo 1.8.10 \(http://cairographics.org\)) /Producer (cairo 1.8.10 \(http://cairographics.org\)) >> endobj -878 0 obj +834 0 obj << /Type /Font /Subtype /Type0 /BaseFont /FreeSans /Encoding /Identity-H -/DescendantFonts [ 879 0 R] -/ToUnicode 880 0 R +/DescendantFonts [ 835 0 R] +/ToUnicode 836 0 R >> endobj -879 0 obj +835 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -4035,20 +3814,20 @@ endobj /Ordering (Identity) /Supplement 0 >> -/FontDescriptor 881 0 R +/FontDescriptor 837 0 R /W [ 0 [ 500 556 500 556 556 556 222 222 556 278 556 833 278 500 556 611 722 667 556 556 556]] >> endobj -880 0 obj +836 0 obj << -/Length 882 0 R +/Length 838 0 R /Filter /FlateDecode >> stream xœ]ŅĶj„0š{žbŽŪĆ¢qŻ/”l/śAm@“qWØ1ÄģĮ·oĢ_¶Š€ĀĻ™ N&É„z©Lļ)łp£ŖŁS×ķxļN1µ|ķé^łUń­†ĘŠ$×óäyØL7Š¢ ä3'ļfŚ<ė±å'ADÉ»Óģzs„Ķ÷„ʧśnķl<„¢,Is¶{mģ[30%±x[éļż¼ e_³eŹ¢%~Iš'Ū(v¹²(ҰJ*ŗ°JĮF’‹g)ŹŚNŻÓeHOӃ,£2hķ =”C ķ£öt@LAGč   :Geė. b'؅4¤¢Ž9¤”uO†R؋ŹQ2…P'Ń_ŽBčļˆŽäŚßš¹ö‡ƒ[Oh9ĀeŽłØ»sa4ńRę,Óč ?īķRŸ_Žū„Ö endstream endobj -881 0 obj +837 0 obj << /Type /FontDescriptor /FontName /FreeSans @@ -4060,15 +3839,15 @@ endobj /CapHeight 1050 /StemV 80 /StemH 80 -/FontFile2 883 0 R +/FontFile2 839 0 R >> endobj -882 0 obj +838 0 obj 309 endobj -883 0 obj +839 0 obj << -/Length 884 0 R +/Length 840 0 R /Filter /FlateDecode /Length1 2464 >> @@ -4080,3089 +3859,2823 @@ A ś'„’«77 endstream endobj -884 0 obj +840 0 obj 1825 endobj -870 0 obj +818 0 obj << /Type /Group /S /Transparency /CS /DeviceRGB >>endobj -876 0 obj << -/D [874 0 R /XYZ 89 770.89 null] ->> endobj -326 0 obj << -/D [874 0 R /XYZ 90 739.935 null] ->> endobj -581 0 obj << -/D [874 0 R /XYZ 90 553.953 null] ->> endobj -330 0 obj << -/D [874 0 R /XYZ 90 553.953 null] ->> endobj -873 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> -/XObject << /Im2 869 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -910 0 obj << -/Length 703 -/Filter /FlateDecode ->> -stream -xڽVŪn›@}ē+ö¤z³–K„>ƒSŅųRL*UIdYŪH6N0VUż÷.°“@›"«~šŽfĪ™93»@ąJŗō„‹!Ą„¦F4ą/‰€®aČžÜÉ)ž5 Ō„˜1ī”ļ¢MØōC²½ Ū0Nēi“‹3SÉń„' sKpĒtØS‚­t÷€Ą‚ļ_©i€ēÜj TBłøS髄j”ŃFh„/uRᯣ}Ä*™?®‹é~½S“ŸÅÉó: -ÄÉ=BdŠżE”„Aŗy-V»¤£ø¾ÅĮę°™¦æé -¤y¶eøĶ‘«Pj@ˆu0ʓVq¦Ć“„ ij”åÕy~X:Š wK½ćŚüQ§4é š^½,*ĘŠdŒé¢PӌBŗžf¾ßs-Ŗ4ŌĘT)&*$fįuO«¹€»C\ó49©8É¢JV"tüŖÓw$h„§C•Rø}¶Fö3{ĖvDfBĘ/pU'ęok’?­ēŗ«!‡l]SĒó²łŲk"ev?ރ1 Ŗ™> endobj -871 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (./aacenc__lib_8h__dep__incl.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 915 0 R -/BBox [0 0 150 164] -/Group 872 0 R -/Resources << -/ExtGState << -/a0 << -/CA 1 -/ca 1 ->> ->>/Font << /f-0-0 916 0 R>> ->> -/Length 329 -/Filter /FlateDecode ->> -stream -xœSMKĆ@½ĻƘ?ķLös@r(ˆPšP x(=Ōh+Ņ -­’¾³›“i‹Ø„ä½Ży¼™·Kö0Ē=Ų€Öc‹‡W|Ā`ĢĻaƒ“įęsX?Üéē gś¾Ćb‰d_€ ļ±wŁeä:į™żÓŚßąØš™č„j¼FmJåŃnVŒzgŪBk[ģ蚫¤øzmP\ŌnŚ‚‰>”­ÓĀÅ,×éŪLÖU¤łŚ5,nˆˆĖēX7Uķ3±Ć†».ųa#4•Ķ{JCATY*«fŁĪą¶ĻłŁEty~ÅP’‰ėc5’Éč=śŸ>7é<ß0ķ)V¶¾Č× •ī8½Ž¾$²’/odNCĪ= -ᤳ*Ol‚Ī­,²a’Ģ‚5Ö9ģšńw·|DucÓ÷“Š÷cź[Œi,å¼”NĖ_0‡otµžķ -endstream -endobj -915 0 obj -<< -/Creator (cairo 1.8.10 \(http://cairographics.org\)) -/Producer (cairo 1.8.10 \(http://cairographics.org\)) ->> -endobj -916 0 obj -<< -/Type /Font -/Subtype /Type0 -/BaseFont /FreeSans -/Encoding /Identity-H -/DescendantFonts [ 917 0 R] -/ToUnicode 918 0 R ->> -endobj -917 0 obj -<< -/Type /Font -/Subtype /CIDFontType2 -/BaseFont /FreeSans -/CIDSystemInfo << -/Registry (Adobe) -/Ordering (Identity) -/Supplement 0 ->> -/FontDescriptor 919 0 R -/W [ 0 [ 500 556 500 556 556 556 222 222 556 278 556 833 556]] ->> -endobj -918 0 obj -<< -/Length 920 0 R -/Filter /FlateDecode ->> -stream -xœ]ŃĶj„0ą{žbŽŪĆu» BŁ^<ō‡Ś>@LFØ1Äxšķgd (|™™™Č[ż\;A¾‡Q7”³ĪœĘ9h„{ėD^€±:n¢æ”27ĖqØ]7вł‘‚S ģžĢŲāƒł ėzŲ}ŻŽjfļp@!U»t܋ņÆj@T¼ÆMŠŪøģSŁ_Ęēā -rĪWŅ£ĮÉ+A¹E™„UAŁ„U tę_<µCem§æU ō<„gŁ)ÆHėĄ:°Ž¬G²Ž¤cĒ:qL³Ī¬+ėĀ*XWR±¢8vaµ,ĆҤsFl7^[ZēŸ—žCH£¢G¢­Ó±ļļčGæVŃ÷ Č -„ -endstream -endobj -919 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 921 0 R ->> -endobj -920 0 obj -277 -endobj -921 0 obj -<< -/Length 922 0 R -/Filter /FlateDecode -/Length1 1864 ->> -stream -xœeTmLSW~Ļi{ŪŚ­ż¬Ę[ŹG[amiAK* ŲŃŖ½ ;Ŗ E`ąĀ˜n*ŒĶĢ}ž˜ó#ūų·d‹Y–˲eĪ?ĢdŁG¢ÉĢHMtŁł5—™L’øŻ{n ’¬7÷¼ēyŽ÷¼ļ{žs{€Ą*˜šūFSćŠņągµŁÄ¾É ^ŻĆ½‰xqéžń£š·N„‚ų‡#Gö_ÜŻnĆłēŖ£éĮŌĄæÆ,ĢhF ¤‘ąnSb_š8\\KæEüb’ČŲ¾@q+āÄõ£©ĆćämźąüˆłńēĒ-'“ø–‹#~Zȼź*v«Å™ŁiÖ8ĶN2/‘nł1Ø®.ŌØ®¶,| [•¹K ©*³Y>ÆŻf¶ś¼Aē*)Æ`C³6ø™4¹«„ÓZ¼&’Æ²Ś›¹Ė©^ļ²»+5ńäŽ=zĆZ‹§ØqméSåMõ šX[¢x°£1@oČ—+é}™»+¾µ°|]±©@»J­įÖ¬±—»=µņ„öŖ¤ŃdōDlÖgī’ŲSׂUmV;öäĖ'J?¬Kņ[\ņ·vu· Ūāŗńäš±©ƒĻŒ’¾ą¦±½{ļ>=5óŃ^÷čĘ=Ģg…ueN{į“d&–«Š®qź”ķQ"'ŽźŲ~WÜ4ŁūÜō«£‡Šmņ4)'ń¦-=÷¶¹[‡võŸ&ōƎPP źfq7«A ‚Ćm¬aA}¶ĶDŅeV’ā$Ņåzŗa{o¬ĮźŽSc"XŪŻ,OįšśTTžHę^&Jƙ<3ŠŲœu4¼ųŁqÆ7›ĻĪŃkĢgĮœēāōŚbb¶·pę1œQ|ڬ7hs՝‰Åā”[|Hæ e5 ŒĖ‡bÖ”Y9i+žo…Ķe)ᘾL‚@lćPśšŃōš¦Ī?ĆŃhøugŒ^“ļļzjęćŽreģĀؘ˜ĻöŶ>iÖ«:—Ęߒ·°jA–0ūĢK¢S-•”īX¬¬³~»#ĆĮZ¦–ł«¶¢+,O,éI£žĪe= ’'ź -uK:ż)”l›æ}GÜ·Į·-;PcGMUT(ķÜ*æH†¼ĮčFł›%›Õ¤5qd5)4ūlOD1ÆŌ¤kÓHśČ˃©Š{Š$ńŲuzkGņƒ×Žķ–’”Ÿ®Š„eU)Ö -D±~PV2Œ™ ŽÉ˜ ĮA©bó”}³õjŠ «čńÖ1€ÓéØh7śÕŠĆg§½Ÿ$$%$°tJUфŌ1)JąŚR$qՉ&QįŽ‰ü¼D,Š<xžz¤­īKšüVW$uOš{ėN§čpЉ -=‰6—čōH*a؈—BфS -”G-°”N—ó„Ä Ēсq‰EĒßøLŅT'¤Č¤Øš¢ˆe4B^_ÆGā„Łr›āOöõ9$Ą,Za¶T”BĖ”NXmę7Öx « -i~cĪ~ég Qƒź“ēĒ?é’]Ė^®_½”–tÄQuGž‡^īüBxį,ןćŸüņČCh”T”]Öo„ -™{p’c7!Œ8@ģ°›ńŖfęƒ@n-^Lšadž_(ł -ß_š½gcÅ?|Š÷?ż»p³{^©žG.Ą¼€]RėsĶź@}dN@§¤‹&f yWœ0a%ž–µ'Óā:”ŗ/’šo“TÕ­’ŽoūRż:­V€®!8Zkhų¶‹Ą‘IČa=[v$V1§~*“sɐKž‡Q†Õ“zV™DhdqyŖS°Ģä3Ę ¬Ģ1ŒÉ_ɘ0IAhšY€iE€ųm›Ø• -endstream -endobj -922 0 obj -1373 -endobj -872 0 obj -<< -/Type /Group -/S /Transparency -/CS /DeviceRGB ->>endobj -885 0 obj << +819 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 477.201 226.467 487.128] +/Rect [138.538 203.393 226.467 213.321] /A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj -886 0 obj << +820 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 463.128 220.928 473.056] +/Rect [138.538 190.712 220.928 200.639] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -887 0 obj << +821 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 448.079 213.556 458.983] +/Rect [138.538 177.054 213.556 187.958] /A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj -888 0 obj << +822 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 434.007 220.201 444.91] +/Rect [138.538 164.373 220.201 175.276] /A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj -889 0 obj << +823 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 420.91 225.351 430.838] +/Rect [138.538 152.667 225.351 162.595] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -890 0 obj << +824 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [248.544 358.933 364.141 369.837] +/Rect [248.544 95.352 364.141 106.256] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -891 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 298.306 218.886 308.836] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> +829 0 obj << +/D [827 0 R /XYZ 89 770.89 null] >> endobj -892 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 281.588 175.828 291.775] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281) >> +318 0 obj << +/D [827 0 R /XYZ 90 739.935 null] >> endobj -893 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 264.527 247.519 274.713] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) >> +550 0 obj << +/D [827 0 R /XYZ 90 553.953 null] >> endobj -894 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 247.465 243.424 257.652] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347) >> +322 0 obj << +/D [827 0 R /XYZ 90 553.953 null] >> endobj -895 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 230.404 296.644 240.591] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea1a79b7f1cefc5f89ba7c10cfa020116f) >> +830 0 obj << +/D [827 0 R /XYZ 90 221.097 null] >> endobj -896 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 213.342 243.653 223.529] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) >> +831 0 obj << +/D [827 0 R /XYZ 90 111.748 null] >> endobj -897 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 196.281 219.155 206.468] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea189c4a7532530a89ab214aba35b1e982) >> ->> endobj -898 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 179.22 244.769 189.406] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5af1b153eb8f1a28a543419d10562cbf) >> ->> endobj -899 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 162.158 242.966 172.345] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) >> ->> endobj -900 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 145.097 235.763 155.283] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2) >> ->> endobj -901 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 128.035 251.434 138.222] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea8e8c0fd770036a2bc58fc062f5044454) >> ->> endobj -902 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 110.974 239.638 121.16] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) >> ->> endobj -903 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 93.569 225.641 104.099] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3) >> ->> endobj -911 0 obj << -/D [909 0 R /XYZ 89 770.89 null] ->> endobj -912 0 obj << -/D [909 0 R /XYZ 90 496.296 null] ->> endobj -913 0 obj << -/D [909 0 R /XYZ 90 376.721 null] ->> endobj -914 0 obj << -/D [909 0 R /XYZ 90 318.004 null] ->> endobj -908 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R >> -/XObject << /Im3 871 0 R >> +826 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R /F14 726 0 R >> +/XObject << /Im2 817 0 R >> /ProcSet [ /PDF /Text ] >> endobj -978 0 obj << -/Length 845 +886 0 obj << +/Length 755 /Filter /FlateDecode >> stream -xڽXŪnŚ0¾ē)|™HkźCĀÅ.BpĄSH˜c“C[EŒ¦Ra£Ś¤iļ>'†õ°’—•ĒĘł¾’ü;†ą@0ģōeē4Āōœž‡= Æ@‚®‡Š—ąĢņdŸ` -­Łl^¬ęłĶā“ķBĖł¬W£ÅM”ŸDqU¬mä[jW¹äL-‚ģ ł¦Ćdē[)FPÅ@»N—P0_vĪ. øTėotHĻ?Ŗ]Kąb¢ĘuŽvąVZų@jrOj=Ē%>čbµÖÅZōsŒiEæ{œP•€·Ėķz)Ļśz+˜Øv”ŗA©cȒ0ļß^ŁJ„æ,V›Å9„Xéł¶|é×>Lßq½8AŌń‘§EćIŲ”ZÓOóAIŲ!KŚ=¢Ÿ@­­ _ķc[zǐ„<Ž…ķQėĆA$ؑäN1Óp’ąē“ÓI nĖ’NeŽē2“‚ćƒ!m­URh‡ä’ȲLWæn9Ł9;>ī1žöŪw Ā|"Źå4ā1{nH¶ęLŅ„=+B%TŚ3=Oō1xVōRb>ÉcDskÖń4ćįz“’#A“āīŃĶM G5”ōeS0”"Žāj>ĢŽ˜f<į²1›~Bõ3šl¦IćMš& SĮoƒSūƶhV<ŲT )‚$›¤Ŗ“AKÖ² 3c ¦š•āźŪZÓ(b¢–·aŁc³ Žk±#õ{ŁšžŲ=¬JK0>bhW½4-§õž‚ČČ_ź4 vaׄoŻ÷ńĒ頑Ć$²³`<‰Yk5LŖ{Öyń]ģ”ŹÉiĢņ˜%C9jb NGA’°øž[ųT ²]įw šƒH2” ŠHš(°QAéŪ„Vg­w|ŠälDUńOß×c£<±@Y?Ÿ0ĮÓAI"g|˜TFŠy2l‘ Ä(•å$›ö#UA›z 1ņĄö_USJž&M,ž©ō×b°ż\l_a)<ŁIž£: ImČųŃĮ„”„fć±n_Ÿß§‘ėŖ&Ūó<·ŗąpŌ%ŠĪUŻ’/›ŹūPƒ«ł—Ėb­'ߋĶf±ŗÖ“ƳµØ5[›ņ~Fżė1 Ó²0CTŅjóDfśį5aļgßP^Gū$ýRĆ䓁ÕŻ(ō˵›ųėĮ`LĢbé ›źŸ»}ó”ƒ8EĀ‹,«PPĢ/3ĆĮŗ›»1¬ˆõŸ—&AøźĆ%L({Ī‚Ŗ„v<œ„TI|™§`UŠČ†C”·EʖįŻ޲Pņ—śl0Ɔ0Ņ Gś6÷æŸĻ›ķ*6ž°ž./ LõĖĶ6¼GŹõ©L£ĶöŠā&„kPŖ~˜–~s „Žlg— †ś¶"$^EmķA# »üG~ə(²ŹąŌJ Q.CĮEĪÜx”!d ¢Ł’‡_ļi½müķ÷Ɵ{eÖ¤d¾~v*ž÷ŻĢ$MŲ:(­‹y3Nš¹?EōŽR +Wk1E4¦Ę½v“’£AŸįÖäXž1ę­;“?Ʉ)č‰< +¢z¼ā¦Y}„÷e“zw-…ź +”z'Õąz’:‹fĶQļ„r7į»Öŗ“‚Ōœ•3yXIÖŅ@P/‚ §aĒl‰E²y½ķ ó÷EeĀŠ®ĻŅ“vļDJž”Ż@¾ »>łč@ł±ģKū*‘ĶŻ8‹Ų`3TŖ{õ¦3D}•¾’9YD¬ŒX²ė>=z6ćåē˜1 ÄcæĘüŚn’¹ endstream endobj -977 0 obj << +885 0 obj << /Type /Page -/Contents 978 0 R -/Resources 976 0 R +/Contents 886 0 R +/Resources 884 0 R /MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 904 0 R 905 0 R 906 0 R 907 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 970 0 R 971 0 R 972 0 R ] +/Parent 832 0 R +/Annots [ 825 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 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 ] >> endobj -904 0 obj << +825 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 727.192 248.345 737.723] +/Rect [138.538 704.483 218.886 715.013] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> +>> endobj +842 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 688.856 175.828 699.042] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281) >> +>> endobj +843 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 672.885 247.519 683.071] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) >> +>> endobj +844 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 656.914 243.424 667.1] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347) >> +>> endobj +845 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 640.942 296.644 651.129] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea1a79b7f1cefc5f89ba7c10cfa020116f) >> +>> endobj +846 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 624.971 243.653 635.158] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) >> +>> endobj +847 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 609 219.155 619.187] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea189c4a7532530a89ab214aba35b1e982) >> +>> endobj +848 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 593.029 244.769 603.216] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5af1b153eb8f1a28a543419d10562cbf) >> +>> endobj +849 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 577.058 242.966 587.245] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) >> +>> endobj +850 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 561.087 235.763 571.274] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2) >> +>> endobj +851 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 545.116 251.434 555.303] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea8e8c0fd770036a2bc58fc062f5044454) >> +>> endobj +852 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 529.145 239.638 539.332] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) >> +>> endobj +853 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 512.831 225.641 523.361] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3) >> +>> endobj +854 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.538 499.848 248.345 510.379] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) >> >> endobj -905 0 obj << +855 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 711.72 193.153 721.907] +/Rect [113.91 484.221 193.153 494.408] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) >> >> endobj -906 0 obj << +856 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 695.905 211.325 706.091] +/Rect [113.91 468.25 211.325 478.437] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181) >> >> endobj -907 0 obj << +857 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 680.089 219.355 690.276] +/Rect [113.91 452.279 219.355 462.466] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) >> >> endobj +858 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 436.308 228.032 446.495] +/A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a6a362853fb508e259718dabe65c7a57e) >> +>> endobj +859 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 419.993 186.747 430.524] +/A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a51cb08659a6af422761d58090766faa8) >> +>> endobj +860 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.538 407.011 309.058 417.542] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> +>> endobj +861 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 391.384 272.087 401.571] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a7560bc907e827954b0b55f87751fdbeb) >> +>> endobj +862 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 375.413 321.132 385.6] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) >> +>> endobj +863 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 359.442 298.099 369.629] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a95efe9f7b6df0a6628ec7e2c61646fe9) >> +>> endobj +864 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 343.471 328.883 353.658] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) >> +>> endobj +865 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 327.5 305.85 337.686] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7) >> +>> endobj +866 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 311.185 281.511 321.715] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa0dc03a5dc38b25ac1ea9d8ddf892fb5) >> +>> endobj +867 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.538 298.203 242.687 308.733] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) >> +>> endobj +868 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 282.576 214.005 292.762] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846ab97edc65b5ed3be8c11f3ba9bcca22f3) >> +>> endobj +869 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 266.605 223.419 276.791] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) >> +>> endobj +870 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 250.634 220.839 260.82] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33) >> +>> endobj +871 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 234.663 243.862 244.849] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf) >> +>> endobj +872 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 218.692 244.928 228.878] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846abcbfac74b1bcd90099e3cf6b1fcd19f3) >> +>> endobj +873 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 202.377 205.706 212.907] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) >> +>> endobj +874 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.538 189.395 220.58 199.925] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> +>> endobj +875 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 173.767 180.969 183.954] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) >> +>> endobj +876 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 157.796 202.398 167.983] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> +>> endobj +877 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 141.825 231.728 152.012] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) >> +>> endobj +878 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 125.854 225.651 136.041] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a8a8be3fdebec2693c86e3e63f35ee228) >> +>> endobj +879 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 109.883 214.582 120.07] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> +>> endobj +880 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 93.912 253.855 104.099] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243) >> +>> endobj +887 0 obj << +/D [885 0 R /XYZ 89 770.89 null] +>> endobj +888 0 obj << +/D [885 0 R /XYZ 90 723.09 null] +>> endobj +884 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +962 0 obj << +/Length 1257 +/Filter /FlateDecode +>> +stream +xŚĶX[s¢H~÷WšU±Ó®ū€ + S³HjwĖ™²ˆbb•bFqvöa’ūž¦Ū™ˆĄlRó"mۜŪ÷K‹•'+7­NÜŗö)Uä˜ŌTā™ā`Å2 2(Qā©2R-D“65°š$“4›ŒóGMĒ*z»ž|‘ŠU”ĪҵFlNń-›QC„–ö%žŌņāÖ׍X!…ĆB3”ɲ5ś‚•)ģR0bŽ­ü]œZ*:eš\(ĆÖļ-,­ﯟ¤ hg?{e?!:r°„Xö,*œp]ns× »ćī­†^’nŠó +Óv²•QįÅoĀül^Ée­šl1ó”ōAŌó¢*ńVsńĆN4Ž\¢ĘĮ JŻ\ėĒ^ŌŃV¢°ŹŠqs Ŗö4†Õ?‚^|[„ƒ5×Gn8¼{ųó¼hv‰ł·ž ŠŽļ½(ōŖä“ nĀ"Bż ¼W³”azA|ī‡?rļ¼a•ō ¢ńå€Ä^xV)¹ Ńܰōūn¤™†ś×øÄ»“؈—q čw^¬9Lu{|Gź)6jd^¢°;cÅžx(TÕńĪ÷/QĀ*±¾/Ö’īŪ=Æ}]WlØĄ¦^T`‹6“±ź ß»B +4ˆÕzEńe“ęł<{_^č †š,Ӝ÷ųŠ=‹äå*ŪĢAŲVŚŗ‰°#—æĶ&ł|•mö$”»…‰t/R†Ø„‹?Sj”“sŌ"½¢ ¼¢ź7™ćšfźe“ĮKš•#ƃÜĻ@ÓS0ŽTh1½¾7ž©|Pn6×>Ń_9IM ±į'įƌ/…ڦMwg^žŻĀĀ'Ps„µuf©g®<a,Vg›Ėƒ(šŒō4BŌŻjŗ]¤›+°”Ą—B_-“ļŻē$ĖŅÅ\'I&+Ā)fłœƒ²DŒ#šm5Ļü9Ż'"O­ćD;A›6„ČŌ)&ĆM¼ėźA6[•óŃ$øN~ócµņ›k;Čļ“b­}ÆD·~ź’{Üņa¾ŽNņsŃ)‚:Ōhšą‚ksƒ1d:Vi~œ|ŻĪ׌ 鮜Ļ$=’G  ʼnMšåļ×0>ˆOŌ±%Ÿøćašß£ń:Y“~§VóąĒj‘‹Ż"Ķ&¹Už8²ÉžīJ\Ņz™šėūA‘ßĆg1­’Åźv¾˜žĒ©ü‡4Œ­ Ó¦’G’JZ0 +endstream +endobj +961 0 obj << +/Type /Page +/Contents 962 0 R +/Resources 960 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 832 0 R +/Annots [ 881 0 R 882 0 R 883 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 966 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 967 0 R 958 0 R 959 0 R ] +>> endobj +881 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 727.536 238.363 737.723] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) >> +>> endobj +882 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 711.176 242.796 721.363] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) >> +>> endobj +883 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 694.816 214.582 705.003] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) >> +>> endobj +923 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 678.456 233.302 688.643] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) >> +>> endobj +924 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 662.096 222.214 672.283] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) >> +>> endobj +925 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 645.736 217.342 655.923] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c) >> +>> endobj +926 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 629.376 242.796 639.563] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a017e2a6349d3ae944338a6f0ba892947) >> +>> endobj +927 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 613.016 249.631 623.203] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a39b30031d8438b4018173388aead5bdf) >> +>> endobj +928 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 596.656 232.306 606.843] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a87c7912a645d479132465e6d8e694b36) >> +>> endobj +929 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 580.296 222.632 590.483] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) >> +>> endobj +930 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 563.936 264.286 574.123] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3923cb84146e101030271772fe33ea5a) >> +>> endobj +931 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 547.576 248.286 557.763] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) >> +>> endobj +932 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 531.216 242.029 541.403] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) >> +>> endobj +933 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 514.513 189.108 525.043] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1) >> +>> endobj +934 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 429.411 194.259 440.315] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> +>> endobj +935 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [196.243 429.411 248.576 440.315] +/A << /S /GoTo /D (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) >> +>> endobj +936 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [253.88 429.411 369.476 440.315] +/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> +>> endobj 937 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 664.273 228.032 674.46] -/A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a6a362853fb508e259718dabe65c7a57e) >> +/Rect [113.91 377.762 194.259 388.666] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj 938 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 648.114 186.747 658.644] -/A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a51cb08659a6af422761d58090766faa8) >> +/Rect [194.757 377.762 248.206 388.666] +/A << /S /GoTo /D (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) >> >> endobj 939 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 635.287 309.058 645.817] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> +/Rect [252.021 377.762 367.617 388.666] +/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj 940 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 619.815 272.087 630.002] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a7560bc907e827954b0b55f87751fdbeb) >> +/Rect [113.91 338.442 194.259 348.973] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj 941 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 603.999 321.132 614.186] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) >> +/Rect [201.106 338.442 261.738 348.973] +/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj 942 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 588.184 298.099 598.37] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a95efe9f7b6df0a6628ec7e2c61646fe9) >> +/Rect [301.786 338.442 417.382 348.973] +/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj 943 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 572.368 328.883 582.555] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) >> +/Rect [113.91 326.113 196.301 337.017] +/A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj 944 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 556.552 305.85 566.739] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7) >> +/Rect [273.953 326.113 356.344 337.017] +/A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj 945 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 540.393 281.511 550.923] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa0dc03a5dc38b25ac1ea9d8ddf892fb5) >> +/Rect [438.978 326.113 513.996 337.017] +/A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 527.566 242.687 538.096] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) >> +/Rect [148.042 314.158 229.705 325.062] +/A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj 947 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 512.094 214.005 522.281] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846ab97edc65b5ed3be8c11f3ba9bcca22f3) >> +/Rect [113.91 274.838 194.259 285.368] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 496.278 223.419 506.465] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) >> +/Rect [198.337 274.838 245.689 285.368] +/A << /S /GoTo /D (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) >> >> endobj 949 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 480.463 220.839 490.649] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33) >> +/Rect [280.194 274.838 395.79 285.368] +/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj 950 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 464.647 243.862 474.834] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf) >> ->> endobj -951 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 448.831 244.928 459.018] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846abcbfac74b1bcd90099e3cf6b1fcd19f3) >> ->> endobj -952 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 432.672 205.706 443.202] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) >> ->> endobj -953 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 419.845 220.58 430.375] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> ->> endobj -954 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 404.373 180.969 414.56] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) >> ->> endobj -955 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 388.557 202.398 398.744] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> ->> endobj -956 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 372.742 231.728 382.928] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) >> ->> endobj -957 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 356.926 225.651 367.113] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a8a8be3fdebec2693c86e3e63f35ee228) >> ->> endobj -958 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 341.11 214.582 351.297] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> ->> endobj -959 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 325.295 253.855 335.481] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243) >> ->> endobj -960 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 309.479 238.363 319.666] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) >> ->> endobj -961 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 293.663 242.796 303.85] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) >> ->> endobj -962 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 277.847 233.302 288.034] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) >> ->> endobj -963 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 262.032 222.214 272.218] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) >> ->> endobj -964 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 246.216 217.342 256.403] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c) >> ->> endobj -965 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 230.4 242.796 240.587] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a017e2a6349d3ae944338a6f0ba892947) >> +/Rect [463.147 274.838 513.996 285.368] +/A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj 966 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 214.585 249.631 224.771] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a39b30031d8438b4018173388aead5bdf) >> +/Rect [113.91 262.509 156.301 273.413] +/A << /S /GoTo /D (structAACENC__InfoStruct) >> +>> endobj +951 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 223.189 194.259 233.719] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> +>> endobj +952 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.234 223.189 286.711 233.719] +/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> +>> endobj +953 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.004 223.189 430.6 233.719] +/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> +>> endobj +954 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 210.86 195.952 221.764] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> +>> endobj +955 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [140.843 171.54 233.973 182.07] +/A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> +>> endobj +956 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [262.614 171.54 378.21 182.07] +/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> +>> endobj +957 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [463.147 171.54 513.996 182.07] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj 967 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 198.769 232.306 208.956] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a87c7912a645d479132465e6d8e694b36) >> +/Rect [113.91 159.211 150.413 170.115] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -968 0 obj << +958 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 182.953 222.632 193.14] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) >> +/Rect [113.91 119.891 194.259 130.422] +/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -969 0 obj << +959 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 167.138 264.286 177.324] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3923cb84146e101030271772fe33ea5a) >> +/Rect [194.757 119.891 270.333 130.422] +/A << /S /GoTo /D (aacenc__lib_8h_a28cbc417258c73ad55d613526df8fad5) >> >> endobj -970 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 151.322 248.286 161.509] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) >> +963 0 obj << +/D [961 0 R /XYZ 89 770.89 null] >> endobj -971 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 135.506 242.029 145.693] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) >> +965 0 obj << +/D [961 0 R /XYZ 90 448.781 null] >> endobj -972 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 119.347 189.108 129.877] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1) >> ->> endobj -979 0 obj << -/D [977 0 R /XYZ 89 770.89 null] ->> endobj -976 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F44 980 0 R >> +960 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F44 964 0 R /F14 726 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1039 0 obj << -/Length 1338 +981 0 obj << +/Length 1455 /Filter /FlateDecode >> stream -xŚĶXIsā8¾ó+|“«‚F‹å%7H†ž$dsJŗ(‹ą*chŪōņļēɒ›ĶL&©¾ÄАŽö}zļIŲx3°qŪŗµžø”Ōš‘ļPĒM ®C§Ä…ƳɨõuōÅ`ĢG„sŲTĢŽD±°Ś”c³»˜¬ę"Ƀ1O„€zģL“ 4!ģŠslZ¬ņ÷ÕO:V<ó-;fŠC”ÕĀŻ,d–qÄ&^!ė`•71 -’!bäÜ`•ę4>ó»ˆ`RIąśdØL· -£…†AüžéŁĮeUļ'ÓEż8:79ŽrY£ć-µķļƒbŻŖWŖZļ9éŅņ§<]Mņc ±)‚4tV7!7¦cČńŻ -3:“o«(µ eņŸjvÆ@?5\Ŗ4œW/>«Śūž¦“ō`ü$ņGixóŹļ7*rY#nɅ»„ƒüžŹńhłŌģ ;÷ūś–„tėXƒųŻ¢ą{¼ļh!„ŗL4‰²(y+o*`*S÷šf)shŸ‹üćzEĶ•Āćƒ2iʆ·G8ĮˆÓ„Rb#NHy{8ĮNF¹±Iź9Ķw@ū;C’aךś.zŻWŹ»Ā]’jÜøØü]ķż!|¶KĪėćĪHņÄw‘GŖ-’&))«Gƒz’ÆGÆ -”ō—šxµ(6WQ¢VTß ąž -Čmø€p[æixˆ "[e€ +ņ ŠEØ_3 L£eł–Q‹.p¶©§ŸŗYŪ-˜ś§W·~my”ǦdŁ ¼°ĪD°^ ŠX ­·ā(f6āŽ–żTŪ?²\Ūüµ”˜x©=šŌœ(d­£‘oKŹTŸPŗČy%wŌ›JĒGNńŒSgÓ¶r·ī6iiGtõ×EŲēUĆ+AÆPf$į‰@ŅóL»ŽK lé#ĖČžē°²uXČ®ĒQ^k¦"ķ‡ 4’Ųƒł')·vš¶qZž£ŽÅTVŃi9j6/ŅLMDŪŹøl’ڶY“oA1¤B V™<$rō#ŹgQŅL푪Įv«®V }?»¼¬jŁYVK|µō]©‘ļ;R‚\——W…ū"½<”ÖœJÖDī‰‡0×$ź?ŒTØģŻž`ܕ6äŸĪ±—I#¶>0Ķm(J–e*¬…WÕäu.‰E ’.óc™Į ½?^ßėĢ—±ČŖ1©æĻĀužazīóģæļKŠ +xŚ­XŁr£F}×WšUQ‡¦YēM–°£YšHų!™L©°hIT!PXʙłśÜ^@€elgņbÓ ·Ļ¹Ė¹tå čŹŻč&żzkЇ<Ū°•`ÆxŗāŲYV‚Hł¢®ö5ųØā!lYšŸ½Ŗ KWgŁ®:Ń“ Ė8KŁÖ‘ŒžaŲ©+˜›³äKŁF_¾źJóĻUžų®“bž'ŹfōūHļAĆy–eŌŲ €ź…ƒ0ĀŚė:ą e "‰Š»<>טĄiqŌ•±a"bz’Ģģ“xk2ŃL]ŠŸī²ˆębÄy˜ƒ8-i¾×°®†;é…# ›½éŗ‘P$Ļķ€ƒ A®E.ų ‰?ŠSż~¦ŻæąŲ^ z$ø­ĘeŪRQęÕ®l(Z–:õ—ÓÕĢ_ ³Ųl™Å¶‡lnȐ+‡;Ȅ Č=æM–³…æ½fŗćö1v¤{VxĒé“ķōc˜FÆ8Ҽ'’ŗŸ‚Ūrį5n¦öģv+iÜJĮvßŪ›jæ§ł<£1‹=Ą5åŅ“ i6xŌ ]­öša©ūz.’Łœå…˜ˆŪ‡¤MĻSƒc|mŸ s*Ŗ‚ {zŠĖcœ¾ķXVŲ¢¢óƒ,ķõŻHłĀ7J6Ģc®ĄVK°±‚üš”{JŪeõ ¢öįŌ™či¬#ϳĮ„:ĀXę@÷,’ŠyõbĀ“[& (@é"½®Ęłr AÕՇŁ|µ1Œ<Ęū3é£iĒÖµi +fREqVėŒe×s/xė—––$4dėß4l©µ‚Ķ—Įöóō^Vpx:'“čū¤Ch,`Œ±…°ē\(-§óÅb­aWżć]¬°n œ[óJwq’4…e(žJÉöQ==Ņ(Ŗiæz=.AˆhxfQ+xø {_@īSŲnüąįó lĄ³]ŁŠ²:·…±Ź%ņ}–·)ÄéA O“ęŹXæ_ցæz¶7ó`¬żÉżū‚Ą2Üņjģ7­ +å +™%QŃsÆfUŁ$ßPĖcž”±ŻĢ’ō7C8yļ +“øź.½ÓBŒŠų収šķÅ wGńīv“«4.AوnKec“q +a:Õņ6ź…”²7E‚ĀP“W”—¦±å!KwŗµĻĆ„]écøųŲĆäŪnwcØ+LƒõāvĮĒw›w4„g]9/Ļ’ęnAƒ®²4k)€sī"$%ÜÕ2øĪ‹„ņH_Vr¶µ„äÓÕ2X³Ńj±Żš2ÆaŒÕĄļI5·|Į…“ „8Z–³¢ˆłf¹$Ąģ–5äNP 5|ĢŖ²ƒ¹ßS8Ė4æĆVc «-q˜Ä?¤6}Ī3–Ddʼd³ÅVƤČÄĢ›/ålĘōXˆrž”Ēe½|¤ŅNBW +¹°Ļ³“˜¤ģķŲ6±ņt¤O×n·”ÉÅsŲ¶ŽŲįĪēąŸķ€F“„¶Lßłrl—«„?Ü"ld6Ā:“BŸfRwŹ<>ź4Ž;įy­p»5źcƒō¼ß ė¾ąm½®y¾ū0I®Ū)‹Ŗ„Må±ĖÉ”Źß‚Yœ6ˆy#ŸI’°žbLķ6—Š5-hłfÜ •߯Ž<¬ēyÕē!N$¬'ĖĶēÕZ#ģz=ăؐ^ŽKA(ó0-ĪY^6_YāA*K&ʐ?‰A#2ÆÜ„źS_ā°öįŅLnŲ7ÜĆķ­ųZy‘ƒÉšćµXš/=Ž„j!§²}ėŽĒubųVųzl$’ĪÆ›Éb1ÄʃO°Ėwü•ŖøŚ14ƒyōy$C]Š_óY­¦Ņ<Ϛf=ææüi`ż’Āøś4ä]Ļn>Œ—Ł3Ēš|¦)Ų½’o’\»‘Ņ.³ž).8[7Žū;ŹæōšxĶ endstream endobj -1038 0 obj << +980 0 obj << /Type /Page -/Contents 1039 0 R -/Resources 1037 0 R +/Contents 981 0 R +/Resources 979 0 R /MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 973 0 R 974 0 R 975 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 1042 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1043 0 R 1034 0 R 1035 0 R 1036 0 R 1044 0 R ] +/Parent 832 0 R +/Annots [ 977 0 R 983 0 R 978 0 R ] +>> endobj +977 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [463.147 537.367 513.996 548.271] +/A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> +>> endobj +983 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.004 527.469 195.682 536.316] +/A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> +>> endobj +978 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.07 334.18 307.189 345.084] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) >> +>> endobj +982 0 obj << +/D [980 0 R /XYZ 89 770.89 null] +>> endobj +326 0 obj << +/D [980 0 R /XYZ 90 739.935 null] +>> endobj +330 0 obj << +/D [980 0 R /XYZ 90 689.23 null] +>> endobj +841 0 obj << +/D [980 0 R /XYZ 90 662.618 null] +>> endobj +334 0 obj << +/D [980 0 R /XYZ 90 662.618 null] +>> endobj +338 0 obj << +/D [980 0 R /XYZ 90 608.736 null] +>> endobj +733 0 obj << +/D [980 0 R /XYZ 90 580.067 null] +>> endobj +342 0 obj << +/D [980 0 R /XYZ 90 580.067 null] +>> endobj +902 0 obj << +/D [980 0 R /XYZ 107.713 490.398 null] +>> endobj +903 0 obj << +/D [980 0 R /XYZ 107.713 475.201 null] +>> endobj +614 0 obj << +/D [980 0 R /XYZ 107.713 460.003 null] +>> endobj +904 0 obj << +/D [980 0 R /XYZ 107.713 444.805 null] +>> endobj +905 0 obj << +/D [980 0 R /XYZ 107.713 429.607 null] +>> endobj +912 0 obj << +/D [980 0 R /XYZ 90 409.01 null] +>> endobj +346 0 obj << +/D [980 0 R /XYZ 90 394.774 null] +>> endobj +913 0 obj << +/D [980 0 R /XYZ 107.713 273.198 null] +>> endobj +914 0 obj << +/D [980 0 R /XYZ 107.713 258.001 null] +>> endobj +915 0 obj << +/D [980 0 R /XYZ 107.713 242.803 null] +>> endobj +916 0 obj << +/D [980 0 R /XYZ 107.713 227.605 null] +>> endobj +917 0 obj << +/D [980 0 R /XYZ 107.713 212.407 null] +>> endobj +918 0 obj << +/D [980 0 R /XYZ 107.713 197.21 null] +>> endobj +889 0 obj << +/D [980 0 R /XYZ 90 189.509 null] +>> endobj +350 0 obj << +/D [980 0 R /XYZ 90 175.273 null] +>> endobj +890 0 obj << +/D [980 0 R /XYZ 107.713 96.348 null] +>> endobj +979 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F14 726 0 R /F46 984 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +992 0 obj << +/Length 1605 +/Filter /FlateDecode +>> +stream +xŚÕX[oā8~ēWä1‘ÆćÜēBJ™-—…t„ŃĢ„Į”¬B†0—żõ{Ū!P“ķh±cžĪ=XyR°ŅoŻ­ßn Q<äŁÄV‚„āaűud] Ź'ÕAŗÖ&VĆ0¢i4OāGĶÄ*ZńŁŪ8”üiJ—4×tW…UlŹ5ˆ„Oū|hłAėļ–'bE/O°ä–­[Ÿ¾`eóŒ ĻU¾•«ÖŠI ųO”Yėhqµi×Pė:F›ŠC`Ī!z§£Ł–ŚõGŻł`ō§ęZjē~Š›ßuF½{æÄ%F]šį!ƵįU)ē.Lņ–›p»„ ž\dü¹K£"ĪR>ŠĀ$įOß4hŪņAœ2ھj@J˜Ä ttžĮmŚ@[·MœgלĆń”qżqīO§L0 /d"Ū5兆tå?„Z“$‹Ā=üe “z"yāĆhö0™,«ß›OJž§”ųĶX=Œ°^‘?Ńt`,דó*!¦Y!°kDR'įcB/@’ĻA®Iw<ŗō›9µ‘­;g7K?cLžvyĢ +é&ĻŲ=¾Ę‹Ė¼r±ēA‚+•®ė I—ū4„y˜HkŒ‹ģšŸXšēY®Y–z ĖڧŠńµÖi!ו8a+ģčrLmņPšź[@ó#IŻLÆĒk’ŠXŲ÷óĮ2łhƒÉ•`‰‹»r§@3,5Óķ&Ė‹Ÿ [œŌܟIź\ Ž4qÜ}Ü*BiʧŸ†^u=üĘ=’Z!{Uø V"y@fĢqśTńˆn·'sÄŗ|·)d¦y”ĮZÜi—RN¾ohT­¹Śø8¶K÷ß6Ēņ-‘7ōS"[ņ +eŹĢi­DŲ;*6ŹDgb°–š<§*9L­­cĢHŪ­¹ @iU 0Š<˜é1sīhž„ņń¼7ķĪ'eŅßx–?‚Ž•61‘azĒ6Õ«lŖ›­79ئ²”IžńmÉ=¼Fž—!†df·†°[dłūƒgŌCtD€a‹œČśÜwz,ć•\_b—GĶ5m [Rc£,½”-ņó5Hą~8ćć_0ķ5”#ŗOåčPU +o (¾ĀüBŅ”Ū_õ~Šæ š«pĆ{0‰ŸVÅ„ŗƒļ}ŗįĆlŠ}•ŖĆØbęnG/āRģ=Ś+ČtŹŃ=Ä«Ųtk…§ż2|³‰ļwļ±9&r½Š¾Ł†Ņhu:vyDRGÄ.·»¬¦Ų5ѳ¬„/§ƒZØĢ²ŽŅ¢ŲgYóšÄ¤čcr)[*nĢŚÆüIōaÓ~KłŌ6lµv>>ŸŃ¢Ŗø?c ĆO? «ÜāÖz&€uBl6ŖŠ`śf¾ĪA©‰` /ŒNuŅ‘,}……īŖĻ0Yš<Óɖƒ»ŁÉ{`ıŻJÜ×čĄøŅ‚Ś=š„o°Tƒ)Ū“IuAģżAlą§«0ltāŲ¶e8ź,.?˱%ŽrńČ8g’i&Ÿö{öj ”üX¹"ūś÷=ø³©óŲ`Pįś1N„śą…Š <ńnÖ,(ÓrJļŲŲ€ōƾą,ŅUŃę€%Ę-Õ ;”:›JŲ&Į‹“¬§B?󜶚mV!ży÷ō"›Š¹cJ£ ’U0ƒ–ī-ēžźp¦[6Ą'ž³‡Ļ*· +>1kšįļ|X ąĆŪ|˜šįé>ūd(ßijHHłæ³ć/ī.4HŠÆæšƒūæŪćŽ +endstream +endobj +991 0 obj << +/Type /Page +/Contents 992 0 R +/Resources 990 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 832 0 R +/Annots [ 985 0 R 986 0 R 987 0 R ] +>> endobj +985 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [108.167 306.217 206.279 317.121] +/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> +>> endobj +986 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [329.268 306.217 429.033 317.121] +/A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> +>> endobj +987 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.324 158.478 513.996 169.382] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> +>> endobj +993 0 obj << +/D [991 0 R /XYZ 89 770.89 null] +>> endobj +891 0 obj << +/D [991 0 R /XYZ 107.713 729.972 null] +>> endobj +892 0 obj << +/D [991 0 R /XYZ 107.713 714.345 null] +>> endobj +893 0 obj << +/D [991 0 R /XYZ 107.713 698.718 null] +>> endobj +894 0 obj << +/D [991 0 R /XYZ 107.713 683.091 null] +>> endobj +895 0 obj << +/D [991 0 R /XYZ 107.713 667.464 null] +>> endobj +896 0 obj << +/D [991 0 R /XYZ 107.713 651.838 null] +>> endobj +897 0 obj << +/D [991 0 R /XYZ 107.713 636.211 null] +>> endobj +898 0 obj << +/D [991 0 R /XYZ 107.713 620.584 null] +>> endobj +899 0 obj << +/D [991 0 R /XYZ 107.713 604.957 null] +>> endobj +900 0 obj << +/D [991 0 R /XYZ 107.713 589.33 null] +>> endobj +901 0 obj << +/D [991 0 R /XYZ 107.713 573.703 null] +>> endobj +615 0 obj << +/D [991 0 R /XYZ 90 565.144 null] +>> endobj +354 0 obj << +/D [991 0 R /XYZ 90 550.715 null] +>> endobj +906 0 obj << +/D [991 0 R /XYZ 107.713 468.875 null] +>> endobj +907 0 obj << +/D [991 0 R /XYZ 107.713 453.248 null] +>> endobj +908 0 obj << +/D [991 0 R /XYZ 107.713 437.621 null] +>> endobj +909 0 obj << +/D [991 0 R /XYZ 107.713 421.994 null] +>> endobj +910 0 obj << +/D [991 0 R /XYZ 107.713 406.367 null] +>> endobj +911 0 obj << +/D [991 0 R /XYZ 107.713 390.741 null] +>> endobj +619 0 obj << +/D [991 0 R /XYZ 90 381.24 null] +>> endobj +358 0 obj << +/D [991 0 R /XYZ 90 366.811 null] +>> endobj +919 0 obj << +/D [991 0 R /XYZ 107.713 256.333 null] +>> endobj +990 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +998 0 obj << +/Length 2435 +/Filter /FlateDecode +>> +stream +xŚ­]wŚøņ=æ‚GsNp-a÷- $Mošt ½={Ś=9ĀĮ·ž ¶i–żõwF#c ; i4͌ęSX½ĒžÕ»:9Ÿž¼»“ķ^h†¾ķ÷¦ó^hõ†>3=›õ¦qļ›įXżæ¦{ŽšĢóą# ½LRŃŲžeŒŠh•‰¼ęuRäˆz2žžü +±–NŒRCtXõ†Īƒ †ŹĄµ[:Ī©£ļÓēńÕÖQ“@¹Tx­tŸ”2U%”k(SÖŁŗćĖѤ;™‹ćNļ&£ńäš„BY½«„«ĮF-§¦cGRØĄE)ė)\“™ŲńlțŒyÆn(vū8 DB5|j„£‰ „ń5NŌxÆ÷rs9¦üń\fySØ’Ś‡JŅ7ƒėæc}†eėš 8ćõ…ķ +y±mWģŻdylż +ՒŖ^Æļ^,™œvÉT—EŠ…'ų6źėĪ_ų£zW„ĖÖʘŖŅœFL@8ڤ™īÄ#ŸŅ ė.]5yV§jŠUcc!ŽČ6f²q¶”†Č“'`F 3,Ÿd–cÜå„KUL +˜•4…›”>ļŲŖÄ‰"Óµn>•5·"ņsÅÓ¤V „„/ū£TŃŪ‘±nŚÓŪåBÄØo£-¦sĒ å{ Įź>ą,†SŖ»„gwKĻī>=ņ©¦'hÖā„Ę-šņ¤b9C+ŹD|`’Dж•~›µ›€+–Ī+‚ØO•’ٜPt¤ +>Oņ€rDķŲ¦”TЇĶó‚ń†÷0ÆŖ¤Į¦“ÖIäĆx 6±·d']¤ģXD»’īD“Żŗ’÷«ē¦JŚXĻGo“pdHŚ-rĻ.§ćÉ9žóerūB¾³”Źõ†Ķ++uH!Ūź`5Ń +WäØ!£'œČ‚£½Ćēšķ ŸVe®©ĢÆ”EÄņǁžn Q›·5ßtœķ§µ6)Gµl8rrjČ #¦4/ž®+6[ÓX­s`‘ĄčgécQ‚?g“ū“H°Ų’ōóØ¼ź{åĖ”.ÖÄ&y€äÆVg§Uń¼ƒ©”āē*)„q†”±,‹HT¹1ģ.ÕŪ•Æ®×5į&•¦Y†µ"‚ "n@Å /Ć _+äNvŲ-ōk›¦—̉ ćDŽņĶMdųP¾G0‰j•-Õ;ėŠW=nɃyäö·Ņę`Ģ‹š0øś®, 1ĢLzł¼žÓ¦¾™˜>}ų§s<°<ŲĒpAoj¬Ćøīķø$Uµ4…;Ė›aёų…0¦µ¤ØWŹ·© +gJĖ8+ZM ĆŅx„+ĢM +» q&ö !6÷˜®xófĻūIr}tĆk’1cRŚĢčÅ»Ua·źŚM²•j_Uc\æNĢÖ;õ†Č½÷Ła7€õŅ1<žķ”{¢×}Õ9²2<Ē[:»aP’z=zį¹ø¶˜÷ĀsCė²f`|OI\/ŗ-Fą˜Š\©yŒōY’‹mm*° V›®÷ŽB·›ƒĀ}YS{śüNēĶ?Žp§ ¤aœWļ0#».1Ž‚"ŃÖ“Ū—ņ/ ?ˆ²ž«ŸÄ’½ō: ›ś­ė;HˆZęGĒq±”(2„«HŃVAfŚoEĆi÷ß•ķ8Z”z”õnČżcÉćĘēw> endobj +988 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [128.635 715.84 246.453 725.768] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) >> +>> endobj +989 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.597 699.003 356.029 709.907] +/A << /S /GoTo /D (LIBUSE_suppBitrates) >> +>> endobj +994 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [331.363 653.375 419.851 664.279] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> +>> endobj +995 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [370.764 123.167 416.483 134.071] +/A << /S /GoTo /D (ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) >> +>> endobj +999 0 obj << +/D [997 0 R /XYZ 89 770.89 null] +>> endobj +636 0 obj << +/D [997 0 R /XYZ 107.713 729.972 null] +>> endobj +920 0 obj << +/D [997 0 R /XYZ 107.713 684.344 null] +>> endobj +921 0 obj << +/D [997 0 R /XYZ 107.713 600.897 null] +>> endobj +640 0 obj << +/D [997 0 R /XYZ 107.713 573.081 null] +>> endobj +922 0 obj << +/D [997 0 R /XYZ 107.713 499.638 null] +>> endobj +637 0 obj << +/D [997 0 R /XYZ 107.713 438.149 null] +>> endobj +648 0 obj << +/D [997 0 R /XYZ 107.713 392.52 null] +>> endobj +641 0 obj << +/D [997 0 R /XYZ 107.713 344.939 null] +>> endobj +639 0 obj << +/D [997 0 R /XYZ 107.713 249.538 null] +>> endobj +676 0 obj << +/D [997 0 R /XYZ 107.713 142.181 null] +>> endobj +996 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1002 0 obj << +/Length 2168 +/Filter /FlateDecode +>> +stream +xŚķYėsŪø’īæ‚ßJMM$ų3“:[Īł.ŽUKķ““Üh ‘²8”H…Śžļ»‹ųu:_rēNgś‰‹ÅXģć·K’÷3ޟż°8{såŗFdG‹1# ŪwcŸĢŠvF–ė3Sˆu’Æ—YŗyĢ“·Ä½J³„Ø»d“”#gl‚²ĘÜõMīŒ~Yüt6]œ}=sąDf8ņ?“CīėŻŁ§_˜’'ƒŁ<Rjgx.‡gfĢĻžvʔ¶¬Æµō“vf»Ģ3Bx”KŖO&£Ą7/¦/–‹»ÉĒłĶß’)µŃŪĄĶyŚĢƔ\½qß,E^틲YNä™õÓ>AŠ›uAœUBϦJb.9ęū09Žc.n` ’ķ!­U‚ķšĒ åČY™T°’ųļčį|ÓŻCŌ[ż¼Péē}ż€}L?RśuT?XųަŁ9 ‹Fń‹ M¬Dg.m~#÷”ŠŪ^0¾<`xK‹½$ŲsĢŸņµ¢z^—¾ÅܟĢå}‡ˆ1@HZŪG BhGœ?C§“ĖéŻr6½»¾½< =<°yŠBĻU)vÄ~˜ė‘¶Ą0Ѱ>ģ¼OŹ“ˆiB”˜`÷X‚rÓÜ"ėāL‡¢N‹œ$V#ŅrƒX ]Ž8N†<t“„ €§6@§7ŚF4Uw@éF€)ā ąÅ÷M6»ę$ŽS<]dŁIĄ®-Ż ¼m-į( –Ø· MĶ.¦Ä)“}RĖ „ęlز6Pń6-cQ‹å*+Ö_ŠĻč_›āB¢¶ĀF8Ēžv4|¼ŗz‹[E¦hźĀŚŅŅ0N6#8I4Z)Ą ¤ éE$‹åĶĢ[""8=cĆ:ʜެöĖņyś¤ķĶÅĢ9§ `Ļņ!­Ō}™}"«~ęr•T*^©č4”Čö÷$ŠüśżĒ‡¬żpżńżņęörz2‹<č[ĘmĶÓ{ø¶TjG0‚ ,ž[ķs ŽĒ:É+™!Ț`ōŽb§³Įš :‚mĮøQōāśč9”y½Ūgé:­z”sė/2ʘ8ėb·‡]aCÅ7«NœĘ€„ŹČŠĮٰóf6}oyzū*‰I¦w•æ Y‘„Œ"$p_AŻÖBżünK£*a]qVI5õxM›Š{†ŽĮ)#ŵ{'p”ćšmÅŗŽ +TŠįŲUÄK[«Ké^LĄz&—=0ā;£˜«'z&ˆ“’ĘIJłå‘yŃ_T¢…1Ē\Ö_‘· `śĀ:X.¬"—Ą¦S›U§Lg‘!¾Ćv ¶ēZ«Vd‚Xt°ę@ĘŚū!Ķ2¢¢2«–±Ā]O÷ØÖ¦L¾6§h%X_«=6«Č`?īyšG UAÜ·ł¬”]Øę ‚ĻŹŅ]ZėnZŽ}S’©v\PCtIź­.:2­‹ņKuŲĖ “ą‰tz}UćBæ>äE=ŌžPł˜ÜšW2JŪxžĆŻ2ŗ¾ķ1’eõC·÷ÓĒ6G„'ūČHE„CFwY|Āb€Ģžē~Ąš·ĆCO R08OÅ£…öš“ƒĢŚA¢ķ80$WŖł†pa™C:’*›8¢AÉJӇé’ś ,‚AŌ:[(“X‹½ œlz“(ŻF³9=ɶRޔݔhj€čöWĢ}ÉC£b@³é䏣Æ÷¢~-Ņ\k6??菹€Ze C:õ× 1xtu[vzy1Ĭ]śųąźłøB)p.¹Äóūą +ś-Ś×=Pņ]@rs›Ä賐āėW7m×N>AZ9°w˜RBžv 6š•^æ’!÷ƒĢ‡&ųŻ;ēÅ ’„jōG”|ņYŠ+BÜ›Ū4)E¹Ž¦k‘§Ł0Äv°)F”Bź7ę0M9mS“nʁ<֔›šņžzŁ3 Ńõ æŅ¬šrŖJ묉[¼śļõé< +ŗ2łŗŒW•Q Ź(p\€{ō\C*›°Ÿ,›ĄčŹ& T‘j„ž?N-]"¤Į«Õ=7ņŽTŽČė”xäiċ<ķ<т- Fŗ9q#ݜ 5“*r†V•{¤÷G‹Żo·XHłŠĀžÅC}ݰW¾Š››ž(…4Œdł‚§6Voug¬PA +zę +M”…^šŖ#R}~[ ŽN~…‚ń£¶ W]“÷2j +šU²U؀ŅX׋«ĆÕĻ‹ ń 8d¬­ļ솆Ž|Hķ·›o©'†Å}ŪĀĮGž®‡¹_(Cš¦Lˆ«ņPR MfiU'y¢–Aā9J%ńTO%jR¦ųū¬¢ej= XR©-…ś~ ³_HŠś ?–a 0v³=<ĄŠc Yļ{(ŲM†Vąź“omqęk+Ć$Ü՗Šā:ŗ> endobj +1003 0 obj << +/D [1001 0 R /XYZ 89 770.89 null] +>> endobj +968 0 obj << +/D [1001 0 R /XYZ 107.713 729.972 null] +>> endobj +969 0 obj << +/D [1001 0 R /XYZ 107.713 602.45 null] +>> endobj +970 0 obj << +/D [1001 0 R /XYZ 107.713 518.764 null] +>> endobj +1000 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1010 0 obj << +/Length 2375 +/Filter /FlateDecode +>> +stream +xڵYKoŪH¾ūWčHĆę›ę ĖrÖ[öJŚÉĄh“m‹‰THj’ū©źŖ¦(ZV’Y¬f?ėłUuuĖ<œĮ§³‹åه+×$vŗį`ł4HœA +;pÅ`™ >[ž;ücłūĄó[lŅ£WłZ GnąX—eŗŪØ¢‘M^øōlŗ<ūv&`„3š\Ł‘ ŅĶŁē?œAćæŪKāĮ‹^µų®ßõ`qöĻ3ē@4Æ#šp;ōÄ ‚o¹$I„Ņrd*¢ČjJüʖ*Ņ2S4ö’7+jå›ķ:Oó†z‹‹9-®ó”°ž ¹Ī‹g{8ņ×ÓL¦LEėS¹•k&Z>Ńw<śŽ5ŻLhGY¬_ ŪõZ[ĻŒ„°°Ÿ–¹Y©‚¬Ēk”E|Ø óŌ`ŅŌŁŹŖ9§ęĖ*OWŌÜ(YŌ½mD+£ŽÜeyÉŪPŻŖĖ]Įó²ČFė|“7*³[i}ŪsBöõPVYŃźŪū駑Ėü*`½-«†»Æ[Œ|qg|¹\œ/ÆÆ #Īūźvü€āäl{žd2Ū²®s°÷i±<7¶nī†^`Ų‹,‰ŗéįńPa-oĻiBįžļ†3®x”éח”3UYM‹O[@³ö3.é‡]Ņź}eõµ¦‰¦|Vą‚Š'5äp|¼xåv÷żßZ@UÕ=æż&{¾ kOĘ [ր̲ ®6 |›•ŌPHBėI{&īė†#=ŻpØ«ö[ݘšĢ²YÅm^· EśČ =¶}åv˱腮ŽEÕČÄĘx1±¹EŸ6¼h™l؅Š"66Œ“”‡ ½v7yIr ƒĮƒƒźÆł–·ŹŁõb _ą{ÖL ŻĄśŖ*­źQäGdr\žßŻfŪāBėŖ©)›A”–֍ĢLŒV8§Į0² +„²ŗK'²¾%Jš²§ŚU‹ƒ(Į|ģXkU<7+=Lk‰Į€Į Aݐ€QĀģŪµŌÖ²u'‰"Œh›Ą€¤Ļ“’Ķ®R4§wįāŻQƒr¾pI¹X‡ó%N ƍrģł¤>Œ6,?jń`ø•]0 +ŗ“$»šLšĮÜq m~­u„Ą¼_¼é$F JĒķ : -h‘jG 0rŽųŅj3I“Ā>“I‹Ęė’Ą†wS€ 3×µaCN†q:õ2#˜įˆļåGŁ?²2‚dQKHßtĄčCōœZ½D‡‰ó|7”eSVÆĆ0°0!x&ē±Īy:įjŲ ķŅ [PKuł7ŖØ¹é+®å&i€ńS„¾ķĄ`øė•†šą2‡+t5ÆŠ‡ÄGżT¢Ó°„ųR Gx|;ąA[żżŽ–¦<- 3ęŖńvD›GÕ==ĶyŸsiŃw” +€Œų8 +[šOo.Ļi„…—KįįA j^j²Uc!IÓ„d[•ę_ĒMihRŲÓgPģ¶ÅM‡,†Z`¼ćLˆģ=}C!ń²4į~Ž+˜j„ó$—øŖ_0­äŠuų8 ‘‚‹*õ„1ń¤ŅĘŌ8µŚQ½-l?\ła§Ŗ‰Äöݾ”Gč#c2M–÷‹]\ĶĒ·ÓELÆ8öķ(¦@Ÿķ6ŗjtžø‚q÷HO•ÜčR ŚŚA0)©Ū­é`TÆäM%“;–Øp­™ĒĀO;i$œĄö\’ŠWb ó×nĶFūC3 „c‹Š=“Ė× W}Ž£y~ä +U~Ļ7» ;ɘ! £N;[›­ ])ȳyژ(jŲ»~OØ^ä¼'Ļ[ż_¤sO# īIAœh„9Ī[dŻĻ”wųo9,Æļf'&Ū‰b0Z;+ŪŖl rƒ“‡QŪŗ½%¬å«Ŗ>Śl¶Æż W;)˜geŸ/Gy`:”õapš‘`F“9_Ą$pŁ…ģ%s1ŅØ§ Uޘ3›W@¦üGÅo5žM®onĘó!D×.®—óń0Ąi'ż€æD×_u# ö‚,RHm²2—OŁČVųJ6źŠ…ØŃ‡j"ė…ĆHøą:×ø.ü±ė×µ¦9ߓ@ L£^v%Ā.I„­’ęE­D8Fg›L¹kāH/¢åÆŅ{Œ×ØČtQęL8/¶;&ē [4 ĪuņŠm?Œ‹m`3.Ņ $ÜŚ‡“ėŽź™Ÿ<ęZßĪ€.¼.Ęŗļ¹īĘź[Ō0ž „Ŗu­¤×l“ĪågĢ2ęˆ4…żž?ĮōvŗDXŽ/1H”ŗ’p{wyŖ¾ż£©E$žu«P‘ųÖ%čbćUUX „Ž·>īźX ąÖ¾q™Ž`¤ż“«–8šĮŽ|]÷•€CÉĮĻĆ}sYšŠ¤®ęu¦0•”~Ėid¦5ü;gŽÉWÓ=u|­1OBhŅĀLNg]‰’¾ī[¾Ņ”MĒ5śÅsjr7[ŅQuó° HżDśó<؇Śō·ä¢.ä DZT^Cå³kJ¬eSźĀy’Ā]ŸÖ“wŲV@~€:[æ`…ų43Vŗ‡jMĆ\ÕćõÄUч¹ÄÜuĮĜām0Ąßq\ŅĄž…yx”·@NXŗ›®dńL NpĀtč6ąż®2Ceš‚¤>`QBļ°„ČUHļHu :Ó½Ó^‰å—‘—*oŚw;s>«f?ŲŁ HS•沑ͮ>,}ĢĻ1>ążd¤÷ņģd9æ¹ŗŃżO‹Ó©öd¾Aįģnvp1dæÅŪH’įzż¾Nęt‰ć(l½ĄŽ’„ÖG¶°ż!Ī9ÖÕ®čŌQoŲ{öą,(żCó® Ł‚Iu¤hł§ółŠƒšsˆŹtZ¤“uY«ż›ķPō?Ƴ˛éĆ~/¤ļ9q~‡³ēÄvąµW@©G«ģŠ-ϬٮƚÆF’[]Ā\°§G…[ĻĪp¢ūv‚Śü3EG‘pŖ0O÷(Ū_€#;tį— +1ž¶…Ļѝ&ag¦>Wę–ø*ĶÆ!µi_5zXéź9rģ$ AƒŠŽ@9-Ć=½ŌRXV ļ VÄvä`ڌm'šŽų=“jK·®»/uv;¼\·#dšĢhkV>¶æ;3öźÄžOB±NJū«æżäįc +endstream +endobj +1009 0 obj << +/Type /Page +/Contents 1010 0 R +/Resources 1008 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 1004 0 R +/Annots [ 1005 0 R 1006 0 R 1007 0 R ] +>> endobj +1005 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.003 380.925 292.021 391.829] +/A << /S /GoTo /D (structAACENC__InArgs) >> +>> endobj +1006 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.899 347.612 440.713 358.606] +/A << /S /GoTo /D (structAACENC__MetaData) >> +>> endobj +1007 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.095 259.426 501.244 270.33] +/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) >> +>> endobj +1011 0 obj << +/D [1009 0 R /XYZ 89 770.89 null] +>> endobj +971 0 obj << +/D [1009 0 R /XYZ 107.713 524.585 null] +>> endobj +972 0 obj << +/D [1009 0 R /XYZ 107.713 462.66 null] >> endobj 973 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 703.9 194.259 714.804] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> +/D [1009 0 R /XYZ 107.713 412.69 null] +>> endobj +612 0 obj << +/D [1009 0 R /XYZ 107.713 350.765 null] >> endobj 974 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [196.243 703.9 248.576 714.804] -/A << /S /GoTo /D (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) >> +/D [1009 0 R /XYZ 107.713 286.49 null] >> endobj 975 0 obj << +/D [1009 0 R /XYZ 107.713 245.923 null] +>> endobj +362 0 obj << +/D [1009 0 R /XYZ 90 228.525 null] +>> endobj +573 0 obj << +/D [1009 0 R /XYZ 90 202.933 null] +>> endobj +366 0 obj << +/D [1009 0 R /XYZ 90 202.933 null] +>> endobj +1008 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F46 984 0 R /F14 726 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1019 0 obj << +/Length 2076 +/Filter /FlateDecode +>> +stream +xŚĶŪrŪ¶ņŻ_ĮGj&ĀxgŽ”ÄnݦvŽŖs^’އ– ‰ŠTy‰ė|żŁÅ¼‰–ćN§3š!°Xģ} ˆ[;‹[?\¼[]üėŹq¬˜ÅX«­s+ óa­6Ög;db6w|n'ÉZęė»,½ŸyÜf{‚^„™¤ŃRne9‘ XŠ\Ē·]wöŪź§‹ĖÕÅ8rK(~ČB׷և‹ĻæqkšŸ,ĪÜ8²ÖĮņ¾™õėÅæ/ø––?)u3Ī=+t]ĘC|)ėäńķ¼R2Œ‰·GĮu˜šck."Ę}‡H|q°×ś<÷9· 4ĮūĖ›÷w·?æ!õ‹œ¾U³^ĖŖbĆ}{ĢćĮ‹ _ßüw&\ß^|¼žp÷ćāęĆĒ˧ķL€WҬ)„ā62ÉÜL.|Cø7™ĒœŁ\pbēūÄīr¹œ¹Ü¾]ķP9ū2Ē_±A_†ĀžĀ}>›ūž°×E^ՄFrŻutn?\.I/č×ó™”C•ūE¢i—³Ą·ßLJĻĮą”¹,ö}ŚhXA_öwĶöƒ¬ÖDEx=*‚Ē,Š=Ć÷ ēī„t‚3'Œ RškzSbłq«Ēß!NŃŌēä ˜zCy ĢēEĢĘ|:ģzB^ē‹ćgWMČĘĢ6ēÅđŪ-)wՔ„‘^§rO‚Ū¦>#BŠ ’"8=C” S"ų,Žz“|”‘śł?wb‡\ĄĄc®r›X›MZŠp“Ō‰Ź9•ؐ_ŽGų«}ZĶęnäŲŪ&_×)ę*¾m ‡$ͳG‚m‹’€™¤łŽĄš .›yČ#ū:'P²Ł¤Łz/O¹9ö:Ńė÷z¹©äfÄŌ H‡F™^¶aŹ—ķ.pvM™4±,&*˜ēF`EΐgŹŻ§÷æ€~ įsljFJg>¤YF#„¬•².S9ƒså+v„,oĖā@#‰ą?kYęIF[ZŹ@eęp»Łāv<©¬ÉėTc’-†šĪY›ĘK²¬@ąC„yvރY¢ 1/ˆ‡Ę¬J*č¶LP³ē~䛈AØöa’„5†ˆNš »ĻĪÓ~쑪°r¢`=¤õžVK¹iÖŹb®ŅoZ”4§åuq8&eZš|]­Ņ®’ąA„¤’¾?^Īš^Ā(i˜É|WļGQ37‹  ē£ęz‹„|r¾¢ŹIÖči1\÷L ¬JĒLV4IT»²k2×Ė©^ł&ĖB¶ż{S™ÅÜXg„LsČDpÖ·6'|ŒYtMīµ@Éń˜„hzEEK—v,Ÿˆ˜RžŃČŖ–›WŲj±ļ„:øa ó ŠJųM裂~†a5ÄĒŹŪT{Šo˜ė¤§ ÕܛmeŗŪÉR³ųšj╬kM!čH÷ÜÖØ]7©‹“Ūž°Ōȑ"Pį‹ß¹€4sāŅ i¬ėZŽČ,y¤a–ę*.`˜”’Ū&Ėō²¶ƒņ"Lö2לöy@øÄę3×ōr-ŒV8Õ4īÓŗŖK™¦jÆ*ƒäPģ™Ėnž—ʵNčšP:JĮÕŪ·ys€ł»ĒZV£ˆ°–|ϾjJŗ<JĻŠdJčSt8”G9zQ%|«tY 5ężćˆ©NćĪÅ*ö ĪńīņöjĮŻāL¼;Ļ×7 ØJ¢Be©<ė5tŹ‚«²š`Ą±¤JŸMEKŗdį¢!T!‚5p;"ŃB”˜Āv(-®÷I¾“(*µxAWRž,§E†w9ˆ:%qtoś”®Ü pKn†qwRįL—GB@ńoĮ½¢­³īågµo3Éō'8SuCeZV”–÷‘:µ„йdÓ|#”m’—ņ“/pgLTØ³Ā†3P`ƒŲ+ š°4ØwJŻ@O8£u)YgŸhŌÅČžōég»1~·7ߘ{s’kŒÄ8²ĄģŌ®ī…ĪÉr=fPZ‡RÜüēćĒ×®®ī,q@­ŽTMp½niŲ‚ JŚø A0f›¢ŠŽe4¼¢o®ÜSk†“±NÉ×®ī[qšP¦t– ¤|Ų™le ²Šø«rķ ‡ötnJÅtNµÉŅV·ĪĆ͉# źdŪ> endobj +1012 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [253.88 703.9 369.476 714.804] -/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> +/Rect [133.245 462.905 275.8 473.809] +/A << /S /GoTo /D (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) >> >> endobj 1013 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 652.74 194.259 663.644] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> +/Rect [264.962 305.639 347.353 316.633] +/A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj 1014 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.757 652.74 248.206 663.644] -/A << /S /GoTo /D (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) >> +/Rect [276.588 263.646 358.979 274.64] +/A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj 1015 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [252.021 652.74 367.617 663.644] -/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> +/Rect [222.761 234.834 297.779 245.828] +/A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj 1016 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 613.909 194.259 624.439] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> ->> endobj -1017 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [201.106 613.909 261.738 624.439] -/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> ->> endobj -1018 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [301.786 613.909 417.382 624.439] -/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> ->> endobj -1019 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 601.58 196.301 612.484] -/A << /S /GoTo /D (structAACENC__BufDesc) >> +/Rect [219.174 220.428 300.838 231.332] +/A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj 1020 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [273.953 601.58 356.344 612.484] -/A << /S /GoTo /D (structAACENC__BufDesc) >> +/D [1018 0 R /XYZ 89 770.89 null] +>> endobj +555 0 obj << +/D [1018 0 R /XYZ 90 693.046 null] +>> endobj +370 0 obj << +/D [1018 0 R /XYZ 90 679.166 null] +>> endobj +976 0 obj << +/D [1018 0 R /XYZ 90 96.348 null] +>> endobj +1017 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F46 984 0 R /F14 726 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1028 0 obj << +/Length 1528 +/Filter /FlateDecode +>> +stream +xŚķXIsŪ6¾ėWšHĪX4\ŽŠ-§J½UR{I2Š„lN)Rį·żõ}Ųø™rœ™tŚCO‡·æļ=2ŽĻŽmgēW„”zÄ3¶{#D†ļa›llć£éøÖēķĆqBS +—ÄīUš1kN(2/‹ø9°¼Žź“Č9él¹}™a DģØoū5āĆģćgd$°’Į@¶Ƴ :.qą736³_fčUÕ|śD*įŪŲvmǚc„¹XX”šĖŪ‹‡åzm9ȼ[K£(^ęń{V_§»U¾·5 yņ QdĶ)ܾ^½{XŻ^Żq ĪÆ°ŪKĄņ“éŸr$•ėõ•ƒ•£iR‚Ht#č„3Š‘Ó#š“Š± `¾$ ¤ŚĄ¾(ŅćŅĀ]ŃØ3–ĒEĀJł‘„»2*’”;‹ ³I³ÄEĘū¶GhŃL1“?)wŌW Są)·Z'‰ÆŖ.›ønJ•Ļiż4!U2(«VמņB‘6ą#GĶ‘†x€Ś¾Æ„ąź(Ł‘\Éxū”VœŒšū&5Ų¹fÉź2e8)¢(ŗf±—õ“=є‡œF›RAŃÜ!޹Źåi”$iĒI–|OD'\xČ£L’M5«ĪZ›zlu€~$œoR3‰ju¼Dł]nr#ų–0B\mŹR8“Ÿ¶ń“ŠÕuš?VņėYą9'Ś©›%Ē”œüĻ=0u+9‚w…M’&U·€¹ä EÜ$i10FÕŪęČā”ŪsBb^(«äWšĖß8Ŗ˜\I[ˆ¹ŽøėžåĒ=_G`.d&«…xlÖe”WĒ¢¬%M§!0)å/‹7Ķo•z}gqDڜ_/,Œ±¹½™ +PO2”ž’,’#”ć»/ĀĒ7eųųJ…/eūę.ĶUGä·Ł,<3Ŗäo„=©RÅtµ¹;_-/$ģŗ”7wä ¬›ūåū¹;™gÉų +š^Q&l>Õ0xóÉuŁėIB7§vŗėĘ$Ɯ¦’ėXæ†tƒ)vu”¶ å(Īā§±ē!4JĪØ Ŗ'å[ķŽ +I›C׿ßnFķFąI Tb›œģÅ#X‡»7[ņ²aģŸŽ ńšŪŚĶČ:-< ÖjŁó]”† SZ$ķ^gl—Ö?ŲüńŸjc;ˆ|ļj`üb +endstream +endobj +1027 0 obj << +/Type /Page +/Contents 1028 0 R +/Resources 1026 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 1004 0 R +/Annots [ 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R ] >> endobj 1021 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [438.978 601.58 513.996 612.484] -/A << /S /GoTo /D (structAACENC__InArgs) >> +/Rect [175.807 377.254 263.737 388.123] +/A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj 1022 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [148.042 589.625 229.705 600.529] -/A << /S /GoTo /D (structAACENC__OutArgs) >> +/Rect [234.747 220.956 332.859 231.86] +/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj 1023 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 550.793 194.259 561.324] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> +/Rect [418.694 209.001 500.736 219.905] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj 1024 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.337 550.793 245.689 561.324] -/A << /S /GoTo /D (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) >> +/Rect [258.786 149.271 340.827 160.051] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj 1025 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [280.194 550.793 395.79 561.324] -/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> ->> endobj -1026 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [463.147 550.793 513.996 561.324] -/A << /S /GoTo /D (structAACENC__InfoStruct) >> ->> endobj -1042 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 538.465 156.301 549.369] -/A << /S /GoTo /D (structAACENC__InfoStruct) >> ->> endobj -1027 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 499.633 194.259 510.164] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> ->> endobj -1028 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [195.234 499.633 286.711 510.164] -/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> +/Rect [308.429 105.442 390.471 134.508] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj 1029 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [315.004 499.633 430.6 510.164] -/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> +/D [1027 0 R /XYZ 89 770.89 null] +>> endobj +374 0 obj << +/D [1027 0 R /XYZ 90 739.935 null] +>> endobj +557 0 obj << +/D [1027 0 R /XYZ 90 572.871 null] +>> endobj +378 0 obj << +/D [1027 0 R /XYZ 90 558.11 null] +>> endobj +618 0 obj << +/D [1027 0 R /XYZ 90 309.023 null] +>> endobj +382 0 obj << +/D [1027 0 R /XYZ 90 294.261 null] +>> endobj +553 0 obj << +/D [1027 0 R /XYZ 90 96.348 null] +>> endobj +1026 0 obj << +/Font << /F22 400 0 R /F14 726 0 R /F46 984 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1036 0 obj << +/Length 1949 +/Filter /FlateDecode +>> +stream +xŚĶYIsŪ6¾ėWšHĪT(\:¹(ŽœŗMlWVzI2Š‚-v(Ņå’„æ¾7Ń““Īdz"oĆ{ļū aėŽĀÖėÅĖķāēsB¬E>ń­ķa+š]Ĉkm÷Ö{;@®³$ Ūqœš<¹ĶŅćaŌģyšqõ¶įw¼tÜŠ†Ub*¤„Ł”9·æ-ÖŪÅß 4bĖ•X€ʬäøx’[{˜’ĶˆF”õY®:Z”šĢ¬›Å [_žŻ®7‡būj–E‘pf'Ş—·7¼¾v\šÆŒĪ’Ā¶˜agÉ`YRäU­&]]¾z³¾ķD^½Zo„s?Ÿ{~Ļ" ź[K×EcŹØĆŖÕęųĢžIķųįSDBNŹ Z­ˆjĻ…k'šģÕfõvB«ė…¾š œ™ŅC=„½)=ļ..·r™‡˜ĖĢśOqÖš ©Āī†f„ĻՋhoђĀAQL­%ńõ"µ¢Æ (rGUšß›œļ!×ĪŌ€ėʁō×0„š ”Ō/ŻłDG}{H+Xėśö]“'uZäjgYį@j~–_„“ū¦Œ»EÅ]»X½tŹaK«\+Øx’ +!|Æ&Ņ\¦½Ź÷ņ^'žęõĀz/ækæŌ©F¤=Õ6ÓĮ~¤t­ć䠄J­ĖÖÕ^‚É8@ÅaūŲČ…·WĻŹqm®ē>§õA½Åś#Bk½“'%ą;Ų@” Vz*ĶAQgjōID1ĪŅ}Üm’q "»>h™§Ńķv6zMē÷ÜXŸšPzłö^„IŪ󽚊sõģŸK~ŖIłņm§åTé=lā{pÕóČ­)Nź&Ök'Dūā”,s f!žµš‘”€§ńGU³«ųß Ļė™TQmz‡j¢1™źź„Š\§Ž«’aT¤KŒ¢:”ˆ²@Ń6>•ĢżŻ”a£ Q€#p%D˜ŃÓž62 ßU<Ļ4‰•*ć6‡žŖ÷œwĘĒL[*K—!LhÆĪEźXŪ!¬‡R\ź¹3ķ‰×¢* n7œĻŻóŖ|Ī#mrÉ5įĒ\vć —Śņė92jŖrøēUR¦&Éžokßéš0G=†B “tĆė¦^äečšD r™ÉPM >ĀĘEĆšĄą«ß2@¤ŗI^UC{e÷ć‚/.’t\Źģ՛‹W·ŠE€¦Š'żEļ.oŽ]_;ń±½]æźĀ·Ž®7§Ė +„ČóĆaW(;»ŗ<æx=rėN–|š5„Ŗ¦ń ŠłŌ•OĻøbUĮ<«ņ=Ż«®øŠåSC¤H0Ēž\Æx8B€u•ĄtŠķ`D(mÉĪsųUˆ|<ā="„KŹ0ņ#wÅGČš—0l ŚÓŪbßd¼šR—„Ž÷­cüå :^γjŹ‚0ž¢[Äs”¼!ŻŅg#p„­éŖŽcgæE×;ša>aYŗVĄ¦É hčŚG~,ŹÆā­(Õ¤Š$žm?”Öß½Uq¹^=  L;– >ķy^Ō‚k‰ĮNė“&÷7ŖQĒÕŠ†}ŻKžęiżĆ'pgM doT…Ōdś\GįGC1™Ø…9,ö‘GÜ?’C qĻäÉ$Kųøhć·¶šR4īü ĢV† šjWYs.@ÅQ[a7‚‚ß}°õØEM£yóšP”µ±<ĶMś§ÕL2ü2lłKBPąŽ˜ĒcȀæą_TÜŗŅ‘fźŅ‘=ŗŠ +ÕõC¼8ÄąvšÅ»Œ?īč`Qä…ѼYŠiĄ- ¬č@ʓZŻ9Z«ōÅ)鯑J.@łŽōb—6u_é]”üĪ$Śēb}a®_z‡/›||ÆocqÉõm§ØŖT9*tŪCž®ąÄdØ9Ó¤8īŅ\0ś™ōQx'”ńēN¼µ Ēčšsģ“Våń|õ+A’I7Ńŗo^n¾KļwŖõ“Śė›é­k*ę-ÆcømĘ?N¹Lń/ńń!SÕJN#‚¼.³–ü5ÉŠ&ü°ŠB\x%ģ))A’P“āƒW],”•1Sč²gŖ”zé:)1÷o¢o¾0—ŁT¶¾]ˆ‹­œ—-žCĄ @LÅc”œ1 +(’°Ń[b®€}·;Ż+!óLĢ ŁaFüźQ”­Ėęø3½Öš¤ÄH™DȽFŹm +£›ÖIkŖ1$ķÓ;Ų;^ŖČ +6"ćłµ:#qųĮ3įhŒā/é±9ŖA>į÷ ē©T`½n4 K\M‚­9Į–kf鮌m|fOƒŲ–›3Ÿöģw•`„^`WkõÖ:&Ę1ń.ĻĪrź…šĆĀ“Į>YRŽ!ŗš.NH<Ū˜Č €„{¶g[K³ć / ƒĄÄ/ʳ}„Éł»[ĪovåŁAĖrū·2 +Ķ¢„Z/^Lƒ\ó¢¶TBŃLDfĮ%°-›@’&:0ŃK˜Večē`bœōšIÖXŠ‹ö©X"ŪJ!E£ŸŻ4“‚¶®³®(źPOŅo * īØĢüHž~¤š;ž³%3įīū’µü ‚Rƒv +endstream +endobj +1035 0 obj << +/Type /Page +/Contents 1036 0 R +/Resources 1034 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 1004 0 R +/Annots [ 1030 0 R 1031 0 R 1032 0 R 1033 0 R ] >> endobj 1030 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 487.305 195.952 498.209] +/Rect [377.026 672.89 459.068 683.794] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj 1031 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.843 448.473 233.973 459.004] -/A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> +/Rect [135.768 637.025 203.035 647.929] +/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj 1032 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [262.614 448.473 378.21 459.004] -/A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> +/Rect [236.659 580.716 318.7 591.496] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj 1033 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [463.147 448.473 513.996 459.004] +/Rect [319.676 565.568 401.718 576.562] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj +1037 0 obj << +/D [1035 0 R /XYZ 89 770.89 null] +>> endobj +386 0 obj << +/D [1035 0 R /XYZ 90 739.935 null] +>> endobj +551 0 obj << +/D [1035 0 R /XYZ 90 491.223 null] +>> endobj +390 0 obj << +/D [1035 0 R /XYZ 90 477.065 null] +>> endobj +1034 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R /F14 726 0 R /F11 673 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1040 0 obj << +/Length 276 +/Filter /FlateDecode +>> +stream +xŚ•MkĀ@†ļū+ęø f;3›Ż$ĒT£U4”i(”TDü(‚“(żū]דōŅÓĄĖ;3Ā Ä}#īśĢé̱ƒf BāH[&h–ŠJćŌ“1™&kżRHū›ķJElQö‹Ónµ?Ī›Ćž\E#Žł&…s6щ±°Ų‰vаōłP›,…ĻŠŚAĢĘĻ-<‰Gßhxƒh®‰I“3°Ļ¾½2ŪšžgŚČ"Ź> endobj +1041 0 obj << +/D [1039 0 R /XYZ 89 770.89 null] +>> endobj +1038 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1105 0 obj << +/Length 702 +/Filter /FlateDecode +>> +stream +xŚĶ—M›0†ļł>‚ŌPbGqKLdœVÕŖBŪŻķ‡Tķ”§žüšB¶!г³aQB”?yglæƒŃ7„Q:Ć'ļ+5{»v]ä.œ`¤¾¢#?š¼šŗG7¼ųmVļž‚t„‡B'ō]æ +ĄhN±CHżó(²؊™ˆĖh­˜\Ł[{)˜¬r ¢ć\Šę„čųer{{÷šxWžüń„ +u¾æiVƈ _ՒÕ™ĪŠĶÜ„Ųņp‹Fē:“óCÄ<Ė"iūŌśT®ø’‘M±#r ‰lJ­¼zT]„ą"74CXٵ"‘Ų¶>ņDm¦ŖĪ‹Ōć Ū‰ŒĖ5϶O7żE8vŠŌÆÓŪlS†yĒżÓĘaWtM‡‹:V&ĻšąŠ¶ū‚ĒĆŹM)V`ˆ6ęÜźŚbĒX¼¹Ābc|āh_?B ńÉņ÷fĒĻé;S³?Ļ^÷ +endstream +endobj +1104 0 obj << +/Type /Page +/Contents 1105 0 R +/Resources 1103 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 1107 0 R +/Annots [ 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 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 ] +>> endobj +1042 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.584 608.529 175.539 618.716] +/A << /S /GoTo /D (page.30) >> +>> endobj 1043 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 436.145 150.413 447.048] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> ->> endobj -1034 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 397.313 194.259 407.844] -/A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> ->> endobj -1035 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.757 397.313 270.333 407.844] -/A << /S /GoTo /D (aacenc__lib_8h_a28cbc417258c73ad55d613526df8fad5) >> ->> endobj -1036 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [463.147 144.977 513.996 155.881] -/A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> +/Rect [163.584 584.593 175.539 594.78] +/A << /S /GoTo /D (page.32) >> >> endobj 1044 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 135.079 195.682 143.926] -/A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> +/Rect [163.584 560.658 175.539 570.844] +/A << /S /GoTo /D (page.29) >> >> endobj -1040 0 obj << -/D [1038 0 R /XYZ 89 770.89 null] +1045 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.584 536.722 175.539 546.909] +/A << /S /GoTo /D (page.30) >> >> endobj -1041 0 obj << -/D [1038 0 R /XYZ 90 723.025 null] ->> endobj -334 0 obj << -/D [1038 0 R /XYZ 90 359.05 null] ->> endobj -338 0 obj << -/D [1038 0 R /XYZ 90 297.884 null] ->> endobj -923 0 obj << -/D [1038 0 R /XYZ 90 271.193 null] ->> endobj -342 0 obj << -/D [1038 0 R /XYZ 90 271.193 null] ->> endobj -346 0 obj << -/D [1038 0 R /XYZ 90 216.503 null] ->> endobj -784 0 obj << -/D [1038 0 R /XYZ 90 187.756 null] ->> endobj -350 0 obj << -/D [1038 0 R /XYZ 90 187.756 null] ->> endobj -982 0 obj << -/D [1038 0 R /XYZ 107.713 96.348 null] ->> endobj -1037 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R /F44 980 0 R /F46 1045 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1050 0 obj << -/Length 1551 -/Filter /FlateDecode ->> -stream -xŚ­X]s£6}÷Æą¬ - 0ōĶIHÖ[ĒN1éL›īxˆ‘mf0ø|lŚżõ½ś'ĘŽŁ}ˆƒ$${ļѹW`m£aķap~¹'DóēG ך‡µ‘c"›˜Zk/ŗ‹LcHl¬Gъe«eš¼ÖŃVöŽ')“O[³Ā0]Žā].%¶N©ń%ü<šĆĮ?vĚ)v°GhDmmµ¼|ĮZ żŸ5ŒØējoā­f -’Sm1ų}€Z|ŒŚrŽP›&F[ڈ@߈H蓣r<»L§‡õēņĪDcƶõ’Œ“fMp=^äš ‰„ĘŁ*IÓØųOŚGU$ŸŖ\žU^`»WĒ,–­$kĒ“Ŗ¬ -ķŠÉ®3†Ķ¶Cs„œ#yŌś&uõUžUQ’•²U&ߘxéłZv±hµ•OŃjÅJõb%2†;zøMTg’A˜vQ•ä™\£ČŸ) -ML¾]½ėCn€6“=dćņl[^ŃĀ-œt¢Cź!‡šŚŠrmŃVEĶb KV+ƏEXożŁķņ6 ¦÷SŃ~XØu=†5˜U™ )·ŠŁ*›sēy*cL£M)€ņ% ^QFL„C(?r¬ˆV‡ˆž–T[9Tm™Š"—”b£ō(xh/āUC0Ÿ…oͧĖEhx˜jš¦ś"ˆ‰TßGąBVɈ†Jn-ƒĆyY&ÆB(”WHōnXÕ@ī•čŃk^WĢĀŚ£ +³üB‰£'†©[’(M¾©ex÷¾Č9)€D60eRń^[€ā£QZę²ē÷WŖ77L[’ŹXńV$U3¼ej„²Š*5°.ņģd|öæü59ņ¶e -š ėš#ˇ[?=²]ZbäyŽączr¢<„ČWyńkgź™SOLD`gaū@BGŃw2›„ĖŁ|ę÷§Y­°Ž)”Ļr„;U‘l6 “Nx.å±nGN±=ļ'żŗļ H§ø9j%öQš~pŲvy\§¬lOœ7²©‹k0ĖŻz1/”ąséļ×SÓ¤Čqi>`%«®Ę Z P‰ś•KßAķ÷¼:µCīÜI`§†„Įx¶xšÅÄśģ ŠĖ;„Ŗˆ²rŸŹ6^Y‰„XœLŒ#“VdŹ 6Ø]Ļ#š”hKn ²Ūż½ōŚ`ńäųQ,8;šp¤ØT Õ%²›¬”NČV›˜æ;6 -I/ÉĘÓiŸ5Ž\c÷œŠ“  ;īQ‘Éq¤}YŠGęAO¤—2 +мM†1+ÆFŠlĒüQa|ļćło}Žu€xi¼;Ėß°ö{–±˜×5@¾qzHģ$cżįW‹Ÿ?™.ČĖtr·ü4žŻMūµźź¶āż)Źāę³Ź²©ß›ź}]gMEĮĆŠŖŠ?BQŁP›‡š+ē3p*¾tH%€sd~ōēźŚĀYd5,:oĀÕÖ l×j  ĶWŃžZ€†{ŪEˆrÉsŸg‹ē§Fż»å“š0†»ŹIń0Āfėü'®GŌqøFH—&i5ŹČjåkHrE -!uĢQƒó¶›OB±% -¦$¾ģW¹lƎ]t(œÓl>ĄŃ*BŪ-'ńŠ$(—ķZپ–6rGm"ģˆ¤½¢½X’jµGoź^Ü×#¶HėZ˜÷óŃņõ{}>] –øhtøć‡µõwµÅρ­vź…Ż|¬ø¼e!2rŹuü¹į'£W[£üĶļük BöZĮ ·ģ(w·OŌģĆljWŌūŖÉ5ƍ\+›źL^ŸölÕ¾s5¹$¶sQjģœß÷«‹‡nÓ¹ŸÅŻĀNŌŹź‚Ć8¾ÓÆ~.”K°Žw~ōū,¾0 -endstream -endobj -1049 0 obj << -/Type /Page -/Contents 1050 0 R -/Resources 1048 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 1047 0 R ] +1046 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.584 512.786 175.539 522.973] +/A << /S /GoTo /D (page.30) >> >> endobj 1047 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [179.07 571.756 307.189 582.66] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) >> ->> endobj -1051 0 obj << -/D [1049 0 R /XYZ 89 770.89 null] ->> endobj -983 0 obj << -/D [1049 0 R /XYZ 107.713 729.972 null] ->> endobj -646 0 obj << -/D [1049 0 R /XYZ 107.713 712.069 null] ->> endobj -984 0 obj << -/D [1049 0 R /XYZ 107.713 694.167 null] ->> endobj -985 0 obj << -/D [1049 0 R /XYZ 107.713 676.264 null] ->> endobj -992 0 obj << -/D [1049 0 R /XYZ 90 652.219 null] ->> endobj -354 0 obj << -/D [1049 0 R /XYZ 90 633.234 null] ->> endobj -993 0 obj << -/D [1049 0 R /XYZ 107.713 507.328 null] ->> endobj -994 0 obj << -/D [1049 0 R /XYZ 107.713 489.425 null] ->> endobj -995 0 obj << -/D [1049 0 R /XYZ 107.713 471.522 null] ->> endobj -996 0 obj << -/D [1049 0 R /XYZ 107.713 453.62 null] ->> endobj -997 0 obj << -/D [1049 0 R /XYZ 107.713 435.717 null] ->> endobj -998 0 obj << -/D [1049 0 R /XYZ 107.713 417.814 null] ->> endobj -924 0 obj << -/D [1049 0 R /XYZ 90 406.666 null] ->> endobj -358 0 obj << -/D [1049 0 R /XYZ 90 387.681 null] ->> endobj -925 0 obj << -/D [1049 0 R /XYZ 107.713 304.425 null] ->> endobj -926 0 obj << -/D [1049 0 R /XYZ 107.713 286.523 null] ->> endobj -927 0 obj << -/D [1049 0 R /XYZ 107.713 268.62 null] ->> endobj -928 0 obj << -/D [1049 0 R /XYZ 107.713 250.717 null] ->> endobj -929 0 obj << -/D [1049 0 R /XYZ 107.713 232.815 null] ->> endobj -930 0 obj << -/D [1049 0 R /XYZ 107.713 214.912 null] ->> endobj -931 0 obj << -/D [1049 0 R /XYZ 107.713 197.009 null] ->> endobj -932 0 obj << -/D [1049 0 R /XYZ 107.713 179.107 null] ->> endobj -933 0 obj << -/D [1049 0 R /XYZ 107.713 161.204 null] ->> endobj -934 0 obj << -/D [1049 0 R /XYZ 107.713 143.301 null] ->> endobj -935 0 obj << -/D [1049 0 R /XYZ 107.713 125.399 null] ->> endobj -936 0 obj << -/D [1049 0 R /XYZ 107.713 107.496 null] ->> endobj -647 0 obj << -/D [1049 0 R /XYZ 90 96.348 null] +/Rect [163.584 488.851 175.539 499.037] +/A << /S /GoTo /D (page.30) >> >> endobj 1048 0 obj << -/Font << /F22 424 0 R /F46 1045 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.584 464.915 175.539 475.102] +/A << /S /GoTo /D (page.30) >> >> endobj -1060 0 obj << -/Length 1858 -/Filter /FlateDecode ->> -stream -xŚÕYYoŪ:~÷ÆŠ£ Ō,QKŽ’XMӉ“Lģb0h‹@‘čDS[ņHr{óļļį¢Õ±³ĢC"’"泟#cėŽĀÖŁčd1śų‰R+@K]k±“ly.Aœk‘XßlęŒ,¾XŒˆp‡Ōź§t%Ęʱ=ĶćķZdUT„y&·ŽĀÅčæ#;±E9ī!q+^¾żĄVė_,ŒXą[æÕ®µåPĻ•5żs„B£0õØį#‚rĘ‚1¶E¶]kHĒĒcĪķÓšņōv.ʬLnjŪĒć€Ūz~;½9½½¾3l_}:æ%pøunĆք:Č!L_6Ud8ŽźŃi¾Ž¢,%ējįŗČæcLW¢DJ5/F& ōņ‚@Ó¾(¢*/ŽzG[ŽŪ!A ¢Ö„ųsøv;\ƒ€k*¹ę’k9W\_^]†Cp]¾‰ĖM_ę™2ÓC2©ĄaŸ¾ 6×óK½įfz% 1ßļŲ”QzYEYÉa¬õq•½ėÅłŁēÅAńaģ\„÷Õ3’4g߄nöu~~ś*QR ·±él[¦ń«diĪæIļ -ķ „é#×wž€ų"iźĆo’ęü: O?Äę9ČńĶ7BÄČŚĀu:šį±6ųš¶Ö |õįĆĘęM/žÅ†Ź’{0–ĶLÖžŖ'ˆćķŌ'ē‹],ģ"1ģÖõÄbģąJʚsŚØrr—‚*YWJ<#ł¢u65­—ײ7ŅčQO•r8gŗZ‹āŹlSBŁćüYŗ{A_UX y$„“»1įŪŠłFÄ„/+bNOnŽŒæh¾ū„£üX -°…¤ShķaŅ ·›M^TµY²åšr]„š¦ U”®Źgś»q?0†ą2„ [%hUHŪ*µœ3nÆĮ$«Ųwz¼×Ą\ķ°¤KéāK°ō¬ŅK?Så”°Ię°r×^įv=k¢z.y®Ū7ygyōvÕā#™?™dC6Š•ģ-ó–]ŽÆ»›ī²žDqœ‰ź˜Kdƒr ¢ū,u×JÕn‚±V•ź‘Ō5’’TĄKŅLoĢņLģ‹cӏ*u3¼§ā’ ß©†ˆa"ķ\ÆHżšQōS‚„žjQ`ŻLÉēr»ZéĆQŻL©R+·(D)Š_c -ūÓ6żōyÖSoY}0°zŖŅz®iŗ»ėµĻšĄ­¹Ś˜+~É! -C½\/ļ(|“®kł+/VrŚ«ńņMklŚ]Ō$NV®SõéņQ`7Ģg×įK2!āÜ“˜Œųu¦’ĆD}[•£2‚Ü­]f&CpmX'µKæRĻ]xŒņū˜`¤o2*Z1ūcc2„`Źė1ķ¬»ķ˜Rš­zģ“묳ßqH;īŠw;ū}Ÿ6ć@Ņę»rØ·÷³Ö“…ģP˜£€ŅZmąUOMU­’j"6že•®6ØłöAkļ`vü—"Ӌ͇j_5˜Ī’C½u9Ž}9ļ«„ćG;µR§4čzb[EŅ#~IS€> +>> endobj +1050 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.584 417.044 175.539 427.23] +/A << /S /GoTo /D (page.32) >> +>> endobj +1051 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.584 393.108 175.539 403.295] +/A << /S /GoTo /D (page.29) >> >> endobj 1052 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [108.167 497.475 206.279 508.379] -/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> +/Rect [163.584 369.172 175.539 379.359] +/A << /S /GoTo /D (page.29) >> >> endobj 1053 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [329.268 497.475 429.033 508.379] -/A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> +/Rect [163.584 345.237 175.539 355.423] +/A << /S /GoTo /D (page.30) >> >> endobj 1054 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [413.324 347.6 513.996 358.504] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> +/Rect [163.584 321.301 175.539 331.488] +/A << /S /GoTo /D (page.31) >> >> endobj 1055 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [128.635 252.507 246.453 262.435] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) >> +/Rect [163.584 297.365 175.539 307.552] +/A << /S /GoTo /D (page.29) >> >> endobj 1056 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [279.597 235.448 356.029 246.352] -/A << /S /GoTo /D (LIBUSE_suppBitrates) >> +/Rect [163.584 273.43 175.539 283.616] +/A << /S /GoTo /D (page.28) >> >> endobj 1057 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [331.363 189.264 419.851 200.168] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> ->> endobj -1061 0 obj << -/D [1059 0 R /XYZ 89 770.89 null] ->> endobj -362 0 obj << -/D [1059 0 R /XYZ 90 739.935 null] ->> endobj -986 0 obj << -/D [1059 0 R /XYZ 107.713 663.707 null] ->> endobj -987 0 obj << -/D [1059 0 R /XYZ 107.713 647.625 null] ->> endobj -988 0 obj << -/D [1059 0 R /XYZ 107.713 631.542 null] ->> endobj -989 0 obj << -/D [1059 0 R /XYZ 107.713 615.459 null] ->> endobj -990 0 obj << -/D [1059 0 R /XYZ 107.713 599.376 null] ->> endobj -991 0 obj << -/D [1059 0 R /XYZ 107.713 583.294 null] ->> endobj -651 0 obj << -/D [1059 0 R /XYZ 90 573.024 null] ->> endobj -366 0 obj << -/D [1059 0 R /XYZ 90 558.133 null] ->> endobj -999 0 obj << -/D [1059 0 R /XYZ 107.713 446.822 null] ->> endobj -665 0 obj << -/D [1059 0 R /XYZ 107.713 266.639 null] ->> endobj -1000 0 obj << -/D [1059 0 R /XYZ 107.713 220.455 null] ->> endobj -1001 0 obj << -/D [1059 0 R /XYZ 107.713 136.341 null] ->> endobj -1002 0 obj << -/D [1059 0 R /XYZ 107.713 108.303 null] +/Rect [163.584 249.494 175.539 259.681] +/A << /S /GoTo /D (page.28) >> >> endobj 1058 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R >> -/ProcSet [ /PDF /Text ] +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.584 225.558 175.539 235.745] +/A << /S /GoTo /D (page.29) >> >> endobj -1065 0 obj << -/Length 2099 -/Filter /FlateDecode ->> -stream -xŚ­WsāHśŻæBRÕ w+¦j0ĮöžÓs{W3[”P­£06ūėļū:6NūB·:|96D[iD»<»˜-KóMß³i"ōČDWż»»ŃĶķżptŅ>lbZ]ŖģcŹP$=šqƒŗśZkĢW|=\Yʱ‚ķ˜FDZ<}pø.ާuiP]ŽMƒ*\‹1—,fuŗāŠTˆŁsŠTØé»ž &_*Qmje Yy øMĮMŽfhO*ēöatŁ+>‡Rv½ŁäEÅ¢/ņ›I/Ņsń¶ō9žkĪ=Ē\’ś»Ÿ G“Ó -tĢ.q”Æw²Śóß(؂g8Ķ ˆq¶’Ģ…k–²#'&®I©+eė½-š¾ Ł6> :hDxa%GĄ%A ¤Čoä8‘ćT-LÕŹĶx„AĖÜAvĪĆŁGĀ…¢ćƒZDļŌvõ’Œb©PæĢ °īO2{Čä`ĒŚ1Ū‚ŁO˜V<M.PBß&wÆX—éĆķ*뚭cō Ÿź›SBÅ|B䪊<‘›Õš‰I]Ź wåż` wˆ¶.2eɂŖ.x`±m@¶vd° žiŪ2VHoße£;–b³·_ƶ&¾Qy[Ŗc‹­Ėm$Šeø$«¼€€•ŠŻĒuŒaŒĆĻĀ‚%“÷9_ü†p:\ūYI\IĄ‚¾JāNʜ³BŚL(`|ūYĒĆŖĮ÷õM‘‡¬,¹-įī&7 ņzV]WGa¹¾~]‰³œr!ĢӔe‘Råbr(ž‘ūĒVĀ*FæšŒ™ź’Žj­ąÅK&ˆ¢X„4\OYšŪē˜“(ė”ē?øŚõtQu»-~pcĒß>ŗČmĘ,ÆÄ‰@Ž+rØøRō&H'×K±©4‰C·W ’;-‚Uŗ>ĄÅč°Ø¢) qYÖLLAgY3§J¼'ź>Ŗ¤$”—2\ˆüF„”q–ļ• Q­ĀLʘ„Uåb\°ē¤ĪvzLź b²š V¬Ä™BŻŠ§ EĢõæšāVµóŁ^i šÆöeč J q±=Z Ą”Nelļåüqy>ų’c5ż!Bī{ŸˆĀؤžŻ«ī?®‡Æ”ńŌ6 dįÓeüž®`{qT­óyĻ6”j{§ą1ЧqĘ`+K]0Śdū¬K'H’›JŌ}g¢_,V²qœpĢŖe(ŚdéW)°I…‡A—å9¶†1F[#:ĄVģīqˆŸč 8^±¢śĀė .GOX)Åfž@¹_0ĘVńģhŪŽI¤<€ *źPĀ–!fŹkYC)śwĻt¼^;Ph„æš'„G¼^_AŌxü‘ß•B‡k÷L¹ž%ƒAÓ9½żöߓvJŗ&±zM½`@ÕTY‰U“€™‰©/T+ &F("Sdü)“g8·ū‰ŸĶg’{‰³Ø[Õ6æ:FAä‰,z]Ó#“"‘nšŅ )*UĢ’QmĮ;2%W[Ž—Ä‹"(¶_?ćŠé”: 1OŠyÅ`iŸˆeżįõX2*ȑi«‚żH‘l5°gÓwĆ> Z5iżßÖOb2Jx¢*wńę -tJõŁķīłB6šŲŠÕO©Ē‡‚•MŠūM ėŗHé5ō9]IŸćķÓĖĻч$}0{–>øų›Ų&_Äg^Ėu^7ĄĘBŌ°2å"æåp:GaC5Ĉą0Čco0#r¬é¢¦˜ķéœó{žßŸ¾s^I’W£>ōæó‡Ńäś~xŗ †žĄkĻX/*U+õ¦\7[ liŽ>ĻFι¹ŗ£µĶ¼2%gș“lįtmōI'kåĘz«MÅa”wĶdpfqWtķņMŁ]õu(ģ(ó:ź.ü+ŻÕ;źd$…”r‹24f€6€æ*ŅØĀĄĀ~•Ó×é)…·-[ņĖśœŚčŃN\FŠ’ōŠŲµøcŸ ė~‰‘øĄ«éxu»˜_—óü`ć<ūʘŲŌ…ęŻ}‘WI¤HWõSżEDķKBt·įkRüŅµŁŠ—–£EW{—MĖĄ’6€gž÷åZ4Ń"ė§|ȵ ńrL’B2ŅüŽL£oMQ!™&l=iFƚł[ŽĶĒ·³Łh9€čśżńśvµ ¤§]ō—ń¶æŹ*Ģ“Ā,J·Ū°x„nVįAł"¬’® ńFŸK`ń,ī…Ɛ pŽ„č:)„9M‘ņĮŗp‰,ĒÆŪÖ»¤¶r½0Ķ =U4F\ž nGjłš–?½VIł ھ (ĖUģąÄ÷TœfūZ°1Ų*8bį“"/ßr\æĖ\ f”E×xšĮ>tK,,Š®0–ź¾ -”źŠ…·ŁØ@÷mŹža̾EĮļ@h²- Ņ[m‹Ī„ü­X‹Œß†Q“ß?SqÓ»é -a9š`BU’ńn1¹ U‡YŒ9g©…¶y—ą xą˜ø „¹øł$o[wµ¬ąÖ¾q™Š`<{]KaGŗ-ūDÅ!)9\~Œ©&š©„ŌH®qć+„²ö@0ŒÕ ’_M§ßŻOæh$hҬ™h$é܃e xńēäŠS¹Pu^ŗŃéo¼˜Æ(UĶRļ ?Ū†zč@P•«DåzŖ˜.2õúʁ”ӈŗO¢¤Ōk^žÓčYoĖ€2Ŗ§±Ēq(’P-iXUāŲH²”®‚+6¼:å¬*Ÿ‘|E˜#,c%‰IFć! EŠ‹FĶ Ku£ē0ŪĮqM˜ -ZŖŸE3”Gh -$>t±(yVļ -XBĒx޹Āv›cHæhŚĖ²”‹—"­TiÆ&t.Ü$Õq ‚JęYUäpåŖ.»„O„ōŃ9} śÅHļńģxµœŻĢT’ĖĆeŖ½X‡{'(œ/ęē38¼ Õ®WĻY2§ 9ŒY.“į_Zī[Ür8ÅĢ›:k•Q'ĻŁŽó|•æķ­ƒ,®©@QźO—ˁ !“ŌFÓ,oóR{«¦Šēę“ŁōńøŲ{I’¹Ó’l3ߒöįÅ µiUǬز›5ūē‘’«Ąz×Ļ£ŗ­gfH莀"k·.rĄ[¢åčTMAfīY®ŠÖŸ$ńčP÷œŻŁšuܔē‰zyĪ›ßvÉ./ĪPiļžCf 7–Ū ąžŽµÕŻ"į Ąrßņ²¦o1iŸ7š[`U–>øī>WäÖ}[œ·#MÜܶYł”49¦1c|łśPīs[]_::¹,“Ŗ.R²·īŽŃß—ĶŻÅކGvXüö©ÉxĶk+"¢9I|ļČļķņnžßĒßģvņHŌ“Dļ‘t üKjƒ÷­­pģ2»1Ćņ ­)ĖšŹ L3ŒŠĆ3ł”ą8ņ]‹Äeš ¼ąohĄQy§¬hŁFč Ņvą½ļ¢½E‰Ogō"‰0pm/9’hHĄ-ŻÆėõ$)£3LÄY`łó&‚ŅMxA³(ĶōyēŌ#ĖąĄD?§Žü:y]]Ņǵ¤gwõ! 9ĄĮ\tĶ×R’žL?;zzze ńžN³°Ų”ē4„\ę=ŠŅ`QWTšįb\¾CŃ2źpNi¾üQś.ćŻōqˆdų:NóćĖélĀŠ•“/ąŃŠ$k|h6£®ź—B_æ/pPń(ż -ĆZ N˜”Ē|xĘŃPĒéńXśu·'MčŸ%ažIOׄŖŪB›%É1'ōĖ; ł"A{”šZ¬Ķ€żŸŌ}x'0ńŃ_Ō’Ž ģ -endstream -endobj -1071 0 obj << -/Type /Page -/Contents 1072 0 R -/Resources 1070 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 1067 0 R 1068 0 R 1069 0 R ] +1064 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [380.065 620.497 392.02 630.684] +/A << /S /GoTo /D (page.28) >> +>> endobj +1065 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [380.065 596.559 392.02 606.745] +/A << /S /GoTo /D (page.29) >> +>> endobj +1066 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [380.065 572.621 392.02 582.807] +/A << /S /GoTo /D (page.28) >> >> endobj 1067 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [217.003 549.068 292.021 559.972] -/A << /S /GoTo /D (structAACENC__InArgs) >> +/Rect [447.791 548.682 459.746 558.869] +/A << /S /GoTo /D (page.30) >> >> endobj 1068 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [353.899 519.575 440.713 530.568] -/A << /S /GoTo /D (structAACENC__MetaData) >> +/Rect [478.774 536.713 490.73 546.9] +/A << /S /GoTo /D (page.32) >> >> endobj 1069 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [397.095 438.073 501.244 448.977] -/A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) >> ->> endobj -1073 0 obj << -/D [1071 0 R /XYZ 89 770.89 null] ->> endobj -1008 0 obj << -/D [1071 0 R /XYZ 107.713 679.36 null] ->> endobj -1009 0 obj << -/D [1071 0 R /XYZ 107.713 623.164 null] ->> endobj -1010 0 obj << -/D [1071 0 R /XYZ 107.713 578.923 null] ->> endobj -644 0 obj << -/D [1071 0 R /XYZ 107.713 522.728 null] ->> endobj -1011 0 obj << -/D [1071 0 R /XYZ 107.713 465.136 null] ->> endobj -1012 0 obj << -/D [1071 0 R /XYZ 107.713 426.479 null] ->> endobj -370 0 obj << -/D [1071 0 R /XYZ 90 411.23 null] ->> endobj -605 0 obj << -/D [1071 0 R /XYZ 90 385.961 null] ->> endobj -374 0 obj << -/D [1071 0 R /XYZ 90 385.961 null] ->> endobj -587 0 obj << -/D [1071 0 R /XYZ 90 203.688 null] ->> endobj -378 0 obj << -/D [1071 0 R /XYZ 90 189.655 null] +/Rect [395.458 524.744 407.413 534.931] +/A << /S /GoTo /D (page.29) >> >> endobj 1070 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R >> -/ProcSet [ /PDF /Text ] +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [436.703 512.775 448.658 522.962] +/A << /S /GoTo /D (page.30) >> >> endobj -1081 0 obj << -/Length 1970 -/Filter /FlateDecode ->> -stream -xŚĶYKsŪ6¾ūWšHĶD,ų&ss;uėŚ©«ö’v<IčP¤ -’q_ß],Ą—NšéL `±Ļo2³6³Ž_¼Y\|wķyVꤑY‹µ•2+Ž\'ō\k±²>ډćĪę^Čģ,Ėy™?b9 ˜ķl‰z- -N£¾ęrę&6ģBRā{”ķdz??\\-.žŗpįFf¹ź†0vb?“ņŻÅĒ?˜µśsü4±žŌ®x>| ė—‹Ÿ/˜––¤öR»,r?±bh±G¢’īy”ŗŽœ³>ĪCĘģošĶż0µE¹o&ö*k2">‰¢ Ń’Óšä|ź|š¹”ĶW“¼–ÕŽFÉ7\–YAG:ĪĄeę1»]ćq4¢µe#ōĪfˉö;cž¹¹ܦ÷eEQ!ń©Öw–yµå†fźi%N„ÖÜu4 É5lAł g;īĢęaŚ‹­Ø5µ-óFT ŗhž‰4ŗ+šģ¬$śDOX9Pv=‰fK«’ÆŚ\™ ȵų¬å%-ēÕnŸIQWš}SM‚ź°±*——xo)Ś*IßļÆę#zÖ®DEC„. ^nš­3†¹1Wź$ęŽS!s³FF!y ŸPå¬hõ“Æ&Vg»}Įkšd*E6ķŽ—zYč•Ļ\VÆpٶµY,µq&¹(E#ĄSŸ3tQŸÄ̵ ½e©ŹöūB é-čÆ<.’’Õņŗį«o°Õ%¾ėȆ/W4@+į7£F<ŠĪ'ūī·õ–‚ę{Yå¼®i’«`„ĮŅ“b³įR_ńIhę5oĶ!źYÜ6Ø[7y‹ “ŪNXjāH7Rį‹ß¹ 9ę„)ä:ssÓ—W¼ČžiXˆRÅ 3Éi°n‹B/k;(/ĀōiĖK}ÓVo1˜je©ł•Z­°Š<–¢©ɳݱSHEœ– Ųʵ^š¼ŗ{ūxß6—d‚śõė²ŻĮüĶsCöD„ ¶š“Ą¾n%H-w•Ņ36™‡^PA”^TÉßZl øŽ¹|žš ÕiÜ»ų4† šw’īźńźžz–@=ū6lšćˆP’Ń IUž·R źR‘‚ {I0/Ŗ¶¦% YøhXWˆ gM\OXt€TS8€QÓb¾ĶŹ _Ø,ÖāE=¤œ„€Ca}ā„J$Ž–`pƒÄ5¹Ę}™Ā™†GBųwähė¬;ēŽą¼;Ū.“ذŃLį†Ź“¢®(-—zc[›[W:—ĢfQ®ų"“KrÉóŖÄŻ“2ė¹÷ęĮDœuķmÕ6ƒ,eǰ ņŪ“€ō'ѹ“,³Ķ“õ›jb{ś 3ݾ?[®LŸ–•zGfœXafj7BēdµĮe«c)ī~½½żÖĀźū:2`@mŽųAæ4n?p6ķ@Œ™¦8&µėw¼Ī5½¦oY5Äŗ¦ƒčˆ\a™¢ORP Ių“­ -ŽŻOpŠ…ŪW9vĀ™ĆBĪ DĻ„.I:Tė½Ū8Ńl= ĖćĢ©ZN üä[”łź˜vśĆĢ…ūŗųļŁѰ+Oœ˜”!‡…>qŁ^fł•ŽĶ‰Ɔž ŸĀ -ĮöŃ5~Gā}ŖāH¶¹¾aī†NŽŅ^2ńrF“µŠh7¦ŃcĶ0ŅVĄLŠ}īY_™$āgźlÆ–©cĮµÆ')ēFNäÅcmĪ5hŌgµVeĢgÕ”Ž~‚ŁōvR§5lP¦īy~ŲIbAöŌõĻĖxæ§7‰ź…ś8Æ1ĪW_+j™Cdņy*īŗ­ób4¾ē°dlåȜ šŠw¢$1AĶŅ’"j<׉Œ>ń fY”S?‰Ÿ„Lõ‚2ku°Q®šnĮ`čW[^”™ÜŌē¬ī»cĮ‘Tvļõæ°ļMišßĆ~÷¬$ŠŠą`¾Õ4NĀcĮ3ŃćKÅ4ļ/É?® aąDi0® X¦06ŹSEa¬Œēø”) -/üR3łĒW&ī“»Ś[®#šņ%8påŻo3ׇ·ĶķĶ»Ēļ/ļŽŻ^aǰc…‡$Ż?č( ~×Ŗ4ТŶ B/ōķ/Ī Kœw B¢„ˆ$=¢ĖÜlū…ŽŽß]ß¼qŒ7Ż,Fź$,ó¾ö_’ņ[ -endstream -endobj -1080 0 obj << -/Type /Page -/Contents 1081 0 R -/Resources 1079 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R ] +1071 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [416.887 500.806 428.842 510.993] +/A << /S /GoTo /D (page.30) >> +>> endobj +1072 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [446.217 488.837 458.172 499.024] +/A << /S /GoTo /D (page.30) >> +>> endobj +1073 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [452.852 476.868 464.807 487.054] +/A << /S /GoTo /D (page.30) >> >> endobj 1074 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [133.245 627.334 275.8 638.238] -/A << /S /GoTo /D (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) >> +/Rect [457.285 464.899 469.24 475.085] +/A << /S /GoTo /D (page.30) >> >> endobj 1075 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [264.962 460.556 347.353 471.55] -/A << /S /GoTo /D (structAACENC__BufDesc) >> +/Rect [456.518 452.93 468.473 463.116] +/A << /S /GoTo /D (page.32) >> >> endobj 1076 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [276.588 414.905 358.979 425.898] -/A << /S /GoTo /D (structAACENC__BufDesc) >> +/Rect [440.13 440.96 452.085 451.147] +/A << /S /GoTo /D (page.29) >> >> endobj 1077 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [222.761 383.166 297.779 394.159] -/A << /S /GoTo /D (structAACENC__InArgs) >> +/Rect [454.127 428.991 466.082 439.178] +/A << /S /GoTo /D (page.29) >> >> endobj 1078 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [219.174 367.296 300.838 378.2] -/A << /S /GoTo /D (structAACENC__OutArgs) >> ->> endobj -1082 0 obj << -/D [1080 0 R /XYZ 89 770.89 null] ->> endobj -1046 0 obj << -/D [1080 0 R /XYZ 90 213.884 null] ->> endobj -382 0 obj << -/D [1080 0 R /XYZ 90 199.346 null] +/Rect [468.344 417.022 480.299 427.209] +/A << /S /GoTo /D (page.30) >> >> endobj 1079 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R >> -/ProcSet [ /PDF /Text ] +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [457.285 405.053 469.24 415.24] +/A << /S /GoTo /D (page.31) >> >> endobj -1093 0 obj << -/Length 1512 -/Filter /FlateDecode ->> -stream -xŚåXYoŪF~ׯą# DĢ\Ŗ-§J}URū’M®l¢©šˆ›žśĪī,Åò£  —»³sĻ|CėĮ"Ö»É/ėÉŪ Ę¬Č|ę[ė+š©+µÖ©õĮę”óiżŽā|"V -ūļ-āņ(“ž4ÕĪņ‡ēÖZM~Ÿ£yQÅ0r ń¬€s—ØĻRÖMéPaē•ÖaĢ8šĪĄ˜ČšŅŠ%‚!‹Œ‰Į]ėĆTbĻfŽGģ³łõŁŻĶooŠh°T?«&IdU¹Ć{ 7¤§3^\’éP.ģŁåāüīףõłåÜH-ÖwóåRmÜ,GšlJģ8Ū6„ŌŚXSN]źskŹ—ł~ė¦,ežČoŻÅē.ĪņDųQ}}äq°H¹Œo‡.u=×s¦” B ŠJ;®“¶”gĒq2Ļ“E¾q˜° µ'l%ʙ -?““"ÆjÜD“ļ:N7ēó%źįłżøĢ÷Ś,|œiE*KĒö›#šOYä¹dĖ”R7‚Ö{*·Ś­ź²Ijä@½~ApWˆ°ł‘~D1µā-Ķ^ń„pGōhˆĄļø jˆśé9„~čz"ķ=—·:'Ÿ›¬4U—å›Wń}ŃŌøÜ—²‚JÄiübČ«:†°cjØü \ŸyČxż˜UŠLŲ›&Otƛg—².3©œóEU–4DJt¹‹;ŗbƒõ£Äžh”¢ >cM©Æød·9žĘišuœźb$¢ŽY^Ė2·H6Õ²zs°©ąÄżHøŚv×ęų~[$į¦2Bmi#ōÕ¦,µ3ÕéĮ"uRÉŗĪņ‡ -ߞ²ķ‰īĶĶRõ¢\¦`Ŗ¦®‘#xWŪ„4™¹-3Xāł¬I³ā˜1«½L2eG¢™}f¬Ā·,ĒgWWh ³—±rݾܪu ęBbŹZ‹§v]Ęyµ/Źi: I‰OØ ﮚæO•zyćØN¶z{9s(„öśź˜M=ÉLųF²NŽ=¦vŸ…OmbųŌŹ„O-1ƒū>Ėćņk{;Å>ēŪq…ĻŖõd{¦‹ÕĶŪÅü ™PĻ‹ü)ĒÕÆ®nēļ¦ŽĄ ÓPc3UŦצ*ļM6UŪjSØŻ¤Žš†»)LeÖzŻź… -– †īņ†zyqĘ õŸoś1ķ`æßf‰v×–ʍ‘øQäC‡.g!Zs«A¤ŒwŹģ% ō=Š€Œ€“ߕG -ō› Ž”“ĻPū/Ŗąćm–ĄļHC{Œót+ĒT›¢€:óKŠé“šŻŗéĀ‹ÕhS>˜g©!}ŒÖŠĆ:Léaæ­²œźhoŪähQ[Ēėqó|—…8FÄO0ž|‡éēēl„lžX\Ɓß2*żīŽÉśP&xh&ÖM4°yņDOŗl;a¢ń9@wŌ^@‘čC50iҹuĻž-gWGŌC˜3CĪ^÷\4x^@¾|kxyŸ™ŁÅ‹¼Ö†Õ“ø - “mw/׳¾ķFʊįō"śÓ §aozQoķ.: ĄS»żVīÓÕĮ+µ¬Ī{1_é˜ ó6›ŽTµ ąßnJ`74·Rf9L:ŠŪž‰;%Ÿžq@a(S9=˜ -µņ6½Ū¤EĒĆXŲĶGDĻGM…ė$·ČTÜ×P‡“1Ī“DZē!4FĪ> źjG¼u"vČæ”ėNũ蒂Sm¾ŲĮ•xHNŁGŖAø{C©Ÿ•”?:nŠ˜O NyÆćŌČ:-: ÖbŁGĆCP9Li“›6c»“ž>ęėfĄ#ĀQšąČż;;Šž·Ŗž8\3šdžŌęÉšø|„(§A Ł¢Z·ž‚F”27 -ż“Ć;½cr4r?ē+Ūéį?¬/:WŽ~¢S~ å ¹œš!Ģ­¾ĢmüoZČA,ūƦż  ś” -endstream -endobj -1092 0 obj << -/Type /Page -/Contents 1093 0 R -/Resources 1091 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R ] +1080 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [459.258 393.084 471.213 403.271] +/A << /S /GoTo /D (page.29) >> +>> endobj +1081 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [420.195 381.115 432.15 391.302] +/A << /S /GoTo /D (page.28) >> +>> endobj +1082 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [437.908 369.146 449.863 379.332] +/A << /S /GoTo /D (page.28) >> +>> endobj +1083 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [433.644 357.177 445.599 367.363] +/A << /S /GoTo /D (page.29) >> >> endobj 1084 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [175.807 475.832 263.737 486.701] -/A << /S /GoTo /D (structAACENC__InfoStruct) >> +/Rect [465.923 345.208 477.878 355.394] +/A << /S /GoTo /D (page.29) >> >> endobj 1085 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [234.747 303.307 332.859 314.211] -/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> +/Rect [428.493 333.239 440.449 343.425] +/A << /S /GoTo /D (page.28) >> >> endobj 1086 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [418.694 291.352 500.736 302.256] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> +/Rect [457.454 321.269 469.41 331.456] +/A << /S /GoTo /D (page.29) >> >> endobj 1087 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [258.786 232.284 340.827 243.063] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> +/Rect [435.328 309.3 447.283 319.487] +/A << /S /GoTo /D (page.28) >> >> endobj 1088 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [308.429 188.903 390.471 217.968] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> ->> endobj -1094 0 obj << -/D [1092 0 R /XYZ 89 770.89 null] ->> endobj -589 0 obj << -/D [1092 0 R /XYZ 90 669.783 null] ->> endobj -386 0 obj << -/D [1092 0 R /XYZ 90 655.27 null] ->> endobj -650 0 obj << -/D [1092 0 R /XYZ 90 390.369 null] ->> endobj -390 0 obj << -/D [1092 0 R /XYZ 90 375.856 null] ->> endobj -585 0 obj << -/D [1092 0 R /XYZ 90 162.632 null] ->> endobj -394 0 obj << -/D [1092 0 R /XYZ 90 148.12 null] ->> endobj -1091 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1099 0 obj << -/Length 1897 -/Filter /FlateDecode ->> -stream -xŚĶYėoŪ6’īæBe`ęHJŌ£č7u»lĖcŽ3`h‡@–™Xƒ,y’¼¶ūėwäQĻ(jZlŀ")ņ^¼»ßL­‹ZogÆ6³ļßpn…$ōøgmZ¾ĒˆąĢŚģ¬wv@Ų|Įµ£(–Y|—&Ū¹Km²ĒÕ7I*q“–÷²˜³Ą†]j)pø°pžūęĒŁj3ūsʀ#µ˜ę |ā;гwæSkė?Z”8a`}Š»–Ėx¦ÖĶģ—ķIė ¤å0õ9J»Ł'%šfž}Źā*É3œEišĻAžś­oĒyöžRžp*¢vS~ßlĘh’ļ@)}äŃAV²0 Ź£ŒEDīp!É“®Ødń`“]æYļōūåRīluyvw=¹½\//Ģ Tä'ČkÅ{$Ŗ¹.Ō6Ų²`Œ„B ŖJefjNe…£­Äg9gšĒ’j£Č¼”Šhe¶vģ³tœ0“—f)ɀQ„8ūKY1J“]ŌŅvóC»Śš­Ūž<™=E”=ČZB0ųˆ†Z›Š³wy¦Gp<ŪįR”į³#¼.äcΰIÓ×£­”S&pHī@U×õĮk §(®N‘Ł;B -ŲåĒ–°ö5X{Vø¢MOeŠ®FjTž¶„üó$³jĀU0ÖV™ś÷{O…6p½Æ«ūbĶ JĀŠ³Ą•HHMŒ\Ļphœ¹{ŗ„āz*, > A•€Pį •ż22Cŗ -©ÄuBx£-1U4N„S8ic&{øšT5ģɶ0Ģ%®k’–Žš)±Čp‚×bEDcä\åųܚģVŹJÅXīFŹéĖ{^œO©d¤C•Ģ­ż„CgB%īʂ •šģ(¢_ūūv²Œ‹¤vsA§ŪW*Ü÷RW€ūĘMƒ­eu*”ŁS>ŚæQN˜Ø}ŌŲģ=ēb6‚ö¾śé;T²V¶<ű,˾¼:Ž;—ń Ā痿Ι#ģåĻēÆļ~X^¾žyœw7Ż^ŽÜ^__­ēµ7«×­łV›Õśńv‸^ŠĻ”=fgW—oĪßŌŗ×AŸ¤§Ć œ,$žĆĄę źøŃ®šŪDęö>Q’ÕyH\ EŸåMÉ@\āĻŒ¢M„@łWėõÜ”6軹žk²ÜÕQ*=ĒVę Į}ķu×½z½Z#_ęv/†P²vzČ×īź§/JøćŌ›ŽŻĢå ū»}¼€x“I€eeŒ&(ńBÖ·žķłåf„-Ō%AŠ$Xõ"ߝRYŽ1„zˆnŸ”¶ü“…KõžCōń Re&ÓrLN(õ[!” ĀgĮ]ćŖqÜ7›»QˆŌ䂲аĄłU¶ÜĖ~ö†k# śÄćĘTKØĆb]{8³ņŸŌ4/pQqRĻŌD±«w±9ŠUŽŗŽQšķ“õ…zµ“Y^)—V“­į§EīÄY[呱’亐I–T €×ßr°śę1„—Ī©€§ŌÜė ŗx>ˆ;’ -ˆó‘X˜Bqøœ Pü˜ėź«—µŸŒĀø†óĘ~»~Š*TĀĻ>ö(H/·‘5„DŒ6v£Š÷ūO#² ©ń*ąt<ęEUKždµū'å„3¼čCłsāC{¢ŠōŚ­ -¦ ŪsĆ5˜óļ“4ڦņiEG€Ī! ±I± ӀZPź:PF¤2®°[i¤2-WÜé® -©Ąüa®Ź’]’=`§Ói±¼V$ ŲoŌž¼nÜĢ O'łčĮōqQ!MŸ”—e‚Š*ŽŠ'<•qķ”õĘła›dŖ˜AZLט&lLćM9œ5 ×Čź{ģV»Øńtō#”įµ|onxß¼ZS¾®į{}óulæĪŌ¬™ YEŠØFßNgķć£Ć1ÅštQ£n¤z`M}šĒ(Cžš‚ī5Ža0äāsTüī„ń% -dį@2™K„ž0ܶ4»Łg{C‹u[3FSo½|9BŒ ā†M¬*”(ׂN°‰ß|Ró}cXčx -,cųęŪ, ½^é ó;Ö~L¶č¼†D„aæd(M9©Żø]TšRłßX4Ŗā’ō…ć?śĄĮøtw]¬.Ōē a’¦»Wu’#ŪzĞüĢń-¾l4³āPž„?YüĘiT -endstream -endobj -1098 0 obj << -/Type /Page -/Contents 1099 0 R -/Resources 1097 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1089 0 R 1090 0 R 1095 0 R 1096 0 R ] +/Rect [450.252 297.331 462.207 307.518] +/A << /S /GoTo /D (page.29) >> >> endobj 1089 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [377.026 726.819 459.068 737.723] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> +/Rect [458.351 285.362 470.306 295.549] +/A << /S /GoTo /D (page.28) >> >> endobj 1090 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [135.768 690.953 203.035 701.857] -/A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> +/Rect [458.142 273.393 470.097 283.58] +/A << /S /GoTo /D (page.29) >> +>> endobj +1091 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [462.008 261.424 473.963 271.611] +/A << /S /GoTo /D (page.28) >> +>> endobj +1092 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [457.913 249.455 469.868 259.641] +/A << /S /GoTo /D (page.29) >> +>> endobj +1093 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [345.336 226.751 357.291 235.717] +/A << /S /GoTo /D (page.29) >> +>> endobj +1094 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [427.029 201.606 438.984 211.793] +/A << /S /GoTo /D (page.29) >> >> endobj 1095 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [236.659 636.681 318.7 647.46] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> +/Rect [411.746 177.682 423.701 187.869] +/A << /S /GoTo /D (page.29) >> >> endobj 1096 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [319.676 622.115 401.718 633.108] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> ->> endobj -1100 0 obj << -/D [1098 0 R /XYZ 89 770.89 null] ->> endobj -583 0 obj << -/D [1098 0 R /XYZ 90 532.918 null] ->> endobj -398 0 obj << -/D [1098 0 R /XYZ 90 519.022 null] ->> endobj -582 0 obj << -/D [1098 0 R /XYZ 90 94.191 null] +/Rect [434.78 153.758 446.735 163.944] +/A << /S /GoTo /D (page.29) >> >> endobj 1097 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R /F11 698 0 R >> -/ProcSet [ /PDF /Text ] +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [486.575 141.789 498.531 151.975] +/A << /S /GoTo /D (page.29) >> >> endobj - -1107 0 obj << -/Length 1252 -/Filter /FlateDecode ->> -stream -xŚ•W]“¢:}÷WP{_ jĶ$¾|CÅYv‹Nķ½5»e±•*Ep?@ff÷Į"$ētw:§›ˆ•­‚•ŪŽpŁ»™čŗā"×Ņ-e¹Q\¬ŲA¦N”åZyT)Ö¾.?*†į"bš@³“dĻ“¾nbu|ŒĻ–Q‘SķłĖŽS+D˜3md¦z_±²†ł -F†ė(?ź PŻ€ē^YōžīįVh„"ƒZŗŒM‡Pm½ŒĀAŗÖ'cõ%)ŠO§2¦kt!Ū°L#ŽŹŅ˜ńčn&†]Ū-Vśŗ\Ć* ž•¤ńž¼²FßEQ ¼Õ>ł†vļDOldé“8±-÷ż9K -ö{”ų°ŽÆNQ–³¬M0; ?¢ļ« ųų=ó[–²,‰Å:’=óń1ż¾Ź‹,I·Įhf¬ī/lžķ5;±t )ӈ©ž*ē¶YtŚ•ĆĶ1+ņ“B/ņĄŪOŠ‘TĮ:Ņ©­Pź ›.„§F¦KmW@źc±(™ÕÄMp Źųņŗ -LBśŅzæfž¢>‚\Ó”ź£˜"šSÕĄ9¹čóĘ.Zé"¢†*ļ‹®› ŠņŲ7!÷IZTÓ<Ŗl[… -€L[›Čēæ`s²x‰ā÷å ŽEYy~„ÖėŪ@–ćČ:ž‚±ŃqȰK‡HL¤éXżž•fŁźWpF*F#;}BLD0dŃ0cK…"RÕč˜w]õ –ĒYr’]ć¹Źt^÷niĘKKćĀśN²¾›ņ¹;jŗ©ž(_Šcł<ēŖŲUƒÉųS9š<buT¾ųi|\³J›Ž}€ŹŃ‚±K&OĖ^?œQ“ßCŃHźÓYvœöi]Ŗ`-ņ‘£®lā*×FwiuRv/“ßV;o%RŗœČE4BY-iu9ŽLØU×3ʈZĘE ¶ēNAōŽmIĢ BŌ rĢ!6ÜńŃÕŁE„>”Ą¬«fk*­Ė -Zx… -o$E|$ųqå`ްm©6Zy“„5‚Õ‡pę‡ļĀi f£@#źtź…šEÕW€Vƒeči„uéwQ4ÓTēüu©ŁT}éĖB•äÆš”f˜Ŗ7kV?ćånŅ„zÓņųŹņŻ|ÜéwE1śąĶfžTRLė”juŽĖĢ“–ἕ?ŸhV;M—Õ7X²Āćęܰķ’:ķ6ōfS5õg·"¶‹ėė|ZŻūa0?§wntž €Žåց÷eāœüŃ2˜ĻžcŽŻżŌÆ§Ž±Į,†įŖJ_‹ŚĒ"ø‰ćž³[I$–Ńåņ~ń0œ„Žæ(W­Ę*¤gq÷š$Ā-:ÜhĢÆn^Š+qe3¼ūÄtHµvˊiņ-H7Ēīõē+zµĀūė -č÷¼GYtč6 `Żyy‹m·āĪįīŃXqē0> +>> endobj +1099 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [462.775 117.85 474.73 128.037] +/A << /S /GoTo /D (page.32) >> +>> endobj +1100 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [403.597 105.881 415.552 116.068] +/A << /S /GoTo /D (page.32) >> >> endobj 1101 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (./main_8cpp__incl.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 1110 0 R -/BBox [0 0 670 224] -/Group 1102 0 R -/Resources << -/ExtGState << -/a0 << -/CA 1 -/ca 1 ->> ->>/Font << /f-0-0 1111 0 R>> ->> -/Length 1160 -/Filter /FlateDecode ->> -stream -xœ­˜ĻnÜ6Ęļz -¾€gų(ö` ( ‡“zrpģ8E‘Hzčė÷›©Õj»®ģ.G#‰Éł}3śŪōĪ}›8;N.µę(±ūžÉżęžœČéĻ÷ĻīĶ}pŸ’ź÷æü„’žž‚{‹ß?¦÷\šĮ=NÜĻnžĪW½R­ī‹Ėø=Zų÷Åż>V·SšEZˆn{Å Į~0Kt”IæŖVe|ƒ[][xkß]ZāĖÖß¹½›šo­•”ķŃrĆ)8*ĮŻ}Ž<Ż„ܹ»§éż!:T½Ä“^łpĆz•~Ÿ71Ŗ‘a$5JSīŽN?Ž·¬£%_ŽlF?張üšUū=Ė”ĄŚžž}Ac%ćŗL¼ö²}Ńśƒū¾öīƒ)|\9ĮŽ<Œ5C­nŹńh .”g’äkRFÉs0„ā˜|Ź>gqQ‚o©8Ņ+zSÉ^ŖŒāY܃ūõłAŌß’1 *ŇŃÄąk-˜„¹cEņ„(†‚éEĮƒb“Rē½nWˆ/ØXG«Ņše˜#D·²:īcĖ]“Õ9XwńIĀżśé@'¢€G»'¼oJšĀćŖ%ѐ}ŻĘĮ $Ąp2Ćē -8«ąvb OäOb­>”Ģš>|3ćK3 ’t Ä,ø•‚/U}¢GŠ=ŃŁ€MĘ|ćrš‘gœ÷Ū§¬©³5ĖŲsĪk««ąŲr -"üuIK Ļr ø‰ē¶d¬“Ģ Š 6÷ž“Ņ«7Æ”ž£':”Ž€ųŃ׊ ‹źCÅ=R„Äh©‚‚Ŗ€L× ®Ś«Aé5<'šlʓE3WŒ‹' =PģŪŹ¶ß>ź¼D4/±/rbuźü¢Ųē˱Or²¦™6éœņ€w)üŻéx ą•5Ż*x Gŗ-‚źŠnk>©źÆHWBōi'E“`oɳćܖ}“d Eˆŗž¬Ū>¶‚ģ0vēnÕżlģĪxŻceÉķ™żüq“Üåō~‰ÕAyd*‡›ŗĪåÓH šł•ńŻ!ŖēEȜȚղzŖjG‹hI½1ֆ×vÓbŗø -’Œ}#Ķł:…ŖsĄ>^ó:§‹ŃŖ H³cŁvŪ'€”ŽåY· zÖļœŚ]ė{ņsŻt£€óˆ‰|A¾ˆcŚÖµÆ/ķÜhå·x„”z¹5V=PˆeĶP9iUÅŁ²iø#‘Į(ł:H¢ŗŅG§ŅŃńŲ%Ć)o”œęóČy·I @ē–i€Z GHy1¤‡}o³+ä+¼“ē<²ģķ(CCĒho«Kųµœ9µ©¤GŌ%‹v¤ūx!ĆĒŃUģåØk °Ēćčv•Z>€ˆnYĻX÷<2¾ž”š+z;ŁŪ;«xŃP4޳i”1‰S³#_µŽUŹkм¾ėt?ļėōqNßKõ6’wmN¬#;LÆibLŃŹŃÆdŪĪįå¬ŪhŹBUĻl<‡>)^4¹ -Ż\¬ŚV|óŖ€ 6•/ū>·¦8k™cł¬Ó­żćŻōĢ> -endobj -1111 0 obj -<< -/Type /Font -/Subtype /Type0 -/BaseFont /FreeSans -/Encoding /Identity-H -/DescendantFonts [ 1112 0 R] -/ToUnicode 1113 0 R ->> -endobj -1112 0 obj -<< -/Type /Font -/Subtype /CIDFontType2 -/BaseFont /FreeSans -/CIDSystemInfo << -/Registry (Adobe) -/Ordering (Identity) -/Supplement 0 ->> -/FontDescriptor 1114 0 R -/W [ 0 [ 500 833 556 222 556 278 500 556 556 556 222 556 556 556 611 944 333 278 556 500 722 500 278 667 556 500 722 667 556]] ->> -endobj -1113 0 obj -<< -/Length 1115 0 R -/Filter /FlateDecode ->> -stream -xœ]ŅMnƒ0ą=§˜e»ˆĄāDBHUŗaŃ5ķĄR¤b,CܾĘĻJ„"%Ņ—ńŲ¼xŅsóܘa”ōŻMźĀ õƒŃŽēéęSĒ×Į$"'=Ø%*|«±µIź›/ė¼šŲ˜~JŖŠŅ_œ·ŅƓž:~Lˆ(}sšŻ`®ōšu¾ą§ĖĶŚŁ,”%uMš{æŻKk_Ū‘) Ķ»Fūś°¬;ßö·āsµLy°Ą+©Iól[Å®5WNŖĢ?5U½ź„žWĻhėzõŻŗ°\ųåYvŠuP h bØ Ź£Øķ!$3čˆZ ‚ŹjQSP吂ސ†$ÄAÅź±'j"ĆéŲE Ÿ, ˜/ -ł$ŽZ ŸŒ» ŸÄ "ę‹B¾2öÅ|H$Oā?ČWÄóÆč ä“eøØx#Ū•móuŸusĪBĀ0Ūķ†ļsj'»u…Ļ/×ī»ź -endstream -endobj -1114 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 1116 0 R ->> -endobj -1115 0 obj -345 -endobj -1116 0 obj -<< -/Length 1117 0 R -/Filter /FlateDecode -/Length1 3180 ->> -stream -xœeV}L[׿÷ś °ł0Ę6`6o›š0&6¶ Œƒ`ƒ1į3&` ]JHRņµ$K“lš¤I—¬S·ik«hzlėmÓŅ­ÓV©­“l‘"ŖµŪŖ„ ٦tjņOĻ;÷=‡0 sļ}ē¼sĪ=ēwĪ=ļ"ŒJAǐGcĆsčĖ’¼ŽPŅ ą.ŒĪļ7J{ågJ.ŗhbnOLvī”čķ@’~ĻōĮ ہʿĮ3Č'”čųšŲ—ĒWoƒĮ ąÕG!’œ°@Sł¢hl’BS” žS¦Ž?=;: ۜšŚXˆ /ĢįėT^Ś8÷ÜųœęLä@/żŌ†¾+¹Ž*ąImRĖLj¾ĖĻb/’+%wV«%wŚV߆—ȍłŠ ! «mĮl­žN:­šQו0…ņīīBOݰ„x{]GO€­b·‹QuVWų,Ežvžž¬µł¶š7Ÿ®`UÄWˆö(Gu°K½`=‹­µiåLaI)¬u- -[ nĘĀN -Mm}3N“déģņ†Ē*““]Y¹,éLVęi*³›ņŠ6—4746Éü®`ĪxgS=Ž÷V‡›’ œlK..ė“ėKņs2Ņ)R™<7WWRVYĆ’¦£"¢ŹPUś,Ō'Gü+ō -Y1Ņ@Œ6-c}ÅļłŚc¢śóä$€)āƒ?ß5ėųčžfGcWææ±¶Õ 8m5^;æOU7 ūųæ‚~X¹¢°¢;܎µ[_ĮƒŻl ˜*L­eé6 xP”š½@Rk³ŪėšŅ’ę"S‹G÷ÄpŲ¶uvdpļ‘ŻS—žø>Bż$Ø>^B”`/ å ¤W³Zę,·T­)”SŪõÖŗ’śī­Óу‡Ē‡[_vų|gĄ’ł¬'ņķ“‹W¼ü#ņ£Ł[³³”Ȝh³ ņ†ĮfŹGØŲ¤Ó?s0ƒš×ėd&jœ'˜?‚ f’ȘļŸ9öõXē¾- —ą@󶎇Ū˜“»v_ĘäZg«ĶB¤öPŸ€oüaÜGń™Öd%޵7ŽŌ֊Ų;a¾*äHČŠÕY^+ZŒwā]ćÕ°źgįj™ńś·LF^ˆNmõÜŽé'Ėüæv]:zā;żmųĆ ńйž lB®ńzķ³ź§IĒŪŹ[½~±§”+äĒS¶šc0÷ϚŅnæ_š+?^‚W³;#zõFń£ĪĀžś½‡OL[/:¤œÖŒk³łÕS‹WvątžńÜ@xvf 2 ¾‚Ż÷!čŪ¶MX4Q«0X†āfJÄCY€7a±²É­.[[‰Ł;Ų1óó”L°MU¬Ļė~~ō}łõj[eq~aŠF×ÖŅŃč˜‹ņ•Fć‚öšSw9ó;¢śÜ+†öŽG®†§Ę&öD#ų?NT|_„ƒź„u©¢ś&Q ē܊œæ¹>ü&•É„‰æĄYEpft„“G>ʤĻļvŪõٚ”F -s~ĻjŲ&sak/čץyŠ‘ūØNzm ±ÖUćDŅÆ·'‰4 SX%)eµY›ŽÕą-N?żöKēŽœĒAéė Õ;nvīH/kŁc/÷xŠqPc޹5·¢\ļgjŠO~ķĄT{·ÓVQ“¹9kw[ž–ęŖM©Œ-Ü$+ØÆ+ūN䅇¼¤ŠŖĮ‰s -G’ģ\ćŒ}‹GgęĢŗ}>·kG1\>süŅeœt¹;öėX,<<#bžēńĄ¾µ˜•Š,Z©‰mXĀjšÉž•ņHAŽA»Ii\ -&ŖµÓÓ©¹>ĻOŅų(õ%Ó5Ø=µĄŖMµŗ 9S*:aĘ!œsīµļžżÕé¹¹édł·üw{/œ=wAŲ»t_]„Xū¬³É˜Į7ńŌ[fų8ŠĒ”ƒ¼„÷ń÷xžō쒧ೆę;Qģ -Ę®fń§žb_c×|tģ^GÅkĒ—ųoŅO.”Šj k’"#¬Rų狼xfŲ™‚"Hȅ^‹hŸ՗"ppaI†<(”fS”צ -jØ5 ŲÖBŃĆ÷+å"ŚļQ‘C“^Š—BÆčD~ųķ¬ķ„_E8dįĘĆUų‚\ē|ˆC̶lNn6‡ŽbČx—ĆšŖģJ[ŒĘŖ9…94Ū÷š^cŠ86Ņ`0™BSؒ#OoŠÅ„L•œÄ2™mäZ}A× -o¤jŅĘ?6|2€\pĶšoPćdę ēž üP¶‘YRĆż•œÜ²TˆĻ€SĘ3ᰁC`EaY*X­ė¬$K¦Śø„ŗ‰Øaū‹‹Ļ‘ćCéMOˆRņ€Ā÷‡æ7‘§ėŖƒÆ•ļ–ę"zé{Š3Ģ’ü]Ō/kÕ±zE¾;Įö—£6‰¹‰U OV7Ö”>ąĄs=Œ2b‰?„wĪMeóÉ(ź—pH‡»‘ äӀ— :…äOHk -š2É5Tü" ³€ŗh{boø!Ø\ żwĮ8ī• ÜG Ü_É{0žQ4Ąx¼“BmIį.*yéį;_>4.}†÷røõÉßAH}Ovg`¼#Ą‚…ˆo”1ō<D “`%!é-?…<\’/ø„ń·BKnšX.Ŗ%«Ž…ņ!Õį ā¤F'1;¹$£ė'Ņo³@(€HjLr Y BftżP™G :™ŖL)ōeņŃxā%ę” ć© „Ģ$ę%‰{H•K•\Dėœ4ŹQ -š N:å¤mäd€‘ōÖuRM26„ž ƒüÉČ -endstream -endobj -1117 0 obj -2364 -endobj -1102 0 obj -<< -/Type /Group -/S /Transparency -/CS /DeviceRGB ->>endobj +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [390.317 93.912 402.272 104.099] +/A << /S /GoTo /D (page.28) >> +>> endobj +1106 0 obj << +/D [1104 0 R /XYZ 89 770.89 null] +>> endobj 1103 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.921 379.897 148.839 390.428] -/A << /S /GoTo /D (main_8cpp_adacbe0175a79dff748855d8c9839f82b) >> ->> endobj -1104 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [361.57 321.343 433.569 332.247] -/A << /S /GoTo /D (LIBUSE_CallingSequence) >> ->> endobj -1108 0 obj << -/D [1106 0 R /XYZ 89 770.89 null] ->> endobj -402 0 obj << -/D [1106 0 R /XYZ 90 739.935 null] ->> endobj -1109 0 obj << -/D [1106 0 R /XYZ 90 398.078 null] ->> endobj -406 0 obj << -/D [1106 0 R /XYZ 90 366.679 null] ->> endobj -410 0 obj << -/D [1106 0 R /XYZ 90 308.125 null] ->> endobj -719 0 obj << -/D [1106 0 R /XYZ 90 283.797 null] ->> endobj -414 0 obj << -/D [1106 0 R /XYZ 90 283.797 null] ->> endobj -1105 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R /F14 778 0 R /F46 1045 0 R >> -/XObject << /Im4 1101 0 R >> +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1181 0 obj << -/Length 689 +1193 0 obj << +/Length 1147 /Filter /FlateDecode >> stream -xŚĶ˜M›0†ļł>‚ŌP0„#‡øuLdœVÕŖBŪŻķ‡Tķ”§žüšĀn!ÄQ ä%D™×OfĘę ų Čšč}-o7® \ß W!ņ+ˆ Bρ¾ä#ø³čóćÓoū³|÷¤"<9QąUK „źŸĒ±ķC+!<)ć$bm#h'¢ŅHŹ,Rń«:äžžįéł”üłćKź|Ó¬æŖ%«"[€»„‹”åįŅ:”ŁĘą e,v€­OåšJŪ!KcDĮ@"c+Æ.e!‡ąCXŪ¶bžŚ“>ŅTnēŖĪUźįgŲå)™«(É6朰ÓӔ£AČE:߆Mr.Eu•³²väYś 'ٰź„jR’|c,'Ž8Q'FLĆö82ó#%#<›ļŠŲ’Xõg¹'‚ęé\”SY6×ó¦¦al®ż»¾Ś¹šĶŠp…Ų‘śÜšG“žs2+@±7R™ī „˜5+r#ż”ģ/ö -"h,ioP®8> vưA¶ a‹N°}°QåSM{gĖQŲ”(Ź#„ŒL‚¢ń7ڵõćץ»Ōėj穁®ėĢ’¤[ÆŁ›xŒ%dH -ü1¢Õ@`Lø5dĖ@{j0'ŖĘõYxĘÖÜ¢zčcŸnLøk¼%¹ć¤©ž¶ĘĘrńāuĶ -Ö7³šWśļ}{9N?ŌŪE³Ą’gXŗkč̊·šaå¶å2(ŻsL×Ń®-1ķŗĒ5†Ā|¾_vKZ}Ó4J½}R‘”ŹvŒf[}ڵüłG{C–=÷‡]Ń5ĪėX‘ž×SGsh»CA“ó™›Čd²Āh—œ›¾™®-ö„$Ū »Ä'^ģė/IŠÅbłūa'Äń;‘‹?įÕ° +xŚĶšßs¢HĒßż+x„Ŗ 7 ”G„Ѱǰjws[Ń1± +1‡ø›Ü_ƒ’Ķ*D Ģj^D>óīžžnJĄŻs€÷†AļĻ„œ*Ŗ +Tø`Į©€ė+’ˆ Äsī–—Ā·ą'«@TDŚ]5Īčį ÷o/æ8i÷0ź‹}q³Uļöąęōś'ˆ²:ą~ģīZq×P¦Ē˜ó{÷Ął! ß!āśūp?®¦ ׀ױ£‡/’źęÖÓužŲ Ś+Iļ IŽøĒŻ^AxæļG¤W’$Ŗ•ŠöqšĪP?°Wƒ†ƒ¦h_³'ö4A’$Ŗ»N2Øę*eīŠ m×x/U_dš.;¬9vńše:ćFŠ„¦č`āO‡#O³±Ļ,Os|{ś™Łü§Ž?L\OPņ°5‰ B^ĖE'¢LŹ—‚rč|ØŽyupzY§”ęč¦eŃ’%4r!…WUęµnć„ų©aŗæM²•Č!]ŸÓI7¾; +ń4(æÖĘLŚŠ üĄĆšŻŁ{_¢7W»m·š(ööyŠŪ„éƒē +iQ4#É,Œ—włāCõ”T”å-'žŽL˶ĢńMšqåłūsg‡gœG©ŅR©=õMż[ņŖ(Ä’;å•F®LYµ²ć:ųcŚ×Ÿ`¬ß|Ņ!Qƒ+²,*šŗ$rø]d3«E:Ś“ŖŖ‡;~»Ą±æülZŚė‚%@Ä/HjĪI’-’’ō½ąC‘l(]&Z’ķjX/‚ ē”S+L÷rJ§uX½C¼­F_ĒwĻž6M×Ūdn×/ýótÖ|źr-ŖŪĢOóqą›”±z²¾ĒT2ŁŠHčœč8\-Ÿęė\ā$\ĪŸŲ€©AļƔ,˜Įģ•SL6z7/įŌrYÉ-Ó@Óķ“Yk£¶Hk²¦½Ģ“·¹®|÷qü戁,ʶż[Ä’5ĄÆ¼ endstream endobj -1180 0 obj << +1192 0 obj << /Type /Page -/Contents 1181 0 R -/Resources 1179 0 R +/Contents 1193 0 R +/Resources 1191 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 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 ] +/Parent 1107 0 R +/Annots [ 1102 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 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 1187 0 R 1188 0 R 1189 0 R ] +>> endobj +1102 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [220.64 727.536 232.595 737.723] +/A << /S /GoTo /D (page.32) >> +>> endobj +1108 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [242.936 715.581 254.891 725.768] +/A << /S /GoTo /D (page.28) >> +>> endobj +1109 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [223.658 703.626 235.613 713.812] +/A << /S /GoTo /D (page.30) >> +>> endobj +1110 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.59 691.671 224.545 701.857] +/A << /S /GoTo /D (page.30) >> +>> endobj +1111 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.59 679.715 224.545 689.902] +/A << /S /GoTo /D (page.30) >> +>> endobj +1112 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.638 667.76 259.593 677.947] +/A << /S /GoTo /D (page.31) >> +>> endobj +1113 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.313 655.805 242.268 665.992] +/A << /S /GoTo /D (page.32) >> +>> endobj +1114 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.349 643.85 227.305 654.037] +/A << /S /GoTo /D (page.30) >> +>> endobj +1115 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [128.854 621.16 140.809 630.126] +/A << /S /GoTo /D (page.29) >> +>> endobj +1116 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.332 607.984 221.287 618.171] +/A << /S /GoTo /D (page.28) >> +>> endobj +1117 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.161 596.029 203.116 606.216] +/A << /S /GoTo /D (page.28) >> >> endobj 1118 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 608.529 175.539 618.716] -/A << /S /GoTo /D (page.35) >> +/Rect [217.362 584.074 229.317 594.261] +/A << /S /GoTo /D (page.28) >> >> endobj 1119 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 584.593 175.539 594.78] -/A << /S /GoTo /D (page.36) >> +/Rect [184.754 572.119 196.71 582.306] +/A << /S /GoTo /D (page.28) >> >> endobj 1120 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 560.658 175.539 570.844] -/A << /S /GoTo /D (page.34) >> +/Rect [226.039 560.164 237.995 570.35] +/A << /S /GoTo /D (page.28) >> >> endobj 1121 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 536.722 175.539 546.909] -/A << /S /GoTo /D (page.35) >> +/Rect [163.584 536.253 175.539 546.44] +/A << /S /GoTo /D (page.29) >> >> endobj 1122 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 512.786 175.539 522.973] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 512.343 175.539 522.53] +/A << /S /GoTo /D (page.29) >> >> endobj 1123 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 488.851 175.539 499.037] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 488.433 175.539 498.619] +/A << /S /GoTo /D (page.29) >> >> endobj 1124 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 464.915 175.539 475.102] -/A << /S /GoTo /D (page.35) >> +/Rect [163.584 464.522 175.539 474.709] +/A << /S /GoTo /D (page.29) >> >> endobj 1125 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 440.979 175.539 451.166] -/A << /S /GoTo /D (page.35) >> +/Rect [163.584 428.657 175.539 438.844] +/A << /S /GoTo /D (page.29) >> >> endobj 1126 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 417.044 175.539 427.23] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 404.747 175.539 414.933] +/A << /S /GoTo /D (page.29) >> >> endobj 1127 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 393.108 175.539 403.295] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 380.836 175.539 391.023] +/A << /S /GoTo /D (page.29) >> >> endobj 1128 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 369.172 175.539 379.359] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 356.926 175.539 367.113] +/A << /S /GoTo /D (page.32) >> >> endobj 1129 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 345.237 175.539 355.423] -/A << /S /GoTo /D (page.35) >> +/Rect [163.584 333.016 175.539 343.202] +/A << /S /GoTo /D (page.32) >> >> endobj 1130 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 321.301 175.539 331.488] -/A << /S /GoTo /D (page.35) >> +/Rect [163.584 309.105 175.539 319.292] +/A << /S /GoTo /D (page.28) >> >> endobj 1131 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 297.365 175.539 307.552] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 285.195 175.539 295.382] +/A << /S /GoTo /D (page.32) >> >> endobj 1132 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 273.43 175.539 283.616] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 261.285 175.539 271.471] +/A << /S /GoTo /D (page.28) >> >> endobj 1133 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 249.494 175.539 259.681] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 237.374 175.539 247.561] +/A << /S /GoTo /D (page.30) >> >> endobj 1134 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 225.558 175.539 235.745] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 213.464 175.539 223.651] +/A << /S /GoTo /D (page.30) >> >> endobj 1135 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 201.623 175.539 211.809] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 189.554 175.539 199.74] +/A << /S /GoTo /D (page.30) >> >> endobj 1136 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 177.687 175.539 187.874] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 165.643 175.539 175.83] +/A << /S /GoTo /D (page.31) >> >> endobj 1137 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 153.751 175.539 163.938] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 141.733 175.539 151.92] +/A << /S /GoTo /D (page.32) >> >> endobj 1138 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 129.816 175.539 140.002] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 117.823 175.539 128.009] +/A << /S /GoTo /D (page.30) >> >> endobj 1139 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 105.88 175.539 116.067] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 93.912 175.539 104.099] +/A << /S /GoTo /D (page.29) >> >> endobj 1140 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 620.497 392.02 630.684] -/A << /S /GoTo /D (page.33) >> +/Rect [390.864 727.536 402.819 737.723] +/A << /S /GoTo /D (page.19) >> >> endobj 1141 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 596.559 392.02 606.745] -/A << /S /GoTo /D (page.33) >> +/Rect [373.36 715.581 385.315 725.768] +/A << /S /GoTo /D (page.19) >> >> endobj 1142 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 572.621 392.02 582.807] -/A << /S /GoTo /D (page.33) >> +/Rect [394.68 703.626 406.635 713.812] +/A << /S /GoTo /D (page.19) >> >> endobj 1143 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [447.791 548.682 459.746 558.869] -/A << /S /GoTo /D (page.35) >> +/Rect [347.348 691.671 359.303 701.857] +/A << /S /GoTo /D (page.19) >> >> endobj 1144 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [478.774 536.713 490.73 546.9] -/A << /S /GoTo /D (page.36) >> +/Rect [364.503 679.715 376.458 689.902] +/A << /S /GoTo /D (page.19) >> >> endobj 1145 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [395.458 524.744 407.413 534.931] -/A << /S /GoTo /D (page.34) >> +/Rect [366.924 667.76 378.879 677.947] +/A << /S /GoTo /D (page.20) >> >> endobj 1146 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [436.703 512.775 448.658 522.962] -/A << /S /GoTo /D (page.35) >> +/Rect [380.065 643.85 392.02 654.037] +/A << /S /GoTo /D (page.28) >> >> endobj 1147 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.887 500.806 428.842 510.993] -/A << /S /GoTo /D (page.34) >> +/Rect [380.065 619.94 392.02 630.126] +/A << /S /GoTo /D (page.28) >> >> endobj 1148 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [446.217 488.837 458.172 499.024] -/A << /S /GoTo /D (page.34) >> +/Rect [380.065 596.029 392.02 606.216] +/A << /S /GoTo /D (page.28) >> >> endobj 1149 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [452.852 476.868 464.807 487.054] -/A << /S /GoTo /D (page.35) >> +/Rect [383.492 583.357 395.447 594.261] +/A << /S /GoTo /D (page.20) >> >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [457.285 464.899 469.24 475.085] -/A << /S /GoTo /D (page.35) >> +/Rect [387.397 571.402 399.352 582.306] +/A << /S /GoTo /D (page.20) >> >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [456.518 452.93 468.473 463.116] -/A << /S /GoTo /D (page.36) >> +/Rect [390.167 559.447 402.122 570.35] +/A << /S /GoTo /D (page.20) >> >> endobj 1152 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [440.13 440.96 452.085 451.147] -/A << /S /GoTo /D (page.33) >> +/Rect [396.403 548.209 408.359 558.395] +/A << /S /GoTo /D (page.20) >> >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [454.127 428.991 466.082 439.178] -/A << /S /GoTo /D (page.33) >> +/Rect [363.039 536.253 374.994 546.44] +/A << /S /GoTo /D (page.21) >> >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [468.344 417.022 480.299 427.209] -/A << /S /GoTo /D (page.35) >> +/Rect [365.251 524.298 377.206 534.485] +/A << /S /GoTo /D (page.21) >> >> endobj 1155 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [457.285 405.053 469.24 415.24] -/A << /S /GoTo /D (page.35) >> +/Rect [385.714 511.626 397.669 522.53] +/A << /S /GoTo /D (page.21) >> >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [459.258 393.084 471.213 403.271] -/A << /S /GoTo /D (page.33) >> +/Rect [381.848 499.671 393.803 510.575] +/A << /S /GoTo /D (page.21) >> >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [420.195 381.115 432.15 391.302] -/A << /S /GoTo /D (page.33) >> +/Rect [389.22 488.433 401.175 498.619] +/A << /S /GoTo /D (page.21) >> >> endobj 1158 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [437.908 369.146 449.863 379.332] -/A << /S /GoTo /D (page.33) >> +/Rect [387.955 475.76 399.91 486.664] +/A << /S /GoTo /D (page.21) >> >> endobj 1159 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [433.644 357.177 445.599 367.363] -/A << /S /GoTo /D (page.33) >> +/Rect [386.839 463.805 398.795 474.709] +/A << /S /GoTo /D (page.21) >> >> endobj 1160 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [465.923 345.208 477.878 355.394] -/A << /S /GoTo /D (page.33) >> +/Rect [400.129 451.85 412.085 462.754] +/A << /S /GoTo /D (page.21) >> >> endobj 1161 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [428.493 333.239 440.449 343.425] -/A << /S /GoTo /D (page.33) >> +/Rect [360.14 440.612 372.095 450.799] +/A << /S /GoTo /D (page.25) >> >> endobj 1162 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [457.454 321.269 469.41 331.456] -/A << /S /GoTo /D (page.33) >> +/Rect [438.206 428.657 450.162 438.844] +/A << /S /GoTo /D (page.28) >> >> endobj 1163 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [435.328 309.3 447.283 319.487] -/A << /S /GoTo /D (page.33) >> +/Rect [432.548 416.702 444.503 426.888] +/A << /S /GoTo /D (page.28) >> >> endobj 1164 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [450.252 297.331 462.207 307.518] -/A << /S /GoTo /D (page.33) >> +/Rect [408.747 404.747 420.703 414.933] +/A << /S /GoTo /D (page.28) >> >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [458.351 285.362 470.306 295.549] -/A << /S /GoTo /D (page.33) >> +/Rect [498.919 392.791 510.874 402.978] +/A << /S /GoTo /D (page.29) >> >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [458.142 273.393 470.097 283.58] -/A << /S /GoTo /D (page.33) >> +/Rect [410.441 380.836 422.396 391.023] +/A << /S /GoTo /D (page.29) >> >> endobj 1167 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [462.008 261.424 473.963 271.611] -/A << /S /GoTo /D (page.33) >> +/Rect [381.848 368.881 393.803 379.068] +/A << /S /GoTo /D (page.32) >> >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [457.913 249.455 469.868 259.641] +/Rect [389.031 356.926 400.987 367.113] /A << /S /GoTo /D (page.33) >> >> endobj 1169 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [345.336 226.871 357.291 235.717] -/A << /S /GoTo /D (page.34) >> +/Rect [403.975 344.971 415.93 355.157] +/A << /S /GoTo /D (page.33) >> >> endobj 1170 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [427.029 201.606 438.984 211.793] +/Rect [375.751 333.016 387.706 343.202] /A << /S /GoTo /D (page.34) >> >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [411.746 177.682 423.701 187.869] +/Rect [421.529 321.06 433.484 331.247] /A << /S /GoTo /D (page.34) >> >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [434.78 153.758 446.735 163.944] +/Rect [419.875 309.105 431.83 319.292] /A << /S /GoTo /D (page.34) >> >> endobj 1173 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [486.575 141.789 498.531 151.975] -/A << /S /GoTo /D (page.34) >> +/Rect [380.733 296.433 392.688 307.337] +/A << /S /GoTo /D (page.35) >> >> endobj 1174 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [496 129.82 507.955 140.006] -/A << /S /GoTo /D (page.34) >> +/Rect [443.995 285.195 455.95 295.382] +/A << /S /GoTo /D (page.28) >> >> endobj 1175 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [462.775 117.85 474.73 128.037] -/A << /S /GoTo /D (page.36) >> +/Rect [395.288 273.24 407.243 283.426] +/A << /S /GoTo /D (page.22) >> >> endobj 1176 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [403.597 105.881 415.552 116.068] -/A << /S /GoTo /D (page.36) >> +/Rect [393.624 261.285 405.579 271.471] +/A << /S /GoTo /D (page.22) >> >> endobj 1177 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [390.317 93.912 402.272 104.099] -/A << /S /GoTo /D (page.33) >> ->> endobj -1182 0 obj << -/D [1180 0 R /XYZ 89 770.89 null] ->> endobj -1179 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1268 0 obj << -/Length 1146 -/Filter /FlateDecode ->> -stream -xŚĶšŪ’¢H†ļ}Šŗ„ˆ•BP.J›Y.`ÄĢöN“–¶ˆ.āŒ=OæŅ•ŠźµoD¾ś³2++“sĄƒa«ļ·¾  -§ČPž (<čŹ'AųSpĻt ūĆ’ -D…ē^ åW [Gß²ZČożŪŹ®ó@Č–ŗ\W”ĄdŁŗ’Įƒ)¹žšœØōĄÆü®%č@‘#ąµžjńBÄ7Bž|‡čBrģĀżøŖŹvxFC¶ŒÜģ«“}ųHó Ēž#“W’Ģ Iī°īŪPāQ.~ߏH>Ś‚Ą)’t‚v‘‡üĄ°ū¬Ą3ćĮ¹Uh±.ŚS­‘‰\•č®āvʹņ)·ļ–£_ -,j mV”Õ4ģa-“Tķ¼qąŖņعĢwUŪ³Ęߨ‰ŪŽx4r\VĪāKF¬5ķŸ !‹Yłzķƒ›äēضf˜&Pb¾z&¤ˆVµŹ0xÖ° ĻJ3Ö ēŲdRrŠ 9 i<ŗnõ8cæO‚ņļź˜©¦õ ßó]¤Zͧ¢Ō—Ņ»Qd!Ė)<ŠÜ}Āró|zš\a8Įń$ˆŁÜ#u-ļ9Iwµ``˜–i ļüSyŅeņ:“åyūs{‡«N„ÖŲ3“wfRžśŚÅ~Īõ$į‘+/ävY^»©¶c£Ļ9æŽ!ķīóÅf¶…SS%7SEÕ[ Ēvž¤fuƄ{Z”ŽjžO Ś[mBGõļ­–És¹|³ńOŖkj‘š)ySŒß*:Ÿkwj柝¹Y©«äŃßĪt¼™TPįµ śĄBžŁĪPä-~ćMC _Źb”ÄĢpbLqœ.žįyˆ“†ąć#€‚ĢuzČ¢Čɰs0ѵĢ?ßpĒŪeæ†œĪ¹†ÆŌÕ%śxWÖ]°™Ķẃ™Ÿ=j"źōĄoD”4K)ątŒXMX”ĒĢ›:»ŒKĀF'ż§ōāų{±.צ„F<[yi²¤U`éŒĮ…''«xF¢ŗ!éČŲ ’­Łė($HVSœč8 -Ÿ®#Ķ’p‰MĻÓĒė@‹˜ĢĶ`E&ĪÖżOV]Ė\oSķ1Œcm.DĪ[†»ŗŃzžõ9Ū”Ųz ‹FĖ •źµY™‡Æ{9ö^b„öBł%S^H”¶·ES30LD͆—‚ėŗ·×$:P<Ń¢Õ_÷^yByę AāŌ\> >> endobj 1178 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [220.64 727.536 232.595 737.723] -/A << /S /GoTo /D (page.36) >> +/Rect [419.208 236.657 431.163 247.561] +/A << /S /GoTo /D (page.22) >> +>> endobj +1179 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.41 224.702 425.365 235.606] +/A << /S /GoTo /D (page.22) >> +>> endobj +1180 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.107 212.747 386.062 223.651] +/A << /S /GoTo /D (page.23) >> +>> endobj +1181 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [409.793 200.791 421.748 211.695] +/A << /S /GoTo /D (page.23) >> +>> endobj +1182 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [423.92 188.836 435.875 199.74] +/A << /S /GoTo /D (page.23) >> >> endobj 1183 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [242.936 715.581 254.891 725.768] -/A << /S /GoTo /D (page.33) >> +/Rect [442.5 176.881 454.456 187.785] +/A << /S /GoTo /D (page.23) >> >> endobj 1184 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [223.658 703.626 235.613 713.812] -/A << /S /GoTo /D (page.34) >> +/Rect [388.643 164.926 400.598 175.83] +/A << /S /GoTo /D (page.23) >> >> endobj 1185 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [212.59 691.671 224.545 701.857] -/A << /S /GoTo /D (page.34) >> +/Rect [422.396 152.971 434.351 163.875] +/A << /S /GoTo /D (page.23) >> >> endobj 1186 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [247.638 679.715 259.593 689.902] -/A << /S /GoTo /D (page.35) >> +/Rect [404.702 141.733 416.658 151.92] +/A << /S /GoTo /D (page.23) >> >> endobj 1187 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [230.313 667.76 242.268 677.947] -/A << /S /GoTo /D (page.36) >> +/Rect [380.065 117.823 392.02 128.009] +/A << /S /GoTo /D (page.29) >> >> endobj 1188 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [215.349 655.805 227.305 665.992] -/A << /S /GoTo /D (page.35) >> +/Rect [390.137 105.15 402.092 116.054] +/A << /S /GoTo /D (page.23) >> >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [128.854 633.235 140.809 642.081] -/A << /S /GoTo /D (page.33) >> +/Rect [387.397 93.195 399.352 104.099] +/A << /S /GoTo /D (page.24) >> +>> endobj +1194 0 obj << +/D [1192 0 R /XYZ 89 770.89 null] +>> endobj +1191 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1241 0 obj << +/Length 867 +/Filter /FlateDecode +>> +stream +xŚŻ˜mo¢@Ēßó)ö%$Wnw—(“ĒŧšÜ]Æ!‹%ōZ{Ÿž±V©Ų*&—!ĄĪļ?³Ć̲L7LĒb>_c ^‘°,(ČāEŒ€å;ÖhśwīŽś +ZHą” Óq«‚’_et‹łĶ z“,ʼ,ˆĄ˜»{­ų8™®Œopw…EČāÖś~ WńŠ(n, ³“óœmč +¶̩*ׂlWtķ§`V«żUŌ¶–ЇĒ%±k‡Į$Ä? Ō@mź±Ū g ²ĖßÅpm.żĶ¼Ó…Śą’ö‚‰ū³SEūų~ģ;}nÕĘŅH'6u|Ä!‘u'ŗ”óM ҹ5 ē$>™ėbS›Ø]؜p²™Æ‡fš‡,*Ń„ZŠÉ|,ÜpTē_Ć9,²>I Äiš BL’ )YTNłY±Mž<ń4•R’ōƒeäńĢ“ž„uDōIźhNź*ńuJ­;‹ęö<™å³’ĘčR‰nqmH_wµŁ)IĒÄæp@bŸĪrl^ŖĶ4ÉÜōÕēyŲ ¹œ‰Ž,œ<›Y’̲ŲėæÕsĻ”^āž'ė“ŻŽ\ + +5ęƒ­P#”óÜ|ź–iŲZ“ģ=†tRȂ–©¦ąÓŽOz$ž¦Ķæ _ԁÖÓķö‡š>Ž·‰oAH‚ĄKøõ¾…x{Ÿ&i[“1°ÕA×čõƜ$²?l-7­r!ÖāžnĀ$}hÉR©¦l3WƉ"{«Ć:R¤³JéėwGˆmźÖķØŃČ1m×AVŌé\9¼£cž„Ż'ŽIøØœ“āWé*†#g©Ęīź;øxŁw +Ļ?Ā3æ‚/žĖłöf Śł}pµč;· ą›{%“Ōżŗ6[5Jźl­Ģ„._{rµ/?Ź»2’M_v‡ź8tz9-‡·ÖŗjŪ¦ńS7­‹9¼cX¦5ÖÕžZF¹8ŗŗKo–Wč§Ų¼åī:§ŗX}hó*,tĶ;µāŪį±ķāü*Ŗcrz5å<]¼|‡T~ŸZĒĖńõ®s[ąˆŻtž Ņßsƒ +endstream +endobj +1240 0 obj << +/Type /Page +/Contents 1241 0 R +/Resources 1239 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 1107 0 R +/Annots [ 1190 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 ] >> endobj 1190 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [209.332 619.94 221.287 630.126] -/A << /S /GoTo /D (page.32) >> ->> endobj -1191 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [191.161 607.984 203.116 618.171] -/A << /S /GoTo /D (page.32) >> ->> endobj -1192 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [217.362 596.029 229.317 606.216] -/A << /S /GoTo /D (page.33) >> ->> endobj -1193 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [184.754 584.074 196.71 594.261] -/A << /S /GoTo /D (page.33) >> ->> endobj -1194 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [226.039 572.119 237.995 582.306] -/A << /S /GoTo /D (page.33) >> +/Rect [173.686 726.819 185.641 737.723] +/A << /S /GoTo /D (page.24) >> >> endobj 1195 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 548.209 175.539 558.395] -/A << /S /GoTo /D (page.33) >> +/Rect [169.262 714.864 181.217 725.768] +/A << /S /GoTo /D (page.24) >> >> endobj 1196 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 524.298 175.539 534.485] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 691.671 175.539 701.857] +/A << /S /GoTo /D (page.29) >> >> endobj 1197 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 500.388 175.539 510.575] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 667.76 175.539 677.947] +/A << /S /GoTo /D (page.32) >> >> endobj 1198 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 476.478 175.539 486.664] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 643.85 175.539 654.037] +/A << /S /GoTo /D (page.33) >> >> endobj 1199 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 440.612 175.539 450.799] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 619.94 175.539 630.126] +/A << /S /GoTo /D (page.33) >> >> endobj 1200 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 416.702 175.539 426.888] +/Rect [163.584 596.029 175.539 606.216] /A << /S /GoTo /D (page.34) >> >> endobj 1201 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 392.791 175.539 402.978] +/Rect [163.584 572.119 175.539 582.306] /A << /S /GoTo /D (page.34) >> >> endobj 1202 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 368.881 175.539 379.068] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 548.209 175.539 558.395] +/A << /S /GoTo /D (page.34) >> >> endobj 1203 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 344.971 175.539 355.157] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 524.298 175.539 534.485] +/A << /S /GoTo /D (page.35) >> >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 321.06 175.539 331.247] -/A << /S /GoTo /D (page.33) >> +/Rect [194.308 490.425 206.263 500.612] +/A << /S /GoTo /D (page.19) >> >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 297.15 175.539 307.337] -/A << /S /GoTo /D (page.36) >> +/Rect [194.308 466.515 206.263 476.702] +/A << /S /GoTo /D (page.19) >> >> endobj 1206 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 273.24 175.539 283.426] -/A << /S /GoTo /D (page.33) >> +/Rect [194.308 442.605 206.263 452.791] +/A << /S /GoTo /D (page.19) >> >> endobj 1207 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 249.329 175.539 259.516] -/A << /S /GoTo /D (page.34) >> +/Rect [194.308 418.694 206.263 428.881] +/A << /S /GoTo /D (page.19) >> >> endobj 1208 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 225.419 175.539 235.606] -/A << /S /GoTo /D (page.34) >> +/Rect [198.731 384.821 210.687 395.008] +/A << /S /GoTo /D (page.22) >> >> endobj 1209 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 201.509 175.539 211.695] -/A << /S /GoTo /D (page.35) >> +/Rect [198.731 360.911 210.687 371.098] +/A << /S /GoTo /D (page.22) >> >> endobj 1210 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 177.598 175.539 187.785] -/A << /S /GoTo /D (page.36) >> +/Rect [198.731 337.001 210.687 347.187] +/A << /S /GoTo /D (page.22) >> >> endobj 1211 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 153.688 175.539 163.875] -/A << /S /GoTo /D (page.35) >> +/Rect [199.847 313.09 211.803 323.277] +/A << /S /GoTo /D (page.21) >> >> endobj 1212 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 129.778 175.539 139.964] -/A << /S /GoTo /D (page.33) >> +/Rect [199.847 289.18 211.803 299.367] +/A << /S /GoTo /D (page.21) >> >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [174.383 117.823 186.338 128.009] -/A << /S /GoTo /D (page.23) >> +/Rect [198.731 255.307 210.687 265.494] +/A << /S /GoTo /D (page.22) >> >> endobj 1214 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [156.879 105.867 168.834 116.054] +/Rect [198.731 231.397 210.687 241.583] /A << /S /GoTo /D (page.23) >> >> endobj 1215 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [178.199 93.912 190.154 104.099] +/Rect [198.731 207.486 210.687 217.673] /A << /S /GoTo /D (page.23) >> >> endobj 1216 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [347.348 727.536 359.303 737.723] -/A << /S /GoTo /D (page.23) >> +/Rect [199.847 173.613 211.803 183.8] +/A << /S /GoTo /D (page.21) >> >> endobj 1217 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [364.503 715.581 376.458 725.768] -/A << /S /GoTo /D (page.24) >> +/Rect [198.731 149.703 210.687 159.89] +/A << /S /GoTo /D (page.23) >> >> endobj 1218 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [366.924 703.626 378.879 713.812] -/A << /S /GoTo /D (page.24) >> +/Rect [199.847 115.83 211.803 126.017] +/A << /S /GoTo /D (page.21) >> >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 679.715 392.02 689.902] -/A << /S /GoTo /D (page.32) >> +/Rect [380.065 727.536 392.02 737.723] +/A << /S /GoTo /D (page.28) >> >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 655.805 392.02 665.992] -/A << /S /GoTo /D (page.33) >> +/Rect [380.065 693.663 392.02 703.85] +/A << /S /GoTo /D (page.28) >> >> endobj 1221 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 631.895 392.02 642.081] -/A << /S /GoTo /D (page.33) >> +/Rect [380.065 669.753 392.02 679.939] +/A << /S /GoTo /D (page.28) >> >> endobj 1222 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [383.492 619.222 395.447 630.126] -/A << /S /GoTo /D (page.24) >> +/Rect [380.065 645.843 392.02 656.029] +/A << /S /GoTo /D (page.28) >> >> endobj 1223 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [387.397 607.267 399.352 618.171] -/A << /S /GoTo /D (page.24) >> +/Rect [416.329 621.932 428.284 632.119] +/A << /S /GoTo /D (page.21) >> >> endobj 1224 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [390.167 595.312 402.122 606.216] -/A << /S /GoTo /D (page.24) >> +/Rect [416.329 598.022 428.284 608.208] +/A << /S /GoTo /D (page.21) >> >> endobj 1225 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [396.403 584.074 408.359 594.261] -/A << /S /GoTo /D (page.25) >> +/Rect [416.329 564.149 428.284 574.336] +/A << /S /GoTo /D (page.21) >> >> endobj 1226 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [363.039 572.119 374.994 582.306] -/A << /S /GoTo /D (page.25) >> +/Rect [416.329 540.239 428.284 550.425] +/A << /S /GoTo /D (page.21) >> >> endobj 1227 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [365.251 560.164 377.206 570.35] -/A << /S /GoTo /D (page.25) >> +/Rect [403.417 505.648 415.373 516.552] +/A << /S /GoTo /D (page.20) >> >> endobj 1228 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [385.714 547.491 397.669 558.395] -/A << /S /GoTo /D (page.25) >> +/Rect [410.062 493.693 422.018 504.597] +/A << /S /GoTo /D (page.24) >> >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [381.848 535.536 393.803 546.44] -/A << /S /GoTo /D (page.25) >> +/Rect [410.79 470.5 422.745 480.687] +/A << /S /GoTo /D (page.20) >> >> endobj 1230 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [389.22 524.298 401.175 534.485] -/A << /S /GoTo /D (page.25) >> +/Rect [403.417 445.872 415.373 456.776] +/A << /S /GoTo /D (page.20) >> >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [387.955 511.626 399.91 522.53] -/A << /S /GoTo /D (page.25) >> +/Rect [410.062 433.917 422.018 444.821] +/A << /S /GoTo /D (page.24) >> >> endobj 1232 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [386.839 499.671 398.795 510.575] -/A << /S /GoTo /D (page.26) >> +/Rect [410.062 410.007 422.018 420.911] +/A << /S /GoTo /D (page.24) >> >> endobj 1233 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [400.129 487.716 412.085 498.619] -/A << /S /GoTo /D (page.26) >> +/Rect [380.065 376.851 392.02 387.038] +/A << /S /GoTo /D (page.28) >> >> endobj 1234 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [360.14 476.478 372.095 486.664] -/A << /S /GoTo /D (page.29) >> +/Rect [380.065 352.941 392.02 363.128] +/A << /S /GoTo /D (page.28) >> >> endobj 1235 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [438.206 464.522 450.162 474.709] -/A << /S /GoTo /D (page.32) >> +/Rect [415.213 319.068 427.168 329.255] +/A << /S /GoTo /D (page.23) >> >> endobj 1236 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [432.548 452.567 444.503 462.754] -/A << /S /GoTo /D (page.33) >> +/Rect [415.213 295.158 427.168 305.344] +/A << /S /GoTo /D (page.23) >> >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [408.747 440.612 420.703 450.799] -/A << /S /GoTo /D (page.33) >> +/Rect [415.213 271.247 427.168 281.434] +/A << /S /GoTo /D (page.23) >> >> endobj 1238 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [498.919 428.657 510.874 438.844] -/A << /S /GoTo /D (page.33) >> ->> endobj -1239 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.441 416.702 422.396 426.888] -/A << /S /GoTo /D (page.34) >> ->> endobj -1240 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [381.848 404.747 393.803 414.933] -/A << /S /GoTo /D (page.36) >> ->> endobj -1241 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [389.031 392.791 400.987 402.978] -/A << /S /GoTo /D (page.36) >> +/Rect [415.213 237.374 427.168 247.561] +/A << /S /GoTo /D (page.23) >> >> endobj 1242 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [403.975 380.836 415.93 391.023] -/A << /S /GoTo /D (page.37) >> +/D [1240 0 R /XYZ 89 770.89 null] >> endobj -1243 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [375.751 368.881 387.706 379.068] -/A << /S /GoTo /D (page.38) >> ->> endobj -1244 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [421.529 356.926 433.484 367.113] -/A << /S /GoTo /D (page.38) >> ->> endobj -1245 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [419.875 344.971 431.83 355.157] -/A << /S /GoTo /D (page.38) >> ->> endobj -1246 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.733 332.298 392.688 343.202] -/A << /S /GoTo /D (page.39) >> ->> endobj -1247 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [443.995 321.06 455.95 331.247] -/A << /S /GoTo /D (page.32) >> ->> endobj -1248 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [395.288 309.105 407.243 319.292] -/A << /S /GoTo /D (page.26) >> ->> endobj -1249 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [393.624 297.15 405.579 307.337] -/A << /S /GoTo /D (page.26) >> ->> endobj -1250 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [383.522 284.478 395.477 295.382] -/A << /S /GoTo /D (page.26) >> ->> endobj -1251 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [419.208 272.522 431.163 283.426] -/A << /S /GoTo /D (page.27) >> ->> endobj -1252 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [413.41 260.567 425.365 271.471] -/A << /S /GoTo /D (page.27) >> ->> endobj -1253 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [374.107 248.612 386.062 259.516] -/A << /S /GoTo /D (page.27) >> ->> endobj -1254 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [409.793 236.657 421.748 247.561] -/A << /S /GoTo /D (page.27) >> ->> endobj -1255 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [423.92 224.702 435.875 235.606] -/A << /S /GoTo /D (page.27) >> ->> endobj -1256 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [442.5 212.747 454.456 223.651] -/A << /S /GoTo /D (page.27) >> ->> endobj -1257 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [388.643 200.791 400.598 211.695] -/A << /S /GoTo /D (page.27) >> ->> endobj -1258 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [422.396 188.836 434.351 199.74] -/A << /S /GoTo /D (page.27) >> ->> endobj -1259 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [404.702 177.598 416.658 187.785] -/A << /S /GoTo /D (page.27) >> ->> endobj -1260 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 153.688 392.02 163.875] -/A << /S /GoTo /D (page.33) >> ->> endobj -1261 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [390.137 141.016 402.092 151.92] -/A << /S /GoTo /D (page.28) >> ->> endobj -1262 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [387.397 129.06 399.352 139.964] -/A << /S /GoTo /D (page.28) >> ->> endobj -1263 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [390.167 117.105 402.122 128.009] -/A << /S /GoTo /D (page.28) >> ->> endobj -1264 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [385.743 105.15 397.699 116.054] -/A << /S /GoTo /D (page.28) >> ->> endobj -1269 0 obj << -/D [1267 0 R /XYZ 89 770.89 null] ->> endobj -1266 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +1239 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1317 0 obj << -/Length 879 -/Filter /FlateDecode ->> -stream -xŚŻ˜Ūn›@†ļyн©”Ė.'_چ¦T>¤†HmÓ -X$X»§NŸ¾‹qSœ˜xćb*U²„Åa¾ž˜ę‚Kaą oß!zrOG:šbЃĄŠYC -š"p#:Ėž$}ó>UĮ2Ä»n{@Åå^Įö„ļ‚ĀvB l/Ö ŁĄ3įęŪ’@÷Lšc{VT„Ł6®šQ€{BpMˆŁ¤±­*h„„†~šÜJ*å»7[ <ŸļTĢ.ps4(buw¼‚€ „Šy”(Œc<Ę“i8L+²Ķsļó4®ĪĶeæEtlœlÖĮ—¤%·­Į ī¬cO4ŪäĘ2§sŸ%~%)šäAÖZź&·ļ[ nēö|˜. mĶž^!YĮøŠy+!(®c;u“Ÿd՘qæ_"‡ödčÖ±EVį8Ā9ļąŅĘäNDh‘|…‘|ÕhĀY•tf€¹‡mŪ{•£š¬• -’“Ķˆ”žß—MORcRVPĒTš<ńĀE¶ō—ł¢¬zJ:£5ŗ'™Żī’bŠsRĢH|ÄódI—$³*ó8Q>ŖŻ"_‡Å1°ĘU ŗķĆnČõNŒé탻ĪóŚFć—fnŪžļRņš<=ČSšžļ[p[ŻRŽT£Š"išĄĆn©w~ŲžėųV¶ݧ¬(dÅS]”¤Ž1›żdDč¼øė&’:ü}bl’Oü©eĻZ[‰ ĪÄļO†Īh4“tMüģ[e辤(ŠčI=ĢžÖc<ĘBX—UhcYGj‹śō*gMū£OŅ4ńŚr¦‡ÅC—IŹŲ®øĻ„ų®ķ]_=—£Ÿ&sČI(ļ’4mx~<9½½~¦c¹.†w„$]uƒG,°²»7³ ”Ōņ .—G@*äČóÄX‡Ś” Վ¤MŸ†ƒ‡‚“l¼ĪŸ® փņė…§ėģuÉ÷«™»zå‚6†déóĘ4_2TLh°÷VҜĢß¼<‰ŹØuƒl™žG>–ÉŪ-Šėm9½övĖw/¶ŪŚˆā™ %|ąx®7³ūć3ŽKĢaÄÕŠö³d-ŹéōƒśI“y¾Ęk.Ė_­ńž„eėż¹Ÿ“ŲO_;*[Q”椢KOźåYż~kü(жŽßŪ§ßŖM,cˆ^ū©śA~ -endstream -endobj -1316 0 obj << -/Type /Page -/Contents 1317 0 R -/Resources 1315 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1319 0 R -/Annots [ 1265 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 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R 1313 0 R 1314 0 R ] ->> endobj -1265 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 727.536 175.539 737.723] -/A << /S /GoTo /D (page.34) >> ->> endobj -1270 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 703.601 175.539 713.788] -/A << /S /GoTo /D (page.36) >> ->> endobj -1271 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 679.667 175.539 689.853] -/A << /S /GoTo /D (page.36) >> ->> endobj -1272 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 655.732 175.539 665.919] -/A << /S /GoTo /D (page.37) >> ->> endobj -1273 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 631.797 175.539 641.984] -/A << /S /GoTo /D (page.38) >> ->> endobj -1274 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 607.863 175.539 618.049] -/A << /S /GoTo /D (page.38) >> ->> endobj -1275 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 583.928 175.539 594.115] -/A << /S /GoTo /D (page.38) >> ->> endobj -1276 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 559.993 175.539 570.18] -/A << /S /GoTo /D (page.39) >> ->> endobj -1277 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 525.893 206.263 536.08] -/A << /S /GoTo /D (page.23) >> ->> endobj -1278 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 501.958 206.263 512.145] -/A << /S /GoTo /D (page.23) >> ->> endobj -1279 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 478.024 206.263 488.21] -/A << /S /GoTo /D (page.23) >> ->> endobj -1280 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 454.089 206.263 464.276] -/A << /S /GoTo /D (page.24) >> ->> endobj -1281 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 419.989 210.687 430.176] -/A << /S /GoTo /D (page.26) >> ->> endobj -1282 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 396.054 210.687 406.241] -/A << /S /GoTo /D (page.26) >> ->> endobj -1283 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 372.119 210.687 382.306] -/A << /S /GoTo /D (page.27) >> ->> endobj -1284 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 348.185 211.803 358.371] -/A << /S /GoTo /D (page.25) >> ->> endobj -1285 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 324.25 211.803 334.437] -/A << /S /GoTo /D (page.25) >> ->> endobj -1286 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 290.15 210.687 300.337] -/A << /S /GoTo /D (page.27) >> ->> endobj -1287 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 266.215 210.687 276.402] -/A << /S /GoTo /D (page.27) >> ->> endobj -1288 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 242.281 210.687 252.467] -/A << /S /GoTo /D (page.27) >> ->> endobj -1289 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 208.18 211.803 218.367] -/A << /S /GoTo /D (page.25) >> ->> endobj -1290 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 184.246 210.687 194.432] -/A << /S /GoTo /D (page.27) >> ->> endobj -1291 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 150.145 211.803 160.332] -/A << /S /GoTo /D (page.25) >> ->> endobj -1292 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 116.045 175.539 126.232] -/A << /S /GoTo /D (page.32) >> ->> endobj -1293 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 727.536 392.02 737.723] -/A << /S /GoTo /D (page.32) >> ->> endobj -1294 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 703.626 392.02 713.812] -/A << /S /GoTo /D (page.32) >> ->> endobj -1295 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 679.715 392.02 689.902] -/A << /S /GoTo /D (page.33) >> ->> endobj -1296 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 655.805 428.284 665.992] -/A << /S /GoTo /D (page.25) >> ->> endobj -1297 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 631.895 428.284 642.081] -/A << /S /GoTo /D (page.25) >> ->> endobj -1298 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [367.193 597.305 379.148 608.208] -/A << /S /GoTo /D (page.40) >> ->> endobj -1299 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [347.268 585.349 359.223 596.253] -/A << /S /GoTo /D (page.40) >> ->> endobj -1300 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [350.317 574.112 362.272 584.298] -/A << /S /GoTo /D (page.40) >> ->> endobj -1301 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 550.201 428.284 560.388] -/A << /S /GoTo /D (page.26) >> ->> endobj -1302 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 526.291 428.284 536.477] -/A << /S /GoTo /D (page.26) >> ->> endobj -1303 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [403.417 491.701 415.373 502.605] -/A << /S /GoTo /D (page.24) >> ->> endobj -1304 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.062 479.745 422.018 490.649] -/A << /S /GoTo /D (page.28) >> ->> endobj -1305 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.79 456.552 422.745 466.739] -/A << /S /GoTo /D (page.24) >> ->> endobj -1306 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [403.417 431.925 415.373 442.829] -/A << /S /GoTo /D (page.24) >> ->> endobj -1307 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.062 419.97 422.018 430.873] -/A << /S /GoTo /D (page.28) >> ->> endobj -1308 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.062 396.059 422.018 406.963] -/A << /S /GoTo /D (page.28) >> ->> endobj -1309 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 362.904 392.02 373.09] -/A << /S /GoTo /D (page.33) >> ->> endobj -1310 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 338.993 392.02 349.18] -/A << /S /GoTo /D (page.33) >> ->> endobj -1311 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 305.12 427.168 315.307] -/A << /S /GoTo /D (page.27) >> ->> endobj -1312 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 281.21 427.168 291.397] -/A << /S /GoTo /D (page.27) >> ->> endobj -1313 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 257.3 427.168 267.486] -/A << /S /GoTo /D (page.27) >> ->> endobj -1314 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 223.427 427.168 233.613] -/A << /S /GoTo /D (page.27) >> ->> endobj -1318 0 obj << -/D [1316 0 R /XYZ 89 770.89 null] ->> endobj -1315 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1321 0 obj +1244 0 obj [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] endobj -1322 0 obj +1245 0 obj [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] endobj -1323 0 obj +1246 0 obj [769.8] endobj -1324 0 obj +1247 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 -1325 0 obj +1248 0 obj [500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8] endobj -1326 0 obj +1249 0 obj [277.8 277.8 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] endobj -1327 0 obj +1250 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 600] endobj -1328 0 obj +1251 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 -1329 0 obj +1252 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 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500] endobj -1330 0 obj << +1253 0 obj << /Length1 1629 /Length2 9022 /Length3 0 @@ -7205,7 +6718,7 @@ FS 4®ZŠJ†ˆ¢ä{‰Š˜Ÿ“dĀ[[(#“‹öнżpĻ{X»«1žĒüRP|9ÓĘ$ʓö¬ Y—œ]E­#›£Šr„E[ӆ­©7øŃÉwųģõ¢TōĪļÉā¢ß7KPxeBTU^Ł9UšśzėšwĢɘźŃ²'ŌöØe(pc9“ „Ź~]Dø,ŸčS+†!«X€¦¤ŗęĆ¦CĻū^ltG§C°źžQž-›ü#±‰ģbDö`LW/žįEń”Ś1łlŃn'ٽędĒjņģ(Ŗxe‰ō-%¶żø‚N$ö©Ńö›Kiā.MłcŠžt¦Ė«üćZļ1ĖĮgõz żŹZ(ŲŲós{)˜ć2œ:ūˆŃŲ5»NČF+ŽI¼Ļ_𬉤㪙h+Š©BV"|}©ĶY(śÕĆg@!_‘Gü+eŠ endstream endobj -1331 0 obj << +1254 0 obj << /Type /FontDescriptor /FontName /AIRNDP+CMMI10 /Flags 4 @@ -7217,9 +6730,9 @@ endobj /StemV 72 /XHeight 431 /CharSet (/A/B/E/F/I/M/N/P/R/S/T/greater/less/period/slash) -/FontFile 1330 0 R +/FontFile 1253 0 R >> endobj -1332 0 obj << +1255 0 obj << /Length1 1542 /Length2 8229 /Length3 0 @@ -7261,7 +6774,7 @@ T µ@Ļ‹Éų́ǃmW”ł=j5¼,[ć’GķõĆ endstream endobj -1333 0 obj << +1256 0 obj << /Type /FontDescriptor /FontName /VYDKHY+CMR10 /Flags 4 @@ -7273,9 +6786,9 @@ endobj /StemV 69 /XHeight 431 /CharSet (/eight/equal/five/four/one/seven/six/three/two/zero) -/FontFile 1332 0 R +/FontFile 1255 0 R >> endobj -1334 0 obj << +1257 0 obj << /Length1 1425 /Length2 6103 /Length3 0 @@ -7309,7 +6822,7 @@ Mqj oö‡|šģ€$Æī+lÅ鳌ƒ#»ŁŽ*”³nä¾*.qŠļf!-«+~ōIˆŪŖqhŁ6ŅÖ܌oŹlĘź8H c¢"¹ŠĄ« „„gŖĘ:­|¹#}^ęJŹ„xM=l^ąšNŠJ–Z­p!õ?}Įw endstream endobj -1335 0 obj << +1258 0 obj << /Type /FontDescriptor /FontName /NBBWCW+CMSY10 /Flags 4 @@ -7321,9 +6834,9 @@ endobj /StemV 40 /XHeight 431 /CharSet (/asteriskmath/bar) -/FontFile 1334 0 R +/FontFile 1257 0 R >> endobj -1336 0 obj << +1259 0 obj << /Length1 1399 /Length2 5955 /Length3 0 @@ -7363,7 +6876,7 @@ P5C ēŌ_WēI‘”bÆ'꽐˜²I¤Æ‹pŪ'ró©Ł}ęŻ!ńĖ=›šÕDLĪQTŃ>œåKńnoźÉšˆ5”ŌV5Čć Ģ·ųÖGøF#2Ķv¼Ł2*¾DzV?f04Į_h–-¹s$Ϝlot*!Åż"äłĢœµ%Ó [ĄV¼Ž$±ÜDÜŹõiEÉŃQ/bsfĆĻ®“43:¤œ€öE¢žŚG”sW%Ż` 3q‘zĘŲ9œzN§Ÿõŗ¶Ų—*Į">’õĪõ\N‹jmœy89¬ń}E9wŚnYµ:’ų'øHČßml$ś¬äer endstream endobj -1337 0 obj << +1260 0 obj << /Type /FontDescriptor /FontName /LAJUWJ+CMSY7 /Flags 4 @@ -7375,93 +6888,110 @@ endobj /StemV 49 /XHeight 431 /CharSet (/logicaland) -/FontFile 1336 0 R +/FontFile 1259 0 R >> endobj -1338 0 obj << +1261 0 obj << /Length1 1612 -/Length2 18157 +/Length2 17771 /Length3 0 -/Length 18996 +/Length 18612 /Filter /FlateDecode >> stream -xڬ·ctf]°.›۶ѱm[ol£c'Ū¶mŪ¶m''·æoŸsöūžūēÜżc±fUͧžŖ§ęk‘)(Ó šŲÄģlé˜č¹ å,lŒ\œdķleč”f.„l0ddĀŽCg ;[Cg7”:Ą„P`LČĢLČÄÅÅCF(lgļįhafīLH©Ŗ¤NECCūŸ–B<ž§ēļN' 3[Bņæ/®k;{€­ó_ˆ’ėŹ”³9€ŠŌĀ@(,Æ ))'NH).§J(°8Z*øY[ŹXlT„¦vބ֒± 4¶³5±ų§4'śæX‚N„†„Nöc‹æŪīĘū\“„öG '§æļ„N„fކ¶Ī{ąlGhaklķbņævS» Ł;Śż°łėū ¦`ēäģdģhaļLų7«‚ˆŲšt67tž'·“Å_7”éßH;c—Jś×÷ęÆ×ŁŠĀ։ŠąīüO.#”‰…“½µ”ĒßÜĮģ-ž„įādaköŸ h f†Ž&Ö'§æ0±’éĪÖIųæUohooķńļn»£ž g'€µ)= óߜĘĪs›YŲĀ0ü3(’¶¦v„LŒ’a7q±’Ÿ>W€ćæ ¢ügfØž’04±³µö 4˜Ā0ČŁ9’MIHł§2żŸČ’ ’·üß"ļ’?q’«F’Ū!ž’{ž’+“˜‹µµœ”Ķßų †šļ cG(CųĻcmčų’ -7“±°öų?lųÆź€’ ł’#élų·‚¶fa¤gü£…“˜…;ĄDĮĀŁŲœŠŌŠśo§žµ«Śš­-lż·™„tLŒŒ’ŧbnaleūOėŁžĆ°5łÆä’Šō/uEUM aš’z§ž„šW{gūæÄžG)²v&’kń†;”ŻßHĒĢĀAČž7!'“÷’!Ūæ0L’¹–5tv“p'Ōž[2#Óæ…’ē?Wŗ’FŌÖŲĪäŸYQv6“5ł;^’ĖšŪŲÅŃńÆŖ’žųæ’ĻõæƒøŒa֖ķŒY¦f¤9×bä OŠh÷÷2Ū—4ØęūUŪõų¦†ķrU|ŌÓ7Nsµy,ŪJQö¢[Sō$®óp½IØśņ‘·Č;8hŽōJąÓ.Ō{Ż,Źģ€i±3ŖķM**é@ąMw°8BŻ9–ŌP@Š&¬š}©ü.­'ś½ā pŚL»Æ„É`HK“f>%ް8”ęŲMĒ •Čģ‘ų’üšrY ¾ņ…ƒ>»ĘŠāŲ}ɖU|Š‚ŗöG>µ«rÅŖóµ„˜ķƒŽĮF*؃ūšĘmf?a żV#aĄv<ÖĮDt›‹XKŌqėŹæ½%]Ī#Ō#ģE&P’rÕFÖö&—1ø°éƒ©ep7yŽ\Õ\gFf|8Qs1^– ”‹ž©śÓ[ł;UvčéĻŽ$Ģ·ļęXg•™4ū{›“’Ć·NNęÉ1æ2#RøC+‚¹ŸTčŽZ³½EŖD’kš“»jʶ<…0ÕźzŪ_µõKCMćH«ŲS›Dō -‡fŚåŻå”Ä8HO(xw‚ņVZžFšØ™Ā»3kó”[In0bZ ˜„Š;‹Ż¼ßč"ĶSģu3;ަķ-ś8%S“¹™¦Ż K'ÜŸß §l/fPžżS4&Ęx̊\\Uo"Ā×2ūg ŒKĶpœ§żÜkBp©/ę:HY={Ÿ#™žixgõģ²Õ‡4ī`Åó†%§QõĮ’×3&Aķ[ø ģQ@ø»m@PČFrK×öQJ«B˜sOM!Œ%3ÉāōbŅ2q$Kź{¼8`|νų•G £‹LÜ­®§‹ÅŒG»(šĶo™ĒµĖ8Ī_|VQ³Īa TncöŌp(ߎn!”]ŌwŠˆ3 ŲRęe„nߏg¦o샺+——å‡8;¬/ķµFUę ³¾ŃĘ~·u{7I>į#Rļg0ʾēLs‰Xf9+Óz‹:ē¶čљ‡Ÿ™ ėwŁZÄå š/ !†°_ –ąBBg™[ēQEGG–”:’ä>t“Õ†Ź$ŚŅ&ÕŹENń„Ч¹:Ev§Bą@•ęĶ ‡·.Ž\TʁĄģ<‚L“­&FżB5…ĘĻ·ģųŒˆ…Ć™ Onœåùģ‹ „1׳5é@=§śą‹pb˜FŃ_‘Š¢?Ķ‹Ęn)„§; ŻtC”!7ńąļćqæŹ™Ė–į["†ąuŅ9Ą]žµ±KŃ7s¾ ŹćØÜāźB($$æÕ” zr(Ē»¦ķ^×ÄBr¾`Ö»Ų=šTĖ®x0ńųbÜlQ:øžtFѧ7%“X[&(•™KķWB\Kń 5ä÷UZ+eeĒ©‘oŽvā‰YP€œ,īńŠ-_‘CF£Ś\…Ÿ”e6ŌŚģV§Ųż·¤<$čG۟^£~)ƦB»ģ—('†œĘ9ģDRūŻ2ĄyPįP›šO›†j‚c ։@B@+hįčµ°S@šhĘĮmĻ”ŗóSe“1É_P4”i$t® ¹–Ū -.oD>/¶+Ańø‡P ØÅIōšćYŃhŁæų%g¶1ĄõB’āYŻZpd S­BõČŌm>ø9Uśfō€¤Sց -¶opv«ūāA… yłäżōÖ©ūˆü2@ -éų·³ćE¹IŒm@Vćw7Ł|B›’¬öŻ\ā8ä©3ęvģÄw,z J!¶w\5Ž>‹5…C±7yyęu_*JŽüF*“ćÉś†§i…ʦEŃHŖoź6åŽĄyČf";ö4PZ\ļ—ņ—,F·~qNx6]³·E)hv¤óŽŽqū„ »åŽ˜TŒ7ŃŚk]C,ö59lm×^žBQ·ŅS° MĄöżZyŗ(Ņė¾]ß“’2CÄŗØAŒN‚· ­Ii#7¢b°ÅŠÜŪ'ÓķÜ-ūņQ©aódžb>ų¤7Xģƒc™ežłŽ’%-­Ć–Fo]98fj©„@ŸŠ)÷єM§,_ #Ł„•z·™°š¤›We+ų›ž'8’¾0@Ū]RŻ_<óV‹‹zlW"qMŻ v'ż‹Ž=f“郚:u3†¤“Ä4v5eŗn,”ō±Š#LŻX @-.ĪÆAāÓśŗi=Zš?«wš¦‡ŌÄMA@2¬œā€{õ¶)ŗł™Åŗō 0“m—e’‡wūLąų­TZ8ššĆy’āb$s6€$Gy×Ŗs@ 'Ū›ŖōŌč%?CCАųX:6éēSž¾øŗµŠžåµ]ą/īH[›GĄeÖ³©@ õŌņJ&Ŗ›ļ@Ź -hŅW…” ѵʒ½ų„ßŅw£!ä…Š2d1’†AMĒ|„č,š8‘ŒĒśõ­į93”Į¤}׆Ké<'*-Ą¾9žŠ“˜ėöū›æĒG"žhō7Å®šŅĀ@łųžÄT†–p{čĶz‘“§} OXMøĶ”ł©Š9ó‰)Ź4aźQWÖ̵„Šr©­‡œ@ÄĘE‘ļ@A»ęahÅņ½%/”ŽUĘĖŒŪؒ•Ü7C4ļ †­Šź–Į{"Cš¦ÓeŽśÓtąÉŗ\·ŻčcšŃyŲ(•Ō`ōlś›ą‚ß9Ęž ˜[®$µb;a7SŁ19<|{­Āōś ó©Ų;QŽž#boQŒ?Č^±Ę\ŹŹgęÕZ;Œ™ÓčA9vV’ ]÷yöšŻz)øŸß"C¬d† ÖjłgZ%¬#”ž†'s}jWF,’Y:A‚EQĒÉÄ®4-—>²fžWc©R¼ƒTŒ$>Õhõ”æ xĄļRōOO~½’ėäÄł^ž7”ƒ5źØ^×¢G–Ō«4ˆ¦ŌL‘¾V–·šŚ›÷KI7ź6ŽłēĘR¢A"Ø ‹ĀjąŹ%sN(ĶæNŽˆæ£³żC×÷ä#ŽR³[ŪįŠirbūTuŗŸÉzÓ2p¦…EĻ$\Źš$®rk1«ČŖ%čA&Ä×.±ElaDS­v‚1qüLB'e?·Ń¾ż.ŽT·"vś#-›‚ÉŠKhŗ¦ŽÅš·+4{Į( ł?‹¤ŠŠO5S[ėKŽżP{pŁD!·ŠčœŽ•A^X½›)‚+£ķKŸ Ō…$łĆū4p9ZK­+}µÉ&?ė??ć…įØ ÅĽšK”f”.3ŽęhøØ$«)%ō.żv“r1!€®‹ˆū˜į‡ž2h¼50| õ!Oøž@ēPy[š•pȑ#åø ŗFæ G;ÓĘŗ‰Ję/®;Ī©C„ż¾Äßx/mEĶPčµ’*/U„Ś‘>ĻÜfį ōģ¹×üeåŅõe·ążĮe2WŅ2ÜĘ+‰RRs‡Ö$Q±ažĒū yŠaOEv‡U<ą‹1Ž›č|ӖIž/æ‚7#péµŪupüŹ_ėyū ōļ»<3y¦6āŒĻU¤āøé˜]]„Ÿ« Ź«ˆ’ģŗ -9WĘIõX !Y[ŸżD ˆ‹ęåÜæŻgķ4>¬v]~Že××¢īGA€ó%üPĒŌ)“¢ł‰ĪŸ•–2ELVĄ7Üż„"X]ÓöŌÕņ0u“XՄÜg¤YgE%‚ø: ¼u:łxŚ#;čOŽKų‚2^ė³®ØēĶ„,qŁóŪÓ®Ø%ÖUyŸI˜“šC:™+ -µĒąc裀ķG÷ŹiŸ”R¼¦[R-†J3žVy‹PwĘ”2Żf·U˜’ky’ā÷R“$#a0ÕŖjČŻ^ŹVø]Üķ°Ģ)ģb0ÖK_O¦ŗmÕŚDGʉQ„É«•9śP-M[‰ƒļ~I -°č¾»gэ@ĆŽÆJ®0š/×N¬Å}?€½ˆv™Ŗ[<ŲÓ黾`ōŽi3E[üoÓ­4fÓæ3yx& +ģWRwŹŹUŹżTŸ ÆŗM4)TS•5ŗ×j$Jē0*¶$!H “‹ĮYljŹŖö„² f>ėfźŖ$ō»`÷”œšČ«pXz ž0$ź\ķ#)3ŠWĪ1æŪ¬ø_^܄¹Ui¦WÕ%ćBY#ś‰Ā… ]’,h$ˆRi›h“°”æj‰…ģGPĻy(ł‘Ži£÷ŸFWāŃ{øŻu‚Ž25™5gHtūŽžm“Ō¹Ō¼²VŗŠy]Ė£2ļp˜ć3F_&ń•(łBDå°6—DŖŹ µ­1’Ē™ūż¤Ņš$Gi į3 ø|&½Ņ^‡ -cÜ)°s7t±ś·ż.‹”æ Œą”Ą+«į‘ -„@c¹d2rŚ"õ8l“½lG'ŽOt ,Ø=‘O_«CutO"yä~Źźę‰dķ ģ MG×ý%CןVĶ×et ²_XŖVMf˜LØcį*&%Īķ§LgŪ<Č»ĄĮ ņĪéźŲ| ˆ%«ÓšŹŪõˆówPIWI•į/I–æN”•mcC'K”‘,…Š1Ų²†ż‡bµ H»˜”¾… [Høčłcb]=-½¼ˆTˆ‹”—2³°Ņ^>38ÄÖk;²Ń]ŹŪž8°3: –k2G²k>i‰‹"Ē­F³˜“Ł.r«{¹½ąT„ŅņBLå‘͈®Ó1‚Š­*ĖČ-?J”V¹&l±c”„Pē‰J s«žTÕxY—×?š<µ}i¾¹Ŗ +zĆžńC:žjIÄ}|*šĄųMēūRõ!ėŒ–8"ę~ņźž³BšŖĢ:ķ£L„Ŗ¤5>`˜Ü1³ĀīC#-ŒŌö縔ɩaZ#4k—č¶Ńdõsōś÷TI(ø+^ÆĄµMlęuų–[ ƒ–VöżµÜ¦¬&jž9hę7<ŌŪ{Š ō9šßĄn¢ęČõŪ4Ź7,yF]]²±Ń,Ģ š8Ÿ3lå‹D0ś~ńCoU” %k¦ŠnQpgŽįöķĄš 湐L‚śm­k? ~µł2lßp2,ƒåMN\§¬§ZÜŗ@¦Ä~°ĒU |4AVxx[ųŹ3ÆŖsµĶūŌa]䒞ø|+`G{Ģ›*ck% WLŌh';Ę|®M„¢Ī“]Ūŗ'@OÜķō8hc⭳̸P¬+ĪÜŲ0HØłE*Ń)‹hh(‚<Ts’U^Ē”ĄŽ"l4­ >M”ēT¹Ėh&“ģ™±¦j'#›śįv«Ŗ+Ų+1ŖÅ=Ģz4l6¹E›3‹ŽVĀ‘NYWGł«WyVkUl?É\ -é£äDF9t²’!BŽĆ“¬ē«x°³£įV®ĄcæĒ×օ˜ƒó­Į’įß·a”ŃVńķ«”ŠEj©Æ5°Ū‚>03“6ŽŃ“”ÖžÆ\bć č³hhi@Ē(č;s‘P‰ē•ŖŪMM„IņH*ōku‹†édžĖ$rŽóm«Eß0vśŚwج” \ęEq¼|–vęJFä Ė -Ÿę™zęN².DzžÆvJ¢>Ä -Ał?½|¶Y^Čn–W#&‡_Õ+f—źßø‘ŗ šn(ÅBØßb~»§‘‹mDK€LĄ[øÖM šNvŖ’|ē¼ۈHź^\ƒKYhA ½lg­å¶»» Õ”˜xc¾éxˆŚ)ń¬ē‰i°Į™FžŃÓ»ķG€mbųöb=ˆ³ŪcxƤ)^×čžEŁ?cÉź† \¦ÕnvH„¢čȶÅ,Ü¢fĻ|ß(›960ā"@†“ | ńŚŽ¤Įžž2q{Ÿ°·÷•;ōłvŖč·™× ™Õpz<öpdv˜óČüŠć]›q39ĉ(Żiƒ¬xāć‚,A]D–×>Æ “ Įgaļ·ß¢>P£øVÄR÷\łhūҽž IĻͶŗA«>uŚ m˜2j1ŗÕĆį@k©“W‹ė„e®±ā&,愊CėæEG?>ą—lžįPt{ĄŹÕSÅļ»ēź=śXŻ„j€$gĪ58' qėġ{^gĮą­Gś÷­ł›¹ŸŠ [(ÉmimŁ1Ą|±ü‚Ź›č™)½e?ļ|“«õĀó—eŅČ/éF žTłŹEń6%į]N*8JŹ3gg”ĀhDė—AU‰P4š›ŅGŗQˆƒbBeĮøŌ7 Ā«(‚<µ„ÓŅ${ųóāó#³-ƒ}B—÷ćģx’[b16½?)šŽAń/į¹ÖŽ/RÅĒ>֏ŒS/łxśęG®:?mU°ł²«–= æÓWŠ5J[™ū~‹Øņ K&«Õ3 -ßÜß«äÜŠKBÄfāH‚M/3¬õŽ9µŅ-ˆōL±ļ„įĆZ5#kģƒj$Q—)ŅAĖY  ä™fÉ+1 ɏ@nþ^gC,‚*'bŃœ V=¹y«qŸ$Ćż^ĘŠ­©Wuv㨄0÷P15Ą²uöüöõ7ŽöļÜXŒäųŃ;/ļģŗ4·žDwp‘9ĮBD4›AwȰ'čuĪÄ(ÜT݇ÕĻØQJŚ]8 śõµZ‰ĢAR…?īĒž3äz¤C·ä×TŻ{š7aŲl*ĄA§ū3ÖĄ¾‹81¼ ÓL•€‰Bg¼n:de­c銯5.£Q -Ā—‘ß·i”ż¹å„+Ŗ‰æ“ŗx~L4Ąä-<7l†ŻĻ‘$ÓE ±¹\+EƁ5ļI¶īœ}2&öżō”][ąžD||‘–iś 9w9ņė ÕM~Å*…ńLūŅĀņFķ5Žd#€QzŲhuъ•^[‘Ž[XŸz›e ŪŽłõ’¹3µ6Svp =‚~Yj@)[³ųwłØTS ~MĶ5H*ģĖź‡="6Š$“„›)y÷d×÷IkĖedJMƒ¹_tįÓć Cæ…wŅ·­R]/åóDemÖŽĮ”¦—&č‰h€ÉąĄOAö;ĪT­×:d?MžÖō0h¹.iœŠB%ļžk%Ź“uĢķÖØöŪ¶Ż µŪ¢ī$ćūøéU„ -ß.ŒK÷гØ”H€œ&I\ģro–:ˆ¤PP± -Aሱ’„Ceå|×É&łZą‰‡RĮYׯł -ßE’Räō=¶£¤%+—¦†Yä/ažK'1µ74Ä(ØČ”Ø ä#q‚v虣7Ž"Ķ–4šlšžŚŸ·”s -ŌRT–E%å‰ k·-ųÕÉp S©ŠĶŃa+ŌśŹ`!ó)ļ§cB•Ń.bĶ~F›kēœ÷™Š!ŗi:…yķįū±˜½öå”yM“^)§OVŚ8€|óČÆ——Ē_V©Nī劳Ker‹ķ„^Źz`Ź•]m¤L.a¤Ż‰2,dĶAżüa¢fv/łįUd²§L/”LųĪ£ūŻ3•`™g ŗ»uƞFļ@ȝh*&¼æäźžŽuė"78XŚ<]m°ŗö}6CŲéB[}ä2jUä’ėB٬4qöYm©ĻčY—V$Uc?–1,Åø4y¬Cģz…—Ó;5&HĦApåxžŻö'lŖæOÓ„é6!*'šŌ4Pčssz]Fa|÷zEd4z½Ē%ł„Ń\®¢Ü%Ł]X¹}Ÿ³ĖŁi‘w÷C,vŃżšƒS¦XO;L\Ū‹ž0Sŗ;¾`ŅćJ†ŲśJeɂŅ~%gRŸĻõnxŌļ?†d"óͱy›¬.ĮĪ@­Ę'&ę -ąT{³q”y_]†JīµČ¹—(…yĄCĘćuęr † Ų;KÕČēHUŪīń†&®Ć4¹įÅŅU‡čš?WäG•ZŸa[ƒb›xŁØ¹š‘ś•œƒ{ƂW2œ=ģkŅŻ™‘µżŽ4›!ŪŹ’“„ŗƒĖVk_9N/£Ō‰DdņÄZ§Č”żrvI1}ČķI2™?$F_FCH—]~øĪž²c1!^+]p|œ_ įŹ{¹D–T§,qšēżĶM?2ŒFž­“„ØkŽM¾“_mÖ,ōøņJų‡“ßüx˜ŒÉzB[¼¹_=n%Ū>ń`3¤U}C›œ ?Ų<“{LŸĄ#OlĮĄŪÓĒ$˜ĶOr•]Œ»C(J¬ķķ8 ²[Ø6ö|įś‹`xh QčĢѧ]“łaµāœ—±Õė¢Žļ®£ź”ż¼sō«#(&¾R Ų3.Ažē¶»ćä—j‡Ūh®“RęŠ7²Œ‰ŠŒDņm\²nM9Ā^ˆĆ¼Ę##Ū5ļ/śŹ“ŪŠtwB› h”¹Ķ(%R䱓QĘ!_¦ńL(Q˶žb%>&‰īęÜž%‰}ˆĀ„,łp«mŠ:TŪhiŽ Ö2(xö#Ć7¢;>Ɠ ć‹,˜½ _;&H3‡Õd”4¼¢”(VŠBō{ỦßOr‰clč,a>Q>Å/1ƒ¹›6ŌāŲīÆŃ]że!(’é~_u¦…­ -Wą“7õź¢wߔńŲą¹¤Śo» Ŗq@L˜ ąŪ &·%-ZŽ7wl\׃3*ß°£¾6Ž«%B3 -NåωŌ(žõ÷Nū$qUxš—Y5KŃĆĮŹŻśƒĒƒ vĒž!—`:÷‰y¾éG~äŸ%@`“O=U•¼ž Æ=Ķō]šbidgÕ›go—Ė«_§dš·aQωæTZĮA¬/šģCW#nfĀXĶy®ė…Hžš@”ƒ ģ̦%B.I3ŽŃ ešˆŒ¬īÕ±łMjEšŹM³0H¶«I•æ@n1{"ü„g–y…ĆśhG…į -Ń~łŸG&3ŻW72(‰]oX®(ųˆUļÆBQ«Üó÷Ņ^(bąr3J;˜BÕP\¹”éC ‰£™„Mpš Ŗß•ˆ ZHͤšß;YE[Ż_3Œ²}”L6 r&ĄĀ‘V@™Óą·NÜÆ–oó&sA8 ü¼OäŌńg1žNϰ ŲæÜCxŪ+? bü—ڵ&ēĀ®źć„zś†™xn§Ø*ćęœ„üŖź.„é*3”בY[nČēvÕ‚Ļ„™Žø¬…üŪ9p4ėČŠżM]nło ‚¶ćé,®zē‚Ķ{mdG2vŪ\¤cŒJä 1¹óyĄĒ~“4ƒ -—lzņŪaŸgcōB`'MŤœcģ;ĻZdNė€nņ‰c6żQ6p8łĘbĶ.óƒ¤ļœ©Ø Æ=¾ØDS[%łÓā¶Ęæ&L×<ųŁ‹ŗ©|>@VO—¦%pF'uOżm»˜;ĄÄdó’<?wŪĘgP’ŒŒ„ŠEE+"^Ņ4HÅC¢ķ@ūVśj„ŚÄ»Y=ĒVv-…źkµk3£·82Ł‚ÖåūŲé<ūJؤxŗyZéRÉ<.z -źĶyŠ$WßĖWR®Āéß©Õņµ—zģ?}’ź_|éĖżfk¤łčćCؘ•x_ć ĻČ96RóYōz•6V+” *q8£ø†Sz‹Įmī˜ĘŪ,~¾WłVZ-ņö0 LŒĆķ“nq¶żjFŅĮ¾9ū:]g{gˆ•Ž\z+Ž*ģ—•;ߌż‚Õ ic°%‰GÅśA7S콐‚zf—Ū ‚^±ągķe›†TD3ōjĘ௛sškĀń:nĖ£øożX;Iü”¼·õDÉ]I`ē&LxöwüŽĆEš -Žeü|S*ĢŻ"(”źCjĮqĮä]ne‡™ė–ę»ų(…OŻ/Ö׈»«™ęHR°\­—jč20”Ķ”µŽÖ7Łųžh'§µŅ®ś™oq³K£ś„u£ö dy9;?a×CĀżĖ²I…ž? pö,$WڧgDü7 §+œ]ó’`‡…}IēulxÉSĢ*G+D€Ć]CFŅė”…X]“¢@W†Ÿ»ź«f,Ź†Ź©lóŽōU¢Ķ¼§ Ź`ę,ėŽįyŅOŽüéźÅ/±Ń;nŠÜµ3ŲØ?ūc-\[TøÄy ÷«=DR„™GU\w¾’¹×_cčcœŽ9~•/-G„¬ō”"Š2į߃NV‹=\  -½ -é÷ń˿2½ąF6Žė(ŅoŲX®Rh¦(”TįĢ›|&˜m‡”Ļ‘ ˜ŗ£Mb”dé’Ē :ņvź,’šÉ#u{‰qiOƒTCB©›KĒ3žäKĆ7®r]‡%ņĻ&Ģ~WĔ­®yųąK»*ńG󏒬{Æa’žJီˆ„#™Žø„ˆ2 ž×lü11œJeŹ¢‰{üĮ¬Ci,k)+”)Z$š¾v­ŽJŖć”øEĪœ&ƒzuÕ;éÉ[ž€‰q¶mućl›ż}‚„A -ĀDŁV_“\A|–åžIŃŃÓeüRŃyUk™¦dp–V|"­`;M#ė`Ek6œ2āØTī”ꅓéü’BwØœ1UžĪ\Į6¼Ł“‡®’V¤ö˜P#(”†Ę(.S.¹æidZ„/ęéÓ=n\‚…÷2:WdJØź½g”¤‹+N-č/rŪ>ŗ¼c֐ÕH“žĶ« M»ŖBž#»Ŗc¦BĒO§ÖŻ!tHkųdõ¼m.†A$§ZIż9žŠ šō[Sų~jöi“q]I¤`,eø$°ƒ€ŽŽrX`§¬‰’‘7Ģ -%;-6Ąd€Ÿø‡>Ū³³zó:˜_śóń×õIęõP½mŗż!ęōµ”<Åaœ•š¶ŸCdĆ«”tgGéĮL§™ų°Ń -‡ĆśŃJ[U8¼Õ°X™?ęlIī65WÕG~Iš±&Ŗ` 3•;•<›ūGmĘŪ³?õ‹ļ’)ÕÆ·4­n ü“¤‰²{mźł”ˆ4/ÉÓ¤ ą@dwšĒŽX'˜pä]Łiž &UĶœŠ!ė#…~ųpł¹ŽewXDįĆ/y&ąŽLÓż³łĀéÕE<ķ²šÖŹUHŹD*‰Ćčõ°ži1”ø‡E÷Ր]ĆT·8( å½å`Ā–ŗŽ;‡(p¬Ö®§œt~T,¶³ L2ņ)˜…øĒ÷ø˜/ [ŌÕ6īOj6~ČåōJ# 1¾ŻF@œ‰ś± -Š%‰ÕvĘ0$k³Ø|Å|>ÅØŽ™_nž—©! ,>M\ÖéįĒŪY‰M`üÖcšżęŒÖ¹ć§łįłiäBŒ_§šš‚…EćĘGąŗ­Bh‚öŖ>¬ÖkfYr7ö‡}ĄŹÉÉēxń½ś‡™{$gߚøjećĮ>ųj>.·ø -qś}ēÅ"QU”äC-ī0…„‰ĪäÕ0Ŕš -ņ|Ķ0+ -X’˜IąÅĢnžaD°žI:Y‘ßž…}GÆ9JU|TŠA9żgāüģ—y¹“4·’Ņ1q‰ŠfŖ,ńūn@G ČxĢaEśØC¬Ė*Æ$<ōš$ģ€8.ėB*žG?Ie“}ņ(ņdD—”#–ęrBJ©į»z»p¤ķ…‘8~Ęo†\Õ*XeĄŁĒ“āŲ¼‰/³¶vX9ΰYӄ•ń„•‡ '÷ƒłČFEO›e;tĖ4Č'óW{‹˜¼¶L sæÆ˜¤W犹% ×§Ō3+,ł 2ō“+Ā_›ć`³Ģ¬¢F"Xb{ŁeYĖvÆÄfNвüćŗ&M NO?YŠÉ»óžkÖ0–‹tüL?!•}£•X)K‘Ć!!ÖƌĄƒ*ˆS‘·µY#ŗė[ź%JOĄXF ½‹×gD³³BmhĮ’²{»ĢÉõąĆh IīBæaŌ»‹¶PŒ1B”Wń¢"GØö#5ĆŠKŅ^mÉUćėeŃŗaüiĮD„į§_Y¢NĮY$nģ’ÄU8ėœ ÓõpĆ)ÓīėiĆ×vC8×į³WØŽy…ēRīõóā BreöĄ:ķ]?7.Õ_,Ż2LNĻg3øØ­rĪłIme؞Sü|¦jĀҧSĒ;ćŹPIģ»Ųī˃Ģȍé6Ž•=tõžŒ}nkē~€Å¶=‚‰J^ĀŃ4=B…\Aø¾Yy’»“Ź»ŽŸ³ŁD,ŗ¦sž¶źŽīZ¹åšZøÄ½ÕÉRw*zC ėB -Ēøx ž;)X&.ŹS󹄓MĒčŠ7ڤ Żd@vҼ7LŹ$ä=oŗY,ŻńķĀī­ÓŸ¤Į`'CTJ?±/äk¶|H­Gä§Ģ0†N ¦+e#š1B ŲC'Pm gÖ ä5½8r!hūēūėŌ=†–M.ś:t`·S…üaŲĀć!“æIEĶzÓ#M3…ł.LRĖ'Wa€HĻT¦KßBśšƒ£ā1ü“!ždm²3wņÄ×|·nnVk×§%Jm;CÆ© -)v­ ŚŽ*TˉņƒÆ‚6N÷gŖłĄ÷ĄFˆx ŻM‘fŗļŠĢĘzŅn»Ń.…„č‚QXėbĪ'‡šŲwpÕO&Qc0Ņ^ī‡ĪäŽYŲßĻ¢Ė -Šg°}ųųIKĆ®®«XwŖāJūböc¢ģĻqn²×;vLH£gTTžHTĒ”ēöaŖSģļŲ…ŻpóJD…ių)8Õ°@ܾ›š}J Ņ·ķB€®?ģĖ)¼Ī+–ųČ©ó\N…ŪŹó:É®Lčdxw‚ĒŗSŗFß!D¦?)ėśćG—€Ļ“¾¦ēCītO’¶Ē1róL*W'Ž{Ž„&.œQeğђ‚č؁Y€üb„Ć&Ā~m¦Ś&ę—ĶˆڈĄµ—“/„IéU‚Ųąźœ»&”¶ß¢}æm5;^tńQĻLwL’mYgļm‚²ņńĮIc_b—£‘ężPĶ 5‘ƒ©øč›'‘plZbČŁ&ճӀ˜‡ÜΰB/YbY€nrÉJµ`äĆ`m + č±D½óńĆ~z€@!ßIü:ź9|ńČ}E%_RA\õ|ļ酏*°ņŽ5N-EÓqžV¾ŪݽH…®2¤l–±²1¤ Ü {”ĪÉģ‹ÜŻŠģ’vCkŌZł#¶ēO±ÖcIq£¤-—”\ą „ §P+”§Ź£‡L€†ÆēhéPmj˜£šIzDj'(„Öķśh”SĪqˆ2Ņ>-¶˜źĮ”Jõ»gdĻä -Ųpyųš ŲćmWżP’Eg½įśžÅ~ŚOļ:ōˆ©Ńł8诱@cašž¢Įæ¢CėoHƒ¦ Ź©żŌgL5Zľ@ŠĻV)«ŸUÄžŻ˜hż` B§FtmS£ķ HŠÓ$–×U -͆¹\P, S5–B'Ȭ`ŖĪī7‡ī­5¦“:A"ŠĄĶßH蟌„¢ÓŻēŪŪ×k|ļ«Ģ¢z–^L&õŁ„PĀĒå•.v˜ŽŠµlu”> -™÷¶Ņ6čæ(ag?ud£”O<—¬H`ćā§ź2²VŁR^_vM$¼ĪŻn1’¬Ū»ś¢2§®RŠĀŗ]ŠŃ#&3‡ŖōiĆįVź©¢­ƒTżÓØ)é8n#ˆĻL`tĢ%:(×®Ńb½„ƒ³"‘ÉŅ„®HŌ†H”i'š7+ŅčĶu5Ō“×ā§Óż#±{jЦō“NŲĄ«²hSk”e°É«Śh«,]Ō4ŅoÆféŅó §ÖÜÄ9H† -Īt¦W`§ŸżV!”G;ŁP5üĻc’Ÿ /ޤŸ,iUżyoføÆo"¼öaފ żn%$Ž‹Āuģmr€”Ča ēā¤5ŚźńE™°ū>!žK?č\šÄŽ÷‰©żÕ²'ŅØ%ø¦nżļ0n ˆ–±Xęą0Ē‹wSŠ$BÖ®Q²į7š±N5剏‡Š“»ÖFNėAÆQČ”÷e®åUkģ<§GeÖzˆė·‚īšNÓ»ŻYz~é9żÓč2ōŃŃ_•óĢšūĶ6÷Ų½ĶÜFŪpö‚°Ø³‹æOšs",Ģ1>H­/Ņq«œż©ē\NÉ~`~¼@e_Äv2ÕŌrśXĘs,üņC»Ęåž­- *¾2ķQÓYmvī!±"“—šŃg†g™—:ĆDæjJ±ŠDK“E@©;”FŲmļ?%łG?ŽÆ Ōæ”]*mń'¢p£-Lo<"ęFMĢŽ€õµķMĀN3CŒXo?’®@¾øHFÄ ””ŗEä:›ć·o¶ O8XčdžR‰H—ŒWˆŖĘ)w‰ ó"dŠöØm–/՘]ŲĄöQR—*šłÜ¾µ!D¬“?&Žš&ŚÉĖK>Zųė¬!‹!킱/K‘­,Į¢Ņ?Ą-’¬—ƒPÜ1ÅTī=vŻ^Ū a¹CPV.ąå‡Šņ6gōjgšw#qŹ[–Ų єwŒ’?dõĘnR‚-Ėl† -ä^”ę‚t“&F1É8X•P("±B(Ž0 š¤ćœZĮÆ!RM¤’’‰lÄ$šĶ?`³“›Ėv*š_.R0Œ›~]¤€Ļå­Q•JČA#ģvV9ķŽŪR#ŹĘbö„™*9˜āAø< DĻ™&ƒĀ4A&§H'ćf2į© œīe×Ódō [ -.Üģ»šVö’DĪ(:DĄÖŒx:#ŌØ1XŒ~ģ³EA¤«CGzõ<„Ŗtγ]Ó-RŹõ½žOƒ"` PĘ»ŗŗ^aŒąśh3źöK5;ēaš”{;u –óÓĀ֖f½}qf¹õå6śäń(Ģŗąƒ*-•ÓƐÓM’nōaX}±p¬]¬ŁĄ³µ‚MüĆp!Ż“Ų%HÓgŅG -̱³š·ÜvŖE÷õÕæ¾±Ė†1TB^Ņ*†fa\ī4Ī;›Ī±rpīßSLF­ķÕa g…l’<āÉÆ;™Q"tT\24Ėļž× -š“^ōÖßÉ Ł6M zźĢR9—v±šś° Å.¢,żF2ßYź…ƒŗJ[X_Ø …ŠÜǁ•ÕiĻKĄŚČX挀ó³v«Ź wóĒ+xLešåY˜/*ÄĆ¢ŖĢ” `q˜Śvξ å!Q…x;ž¢ę©ų9‹K×ÓO"®Q:³™‹?·ŅŻ}ęŅĢöĢm§Ś-éō™sÓ*”XJŁf„9‰?GG(³|V޶ĆÆīĆėk8¬Ć±Di¬•rčRœs„ż»˜ŹétķŁą®Ņųk™¬P¶7MżĆy¦T˜=ū©NĄŁ*½NĆ>jK‰­›„JC=Iy'L|A[Qž?ń4ց Å˜™c+ -C‚vŪ‚õ]t­Mķ½ŃZ{d¤h‹ķnJ/?Ż~å§å`õ;²0ĒÄDŠŖ°Z£™½,µÆķ_ūīao3«Yū$ł”łPi×pwšė~8Å@9ZƒŸ9vM¼“'čüP.sr ČÕy‹ńÜ]ė8„+PŒ~’CNĘru#¦w€5,źÓż61Åęį{×HUmØś*6źįšŃ-3 …C©2!ŠXĄ":žDõvļ)w‹%$ųR»IŚ“Ē1Üē%Ų¹„ˆHn§`TOfFN³ŚĶŹ[Ŗ`īŁČ&ƒ’i.*īŽ+&ÉiŒuĻūJÕ$Ϧ„ĢÜ]ŠL£P9qQ¹UęøŽŌKQĪ¶ZV¬—2lą=z¶āBc’'Ovæv1³\čo°.µģåŃC›ƒõfŲ§-żÉńLÅąĖĪÜyõ6Ē€ Ogųžłwö„SĢ8Æ:Z -½«ėä=Žl“¤ (MüŽf6³om$F Īqcøū+¢“ž7Äžóšļ¦"–¾×KR:Nw޼Šd°3=9įŃm/ĆĒń‚öŖöį,‚E¹)ņįҤ°·ŽSTęÆū7ĻÆŗ/P-x‘Pw‡Ļ¬¢-AÅpˆł”_‚öćrŪ„ś@e6bŃ}WS“ĪŽBŻāż7čś™ ŁBÜÜ -“½c§©ĘLł2ŚÖJ·Ź¾{·Ķ”O ‰_Ä£‹„׀t\1æ^ƒ€ćI±+š®ģĈļžįn¢Å ńĢ‚Œ2髿“ž=dŅnµ6ŌĒ«×yšyv%Ök’߉9N­‹ėō@Ё×vcžƒ‰ ^)„Ū„õöl~}KŽå?³>— <ėzc<‹ÆwĶl?%ĆĮŲD!üQ}ū$¹=ćW¼.čoµ¹9·£& ˆn蛍>ܬc†C.S1ž9ĆėōD¬×½Ų&śē²oÉŚ®×8óĶ+»i=H£)[ģĆÕ(gœŅŖ­Ÿ0ŽÉąaś@Üķ¹^ŸÅō¬į·H©¦£XO¤%ZŪņ…08õUętŌ~qĄ÷ečń*õs Sb(g€ ’Ńć£nGfTŠ7étMąģ™qĪŠˆŃō -CĄ}qyžA­į–•ģĪTsõV -Ł„X®7”•åšĮs"¤I_ŲZ)=\˜P¼ż=Ńīņ– †‘Ķ^Ė8 Å ėo¢f˜`ā93Ö²ē-„¾īɤžcÓu¹c¤Ē‹.YkŁ-žŽą7¾bœÄ)”Ņ÷V®Ū_€e.tl” ÕĶŌŻA\’ė-ypd±1`k]Ék-’éæ<¬ƒę<֓ēō¬Ķøä$č/^]ʐB‚ž|”é -­­ĆP=,DN]=īāėÖŁ­GlFä/NYµęecÆĢ„ OŠ~{ķōVĮ›enšZP —j‚sŖĆśr5« ?J~m§-Ž*ŻŲł–92÷1ZźĀ {Ęś1ĒķxżN* óĆØEi FĪjÅQVN؇YtÖ®7ČlŖėĘņ6Õ¹[`Fż5šĀ&S[Ŗį/N)yIŽĆįb¼¼ß(N\“sGķńŹBūńd' SZvd)!aeéł£'ÕB…(“Ģķ““Xlµ”ņ5½÷Ør‰/4.į­Ž„Ķ ‘ŅE±¤ĪįwóūĮ@2• r RG“ö꬚:šiÕcvĻ„mBµšō¦Ś§&łqv‡TńSÅé |†iTC^RŪ¼?o–Ą”’²2f+q`—^ĻīļµlYš¼©.¾tJĄ;łp*uDłÖggSóyµ€”Š„NŽÄ ­·Oš‚ŸröO§śĒOÆ”asč/Ž uĪ;g\ż;QqĘd…V(ąā2ńÉqI‘‘–Ō°Āoõ‹€łó”=¼„¾|Ļ1;æ‡»Ž¹pÓZ?ѹnÉŁõjüŗ‡ÓasŽö>°µ x¬ -w6M` ŠĄržńl@N.F•N|™‚…t’ä -£bn2’±5U9K„20zć¼dVĘ6¦Āœ©œÖłpž«w (¤a‹HŠĄŹł†“Ļ,’' ŽäŸÅœrY·;ŌGŽcęS?hX—“4KUØÓ}sO»¬fµlq µ IŻØō†бŠÄŪiÆ.ž]7ž”±‚^ ÆįY倎Į”=)Ó@킸§ø ē6|·^ÅöūāŃŃ’“jĘ$¼4°ČIlgOüY"hāŗp-Õ,UæĆ”0Ņéϖ¹ģŅņ܆?Eģ¼tŻ­>"āøc·øĶ€³)’.ʇYēZ†zg3$܍œEĒĆ,xģĘėĘ]Y‡ė”’P­“ėÓøŽŲ!$-6Ÿ ēĄSā4Ć‹`›Ū3¢[ż–\šŻ—»ŗ˜=W9ń¹|aA_~–Q‚œ‘oõĶóĢžĶ’5 Źö+ż¤¦ŖĢŚ8TĻæ½S¤*õ=Ųk E”ųŠŲ؇½eoæ†ÆiP3£PWĪŽ‡ Ø ¹‰ŚĒ€S¢ćįØ3ұ…Du’ww²¼ü“ģy\ĮćN.^tŪ”r7f’ŗŃ»Ei#My„59–$x¾Oģ5tÕRłÄ[ht”²,g›&Ü£õxų{¦"ŅnlNQČ'U’QąlŅP£^žzMj†m#8ĪÄė¹ŹŹü° -aMÉY®¼ 1SŚįē=M‚żoõ'ƒVNŁ1«)¹h3WČ3¼É Ė‡,ŌmSNŖĢ“ŗł'$kēd_݌é͈QąRņģó5«ˆ<]~®­Ē`śO¦7®66<滊ח•8‰@’ƒLw‘”zq•ųsŲÆ¾›

b“ßNoU{O JŪżøŃFßµ1¤·3Hæ4IKŚPź 3ŅV›3S‰ yÉŅ]ž—E/ˆŅŒĖö•½ĆœæŠFOÓq֐åv&ŗ -p!¾Ē[龂\w’ƶ뇐ø! ŠĻŽflńĒ‘ÉeņRNKlʦńč -ŅŅxŃĻ(ȗ5ŠóöĻh… 8ß·¹Ė¢å¢ œP†–ŗ&.)J½)‡š¼Ō[{Ÿ-üĄ?@«“éłQ©ĄD7Åh÷Ź@š_¾vȓŒÕĘS¢k™lęŻ4$Ś£%?ŲŪB«g5Åj‚n £¤ŲŇ_Ź éL@F®­(Äš{uaŒ&jż#5Ģõ…Ŗ}q¤˜ćlšlūs›pł óµ°ćĖ­üė,ŽÉZOāŽ:zGŌCF/vˆŽ ·¦łd\X3A ?ęnŪĪ×ģ5jŒ×L—]ŽÉDßųd)Į9N²‚Éõ†Elž‡šlšUąCKĘ£c&ņˆ¦_āß…€·snøĶć ­½ėĮ<7;'+”`šp†=D˜āŅŁžųECäĮ®– É%Qµa}-ŒėšŽéBJ"¼––8’ŸˆĶóß큟Ųus‘³Ø­ÖŅ3ø®Pģ™ņYźĆ,4‹ī(¤”ęó]÷Fµ‡ÓŒwvē)(f™v¾b¬ž¦KŹäś'ģG—Ä£å| ƒѵ¾­Ā -‰‡ŗ¬$”ÓŗÓ’G:­¤Ņ”ĄÖ’ ØĄßQźW-†z-d§°\{uˆ=8±ž€¹Š!,e7ėśn³ń”DæĒ‹üm9_5-,xļčQÄŕÆ!µI§(4D ʾ*łSTó‚fś£H‹ū±³ŅV‡łCę„ mžōÆ2\4ųUxM}ķ®Öŗ{ńp¼hĮ«䨀D²Ž¶čLL>9mzi€$^’Śö$\?rĘ Ėn”A@j1é9 Ö°Ņ3ēõĒĒzüJ?dڼ°L°oņ'-Č&«.ĻpSPlU4“ļ …yóÄŪos5€ęvóölÉ«¤w#¦Ū»óM`“m{äK@ū¾ˆÕ'ŚZ±d#ń«°Ŗ‰P†bæhsŌJ|×xŽüÉ’ -öø6kʈ¾ujtšDvIÅ)E5Å'1žUł“¼ž=¤:cš„ - T”Iœ6ĮöīkHßAsNŸ—cŠļ¤‚AŠ)²ā“/5¤ųū×Ā'“ēoĢ\¾EŅŪ’Q_°wønąķ Ģ“kžĮ$^ĄeHč×ķēFKŖ -Ył)ÓŽIN€÷ĮꑨsjäöČ»ņ<®4!4œI‡Žį'>é”T'0ć™wŽū+’­Ų.h “sꐘ„Ņuč$õ<©Jx¬¢3ŻĘåūpJŹ ¤.üžܼŌgĢ1ä[żxžłxr@\*Żż¢³ęĮž;$|¬­ [§)ŅĮ5æ?£2šśŁ+Ģ8čoįh -Š+Ż"WūY÷ŗ& -ŃvQĖ‘”ńøóAʵP ėež[ēģVÓs‘üd;$KI“°¦«> Q·¦ćON^ūµ—yn…ūćs ø<ĆŚŃć„M£-©Ÿ–ż£}P2P¢Éų–ŚŪ£‚RŽLēūpß,ąĘk£€6źµ:‰DÕY÷¾x$•v¢›Äo‚”ʛßė‰>¬-^­äØOĶķ.ßĶžY¶`¼—äōwO““¢*ŗå\‡TÓĢr‡Ź¢Į”“ś(r»‹Żt ā}yw$ąuDY¬³=ŸŠē½ė{gzÄ̈cŲ ³{ųg~c¤ evõ0ģųĒ€Ez -ē&™$¦£JĀó‡3 Ēg{óäl+c]” -ś}e` bĶFÄ9±¾‹Ę³¶ī·£L§k +xڬ¶eTœŻÖ% +A‚Cp‚īNp‚»»;…CįąīīīīīīīīīīøyĻéīÆĒ¹}’ōż~ŌĻ^2×\k®½G‘É+Ń ƒ ¢ G:&zF.€¬¹µ”“ƒ ČFšNhźųküGF&d4p4Ł8¹j@c€0ŠĄĢ `āää„#l]ķĶMĶ”*ŠjT44“’eł'`čś?=3ĢMmä?œV [k ć_ˆ’ėD% ąh˜˜[Brņ²bJ1Y€Šho`w2“27H›m€T=Ąźß€ČĘŲüŸÖč’b 8 ¶@#óæi@# ķ?.Z€-ŠŽŚÜĮįļ7ĄÜ`jo`ćųwŽ €¹‘•“ń?žŚM@’"dkśaż×÷Läąč`donėų[U^Xōß<Ķ ’©ķ`ž× ™ü49żÓŅæ|ažz ĢmŽ@ĒjĘę¶V®k’³µ7’ 'sÓ’b@ °šŲ[žĀüÅžg:’Õ'ąėŽĄÖÖŹõ_Ł Eż/ęŽ@+z8&ęæ5’Ö65·cųgQ$lL@&ĘŪl’§Ļh’ÆQž³3TIƒl¬\Ę@8Yćß’Ź’;•é’ūDžoųæEą’y’’‰ūŸżo—ų’ļ}žOhQ'++Yėæ šļš÷…¤’¼1Vö’Æpks+×’CĀŖ’Mņ’GĀŃąļ0lL’ +ĀHĻųo£¹ƒØ¹ ŠXŽÜŃČ `b`õwR’²«Ųķ­Ģm€ż×0tLŒŒ’įS637²“łgō?žķŚ’'łæ"ż‹:ƒØ„†˜¦Ķ¾©’Š’’«½£²«ķ_b’£ń’:üƒ!(røŃż½tĢ,ģ¶æ9˜˜<žÕžĆō_gG{s€Öߖ™žÕų’ųż×Iē?`DlŒ@Ę’ģŠ’£ńßõś_†ÜFNööUż×’Ūš’<’kс@ ÜŹ"ȈŪß"9-ű+kp\X«·› b0Ą¶ØN9?×»Ō啼ĶY¦’^@_?ÉõŃāŗpjūg_’ś`øӊ¢+x™ƒēABՓūmƒ¼ęĄ—A·1åL-Üķj^z R“Qõ`g\AQ·š²Åęź‰Ź›Ä9םōŃÉÓ(©6 +£„ µ:ļōŒ<īų鑢dhp ėŖg—&3 +–ŒŪĖ3į”(ŽŃUßž¾ĪčźÕ™ż×·‚J9żY|søĒ°#į•Ę€@ƒ¤Ą`°/{n£6Yʌ‚Wfæc‰R&óHAŽ7į¢hÕdo=ćĶ@ļź¶–ģÕvS=ŗĪ–!m:L“)/ŪśAäO—ā}—0Ö=›”īÅP¶]?’~ž¾ƒ›Vbq#®s§Ö«LÆīUš*˜_†¢©Ž°łw%Ģ·wŅök,GąŻ@ŽB¦Ēāq±š†-÷®ĢhŖy† +©čg¼uéZŲ@9 »ū;ovmxccß~pé;­Ä:Ųō†PJr‚erāg{[“WO£© _4ŗ›ē,éi¦žĀŲO֌lAšÕ0‹­]¬l@§}2ßā+ mlČ• +Œ£•“ó–ÜõP­W{Nü ¼id÷{‚1O¼&™Ń…ŲDĒż@×eÜŗ€¾ ŽŹÕįóņ÷Hü~Ń3ŻŽĀa•}į$¦ ޜ¾³vž7 R÷SŌqŲ©Ķz~YƒżéiŒ®g–5 ˜‚1+bO2ŸSsŁ‘^7…Ų;‚ÓöKq"$ŹĀø©g‘<.„Ł÷†Ćŗņola|²^rłżžŪF +cbßļ{-*~*čŲxV/ĖöŖĢVļc·ž½÷Ū×*£÷ļ"µ˜rĆ}õ^ö ƒē‡Ür]…ę×i,`-RĆ«)żōp: U ķ³CKČVZŁ_ÄāüN@-c‡‚·Ī'ą¬Vē<54åÉሾŸõĻ]ŅW*r¢āCoéćPަ«7} 7Ū¼õa®WbŅčķBnLH Ł8:>˜%ĒžHMā +*G +ązP¦;hĪt‹®N¬jLģDŖŁų-ˆ­ZÓŻś¢„WdCZĮ–Ü ¬ė›?0Õ*+ļē"«(ŹĄNzDĮ{øäŸ³ĢmŽäZ5cŚāI·”ŲčkČ4G8Ms½~»ÖFž’£ŠmizIŪ]š~L¦*ńåj:’v'8q°%6»BŁZČģ«"4żX0"ŹxČś­°¢ÖXųgÓōc_0/ŽŖĮ(nė©Ū˜ĄBOŌ„æ’Zę.VĄ7z¦Į­å“óf3\Ņ(„½„ßW,Yõ*w>īOŲt„Õ?Bœą:€B-}‚p_7tl‰’šåƒ³xŖņį,˜Ię'ē‰ĆX’ß:ŀ£3.…/<ŠXdbæzŗ:XLy“ +"i¾`x/ņ8wįÅųhCM+hŌŲ@Č®M ä‚čę‚ŲD¼&8Ą8| -¤Ÿ—jv½y¦zFŽ©;²)šXPÅŲą½h/Õ+ŅÆp™õ ×v;­Z;Ir†¤O”=Oé®fāŃ̲–v&µę5Ž-‘ĆSwÜźé}s«7e…~šÄ„ ĻsšqP®‚‚'é§õAŚäžtā敜J$ZRʕJ±Ųćlķб ”ø/X¹Y#Ćžµ“='æ‘8Óx³±aÆ`U¾ŃŽÓ5ŪćOCb”fƒ£+GŁłN[ĘB}!ģU> :ˆß†Č=ˆøQLƘ/(˜s‘ļĄĘy£_I€³ć-ˆN:¤ŹĄ«XØ·w ŃØwłŌyÓ`ą5CĄŖ<)jx‡Ou[ōBäՌWŅ(:—˜š  IøŖR^WåhĒ$čeE4š7Ė{ÖÜj›kƒJÉ6žO”Ø_6hmœ®Ņ-÷Kæõ=Į½¶•}pę=TÓ&°réÖKŲód8 +|”±ĒŁöĢ­ą_gļ“M?F! „½1įFž‰ ŗAŌėŒĄ/ł±Ģ™ø‰¦ÆF<^Ćjź^~W5ćŅŌB]•ž¼ĢŅkĢGŲ—l4wÉ!ß܉ĢŁQd{6—öZżŒß™Vć2ē2„r`±JBēI¬Łå¾Él؃#ÄWžGćo6ltīC¦Éėw_!ņ!‡+/6¬1 »lčC­¹üž²~Ü.(n}:IUhl‰ØÓs{ZĪ«‘Õö ź*4Į=†aF +Ć/”wjĖ=GS¦ømšR¤”xe§I1Šõ .“©”©>ėFdīH(/ö €ĄåœRCų!Js˜%±žsjœŃ·Ł +ń/ŠĻµu ¤¹»“¹šÄ›Ģ?.{Dy¤‘qaŠoℇ/KĖ‘@* ķĮp b%H¹gŽ%­^ŠDźB…n”¢ŸŖqcҘžźo8F`č~Ņmw'Č č/‘˜ŃJCfŪnLŗŅ™ÜA¹Fe\·’/«*U<×£L©Īhn’½P¾źąS~¬Ŗ6’žBƒ±Óµ×ųŽč,HQŚV"-,Ķ‡–Q“C÷ČįR]u=ķ®p@”›Śņ +é{²^-4e+‡ÕŃóJčŚ:D¶ų¾‘j‹ō©cŽį0_ų«¤¦®ßļ­ĶS®ś!hˆŠN¤ eĘ'`”+` ļSpe#_. +$²ŸSY^™Āæ5ŪĶO”[r¤ƒ…†Éé&»Ėn]ÉÖķj8•OČĀ+ƒuTr[kö õƒ:ÆklķSOoĪÓŪx.ŠŪÖŻČĖčįIeyxU4„·a‚Qž:×z@ćYˆłÆ|{[¦µTR²Ÿśäm%›&ŹŹą\’,°K«W)ó–“ȄŁĮ˜Žh½ż”ū +ńŽņŲķzPÅ'éÖÆ Ź|^‚q`hĆ­ŸłOj»]b­ķ7 !dņĒŗ®’šŒu, ēŪ ‘?|) īą0\„ŽŚæł;©ęōX cD††2‰„Ī"ŪbSŽé•ČóŁfÉ?¶o†½0ńėhF$†z¦;ŸÄŌ&”n`B,ėÆ&\iŲd+Ć ]25ėw.åž)=0©¤U°¼Ķ+ÜķŹžXAޟrŽŗ«Ō=DŽi_ņéų63cEā¹H o÷ōIéZÖČKŸ™&ڤPä6> i0ĒöęĮK?eŅ„Il®§„<·0Ļ`šf’ Æ>‚§åa*?»f°ķ©Ur4œ!w™¬ˆ¢ė¬c£|kaĄ¬Č›u)ķ”ŽĒc õ ‰Ó#Üh)Źć!$”pE/“óv¹īņōR,µo“ūwt“g)‹pvFĢŽ¦‹4Óś&žśsŲ& +StāÖö¾Vāv6X’-4ć®ņZ_`ßē©1ā²o'°/xńO"¶µ_6Ś<‰6A@³5~~āuYČK\’D)‘åÉųD¤iF̤ESOØ­č4įZýĖd"Ū’­/?0æŚ+é#Qˆiõģ÷d²bkƒ–ßW/dOē±¹õĖ]~ĆÉ/ „¬¹ŪŖŠXōc|Š +ŌZśLļē³Ō +—7§Eįūćó„čėńŖŸp·ĖrddmĆīóDė¼:1& ž +“*©…ܐŠĮKcr—L§£»äĢS\øźĒoę ę=ń?ōśó=,ÓĢļ_>CCÜ„¤“¤Š[•†õ˜X("Ń'c˾7dŅ)ÉåI †5ą$FĘ¬Ēłī%ūėäTfŲ„ÓsC±ó횃e ¾»Haśˆ„_ė"ąpRl«RÄÆašĀo„~бE­3½SS'ÆG‘““˜D/'ķĀÖ B‘ŽW°«ƒóē©ĘÄx׉’±ŗlX”āĖØÄ[¾cč¢4pQ’ *%Łį]ÜC®‹¬’Éą ZpGNe‚2ŒsšÆŸķ?‹ó‡S‚²8Ž’lż„O ūPd)ošµ÷ueŗ“źŻä¦hėāļ‹GĘü=KSē—7–1s#Ü6ó|Äģi«s9M»Öå õpš^ČDtrķHY zŖ_ÅIt¬ĀWīzM=Wź‚nčAh泯XŌtĢȎü÷c‰ų¬Ÿźæ§śĄŅ8Įō"oZš(ķĮgų!¤ų”ÖGćę³…æēėņ%§ŲVUœė+Ż›HÓŹ` Ś£Y-dś ²õć ® +„²ž0;V6c>2”@›$tdL]Š++ŐڸŹņ‡®xõåµŹbļ•-ŽZšĀč^¤=ļĮżV“£’żdˆä½Ā§UVŁŠ‹gXw8ĻR[cšō;ŚS“Å“ķ­@ÜœSIöGN§¾ +ĢyŸbķN°ą@žŹ– Vht2å™’#"¶VĖO®Ó +=ā•m‰±BwęEłüŖ| $-=§P©VZįL†÷Jæg$€:O3WĄoVkL ¼½ē¢%Ņ4—K’¤”ĆŪų Ö~3×&w¤E£˜¦ʙ“mKŃrź}ÓčĶżØ/VŒµ“Œ’  ‚ˆ£žPē3†ņ /fĮD}xšī–X%'Īuū}E ŻOQ„†īvy'r`A½LƒœgBĶäVęeiQvØµ~»p„fķ‘{j$é+ā/Œ®1/¤ +„T4ć€Öč~ōJüń-2Ó'huGÖ5žĻÆ’ś(ˆ.°šĻXĀt·.õHdIź­h\ҟŠ×äĢęV š¬čķĪ?²ī”4\”I!‘Ɖ:§‚>ń‹ģźyģ +²Jqś/cb+ē8õĀüÖöp"ɖ[õŲøŽĘA Ą£īMŒOﳕŠ­Ž0‹†²Ā"šNł‰CQ‚ æņ8nH +ŲC¾?’ņ…Gõśä¦žųŚ¢Coō.¼"Šżtv‡JüϬ呶Åśj‚FČ|!=wxūģĶÅVå^Zdćjߎżb…Ø DÅ<ä Š§ĻÓŽī gh8©%*)ÅuϽ·4 ³±”ėĄ¹W…Å‹µ}óˆõdĖŻ/¼“u’ŽX>%³ix+UŠ3Ū›įŗ9†ö:®Ą·§×(‡Ļcph€ ķ¦–TjröH}ė7õŪµœANīI3Ļr’ųø߆U{1¾ĖfžG®—Ą!sŖ»žmŪö‰ŅtŠģ·’¤.:ę ćŽ­7:" ¶æ‘åĒGW°*ČEU‘VŠ:ŹOčųAj„ĮÜ8 æŁžżõ<a¶Mžy«:ųÜL·ŖŌ=d[·o?D鱿øę&ŲĶģ+;ܕOčĻųD+øaG°`gF(®śõõńśŖD8īW”Ó;~Lk­Ō'žŹ¦žŅ!A‰'āM蚃{I¤cé|)®µeł““dČö³(CgŲ[å]ø¼€,Õū¦a—LjCv””˜qķżVč/ĘP+¶gŪĶ5L#ĶжE ’Ó|Ģ.īŹ°;v±@õuN`/ń7ˆAcŖTN?TĆ&,źÅµP~źoŒ$/A)N, PUčGšŖ²ć,DkƒŃ’—RąU8…qLß2@a—ą®!YŁ<”ŗtŠ‹iWļsõK2×ė­HĻæ%4™œÜœŸ0Ė3ńšDb”fŠšŒKR&æ.MKŸ"Æ»ų S±óą»Ģ:2Ļ&•§Š‘é…¤éęė‹–ftßāąč ĒŻE%ĻĆŻ­‡rzT»ßķ ĖģB$ŹįŃgųß±R†8f垭y0LI^·_”“Ҥųö+ręÖć, tņRł³ŒÕķIĘ +ą >R²“›¬OjDØ5åbā1īā?ɸ프óLQŻ“rmĀ™üĘ|S¢f†& +]<& QItü¢†3yŚš¬ĖŻ[Ģh‘°ā==Mup¢ń<}ķ'UĘ6Zkļjp“ó™Q6öl§Ū‘¾É u°— +zŠulī·z‡n}«Ą“—O :Õ£×Ć͟·=ÉŚ)“k}Feøõnré;o[?¾=ŠĻL§ £¤±— e@2ĆėānpśoźßŪ^„æZ§-kŹąNCĶ~¾9ŖLš|¼4Ą@DLÄóVńÕļåMbŸMŲŽ*Čfg¬qV `T¬Č?ߢŌėEŒŻ„+ć5Š-46}švūŗ@µéśćž¹ą€÷q_,bʑśčfĖȦć"ņ&GIĆ +ńN§<|A؊ēqįČA‹c%‘xČ}pµ{åW8ųyŲ›Ŗ5=ęfWL;Č¢ȕńą%8Ÿļåj°/_—꣪‡‰ó²Ī יŽŗņķņń¶ēüG¼¾iRÓcł–ōSĻūąū›Ę|‚¹T+>-¼ĻщyÉ}‹DŲ٢ݛRŸ©¹ŖéŚŅb ¹1ź+z„Š3@ą—˜ģ³_RJ3„ėr©”Ė®ĀiæĪČŹµ€Ķq:U(gFS”|¤=×ēgč|śQäˆ{ƒ†ŲzĶ"+T8I „»Ā„“w¶ĘĀsa5½%xUxżWBN÷°iŠ3›!ź¬×¼N«¼uR6XĒ4b{®`+éÅJ”źJT>;3»¤V‚’ŁÅķƒŌ½"t ˆ•£~¹ƒDWh~S”Ćxģ¬o9-9RN/§×ēøÕō„į ā*LŚ2m|ņżā6ŃÜŗF+5Ėp>qŻJA“įuÖa~£oGÜų0dæ . 7ų>¤O~c°N®”‘õ›‹C€ĄŠ° X%ī\a…˜¤$Ükś²ę=,-V‹–~¢“UbęP{wmwŖŃs815Ę·ņ£)eę¢ +Üw„ÕkZī¹|ńä +!ŠgˆĶ±Õæ±ÜKąrUĄRµ˜ęō¾žĆ1±Ųrė;"ķ”BWå~明ƒņųšŸ6‰&ŗNį·U“”Ś@–;žĢOųōž«dĒopŃœ#Y+„§i= +™1µ·;,™0ęr†8š¤XÆd/å EˆčOĒ'g#•¾61j=’‡ gģ(²­a[xÆ”tĄā\žI2i‰äTU¤Å/ͤ#`•[Z/ƒ¬J™x˚&¹ ¤Z\ū‚¶T39­Ņįž§Ė¶0öõŠ”öĖīŻ$×=é>Ö¢P:”=¹‡XĒ|?÷SūųŹ+Ā#ÜÅu[“oAŽ8<Ś‘ĀŪŃāE¬šßö¢7ā "Yų Ę}a\OOf‹’Īw2˜Õ uŽŌ‚d?•Ve”}ŗŠ#½­ć’”±rt’Õ,Ņ&VŒŽ¢E÷•<9(;æv-©ūŌ}I„K„@€—l÷UĀž°—ŖVėsFR¶ŚDKŠPWŹß<åµNŒ®¶{‡ė±ŽĘą|"åÕGxŗLrR£pÖ³Aķ,-bDYɼŖ%c>Žć1ˆvūØb<æB DÕń“ńõ²ČŚŽk”©Źk‰^ĘūŠ‘€G'Ö¼]Yłi£ĪxœĘ'@‰uūT~™ü(%K#V5Jænd³k{zĖĖĒõÜ õĆZŽŠ’¦ŽwĢ&”J8÷õĪ©ŗ8u×2pśģć­”tV;A‹7=ļœĖ=!d¦T‰=ŁŻ§Ž3.8ŽwĻ9°+‚!Oļéöv»ų +o-O:ž½Ą8‹YZ<µ¢9Š`¬r\™ÕӋ”RļæÓŽŃ0¤¼Ÿ&~+ĒW° š(Mŗ‹(©uf÷ćh 'źčųźŒj3‰AyqķŚź™'E”ŗ"{Š0ö©.‡“ŗqŽŗéēr³>6ćNĀ›āČļśˆT6/ųŽ“¢[÷‰ NƒߧܾpĒ§ŠwÜ3™>MUńóaīĀW¤w}Te|Ķj·Xό&®r lĆæl”ZfÉ­@Oł€©~VĖ„ß €×÷}¼„dĒŃų „zq0€‘ŃČuŹ'ŖEźg-7†# +¹Ģźć‹²ģ^—³ö/ml\P¶¦ŚBѱµ)åæG…ļ +ŗ˜ŌDh]ms×ēV”Œ7Ģč®ÜOŠŖOß¼Ž`Wå"ĶHa.?ü¤ķŌu|É殎ˆQA©qõ„-öÉ“'—łqQ)e„2Ćļ£Ę:ŽńDśy3-”Ž«Źš]»¦ę„ŠĪ  +8w—šVL Ķ])®5dĒ`›ćŽ)Ŗ8’LG¦ålgkk±6±—śŽŌže[Ÿˆ.ń"nƒ·m^%®ŽŻłŽ~&M±ųx”™Æ«"f»£øēčŒõJõG˜Ų,(×-|Ļ<҃3šx *²xŒųd¶…ķäŪ¾W”•ØB&u1”ø¢åłx +»=|]^¢µ‰)cś.”įmĖ.Q/m\lä+J'Uu\p‰1‰¶=kņձ⠲“Ļ~¼|ž-ß,:K<%ƒĻD÷ÕėEj†‚čךTś¹Œ—x£S8$ ' Aüws“Ÿ46Į{ZBHt£›&ė/cf¾D6Bū“6‹b¹”ķz_Ķ3”Ē+ÜŗĄ‚ĢĮ …ć{„Jō ˆŌē|™\$ĮŲ9 uŒóåcKwó§×L%žōsöÅDž„50ü9rÄ­øĄÅ‹S82V½žł‡Ś‹ü›wŅ1Ŗ˜ū~Õ8ZfąŽ ļĶ™Óeš'ł97’ĈY²¹łĄ™ź¹œ-Rc”æ¹Izq7F§S¢'jūÉ:Ėćxš¼,įēøAŚÆT'č?ÜGg¾Ķ‚c&ś5ö9eWĢØMņ +Ž2_Vå­µ5ģjØWC <§hā3†Eģęņŗū’ŠiŲkևIn%E²H*źŪöéU åŒB°u Š|Œ]¤Ś4 LėkWˆÆĻ…,¢@‡4"Ž“&“Ŗés…aģLMPåC:Ŗ-č“jōkŖ1“O½ėZ­Ģų4BS­Y@—d°%v誐økĮ¹ęŚ]Ü7?h‚±m•ßS ,ŽŖÓ,¦¦]\ŗlå¬Įę`Ų0#(–üŹ#3 Ķbźļ}}i•YŁ&—…—øF¾ėėLī‹dnŃq… ©/°ūi®ˆšė“]ik“ä"澉¹’ž(%Maed-ė榌åŃĀ­Ąnę£ Łš<˜Ļ8^QĢ s9YįÕ3œĀø+u$QÉė8—Ņrx@éh籤‹9ŠV»Ź8¼ŖØ@xAØ˜ŃŻčm³ĄVdõ„@Ł+'̵…śjė³~Ć :šü“4gŌkŲrģł0@†ĒŽŗ'z_§B­6`‹~#‹ļ8>kŅZ +įē!|k o.wć:…¹ė½C5QĢ +Ė ĄfĘ,,dĻ÷JlįÅ· †;[»€C|TSłž;¬x˜›±ķæ” /iĖ2ĢÉŌÜķŠÖmMŠI°j¢ó‡ȧ:ŃmŹźŻj`#ł°ŃM3å…Ŗ|i1¬’ÕlgšĘ—šxƒš¬ŅNÉ!b™Ē±&§mrFążęj^Q—kŅūė“T_r§RwÓ°HjżŲ։ś]õ#ś0Œg»LbōĶy”ƒüĒ™‡Ę`¶6¹©p۟{NµĶV “\)Ēš+y_čQźaD^ųĻ.'Cå^ŲĪ™5 ˆŗ1}»ż˜{Ųæ£‚ŽÅųö€ØbØŪ¼ßRT;L; ®īØPRƒļŌQx0dŒ”ē×ĮčY(Q͊"iSXރņ„(iI‘ėW*0Ža^)—,n Ÿ­‹Q*‹Āā\yxŒ0še”`4ä*¶ūž]1ְɌCń5,6W·-ŒŽB° ¬xŽi”ŗuŽ&{ėaōėyŽž4~Sk3½bEƒłAx¹_“V–Ō=yG›#l "'ƒØ¾3-žą$k +3tćz‡•Ü!Ļžß4å ī{3Qł_ Xv}./ĘłteŽįĒ×ņéV™79?ŪöJčTȞ bO„ī¦. +ߣ‹JĖ”1g–‹/¶Y‹¾§c²l» 6ēõlĪ £:ź½7W–“MB>³ś—Oų9“rf4Š”o4’Ź˜'™^ēÓ3®DĶv}3Ļw‡…恁6+šĀž¼ĻŹea|Rց³. ”cÆĖŚQä·ķkdkūP¬’Š„jæøÆĖp?ą«ĢĻīŽĮ ¼”žuBŌĢ'ŸŸ…ü1øŲœ*Ž!K­źŃ.Śl?ź` XF0[œ!cŌł#ߌU^q ł~‚—A ķe.wØJÄGō–alĶ ?łĒ‘qŽTj°Ÿ{]UÕęóģÖÅś¹ré-49“)0o¦ÜŻ7)ĮŁ÷'@¼ĖhūÓčf惞:īĢ$ІUb95ŒźˆN'BK„H‰0~i ‹Ā:žļPXŌCüżÓ} ¬lĻϰh÷2ū:ö‘&½ßŸ™Į¢PõčžČŚ™u=–q +ģĘŽƒ)§m’Q?Ō1öü +Åv-żTģkC@Ü×*,¬RŒµą‡6ƒø5"Č0eāĀš¦ÅźĮÖ\ķō6ó&‹%i2“x݃»ŹÆĒČuŗķ0Hu—å<¦m3Ę{”ż¦]M­P¦Tp?,²čźŃ¤Œ£ęVØĻü®&ĻvOSg½‘ŲÓ„/ÆÖpJ$ÜČO^¢eāŗ$ųD·7!’‰y„ +7Oį0ĀEi ¬RµČ‡ėy–ü +=?OņJwyhƒµ÷l‡žńūbų66JšqŁŸŸ_¦0īXŽŪ V[‡!CõåÉŻvf3ōA.ä€Öė¦Ż€hOl^½%!†ŹŪÖ>%n’Nā.ÖŚNÓ¢š ¶œŪ—„S’!F\\ģqÖ^Ųż/ĪŽ/“ßTϤĻ+‹>’”ļˆ-r$ĮQ6™,0[–“©īC¶U›»©ļ‹øj5.·W’M p….+8R7Ø ‹śyæJ”ågĻAE±W” +öÕļŖŚ‹åĢ­‹1>vgfXb^ȈM8“ T©ŽI 0oØeHī¬'^~Ž®6O¢H/ē <šSaIwĄŻ×ć4{źhR»=äĄ5 m‡‘|¦"€c<āOÄ +<’¶›ŽL|ń}G?Ā-Jl µ™E޼°õŠœ¶ģ“\×ŗžŸ3ˆņżvJ86%æ”UWgX:Ē6†ZõüvĒŗE/7 NĘō®Ž!¤Ęī„>£Š9'Y4ę!SŹĘYå/•ׇ݋šj¹Z'‚Ö±Įƒ(·1ūŒ›.å +ŖĪ¼pw¾ Łrba\NĖF?ļ8ķ4Hė:Ćō‘ߦ +z¢UjżĖXŠeLŚĒ¹—Ļ@›Q{č3¬įAų»š`¤Š¹]-Æ×-ž 3NRÕD©%µw—;ŽIåožöj@­Šøąs16ā,mŚęKoīQłZäƒz"²Ó=®!¶¹œ\Kޟ³ńžTD+œpķoĄuRO±PRŁ$–!IÕŪ¹sų}Óu#$n¹§=&ĀŽéµŅLrXŽVL-ČļŌ‘²šōż$ÓsadLMūŖ29Š^¶MnæÅÄtI)™‰£Ōtwv®³°ūQ] +[įdåą\Fj?²ĻV験Š¢Ūål+øøŁBĶõŻ‚p%Čū(ŁeGŲÓŪ£'–=N'žĻlf$²ā\·Ō9«ö/ńqŅĄūÕŁVĮ‰2w_Ƅ&Ī’K·¶Šå^•õ@ŽŌ«ł æ˜ĒC+†¹@õb¾Ā.?žqbH§;ž\­Pz‚(—żō ¶h›ęń‰\Óį‚/ōk-ŹY9ŲÓ=·% +T¦C~O¦iqyĶ„ +Ćs6„€éĘwģ±3z’÷§¹ZózĀ%ūįõ4ó)Ć`›ņĢjŁØó‹ĶČn¦yOTku¢%žÜ5mP ’:±'ŖŒ‰R%A{ÜĘīøŁćźŲ¤søƒ˜`ca€Ćw<Ær#xüR7łž@>ų<\P Åу'XŖ>BLEJ«ćķ¼St(J[·²ĪZ灂(_l3ÅćJj+ÜŠēqČeDś}ś#Ņα”ńR’`° *šõń§­m”N“G˜Ö»2“)pŚg°z|øEē­Ęį“.›)7{ŖźDĀI;œ°½Dž”_A$ƒ ź.—‚f,u{Ŗ ņOūŅ~ƒ«Ń܎’ƒ~ õÕAĮĶłMŁŃrTC†(.īrį Ÿ‰rœKł #¶w¾©5É;R“ ½”°wš%·wLä°æ²YšĻN(n(‰'Æļ ÉN;#Nź>mg[:”ū3j·ÉøkŲśƒg_6’fp‘œ4ź¬I˜©·ŽMõI°<ņ›®R%ć…Q®ģAĮø„¤ŻÆ’ØR隊Å›ĄP„z¾cPēŽ$Åۘ1’µ“é«D`>AĪÅ2šŁģ-“Q;1Ó ŅՒ„br2ѲIĒĻšc1'”RŅkĢ‹(NŹT6”ļ4_&'(ł…1=°äĖv AĶx>Vć#L ‹M¾Dŗz·ąķź ›ß +0€‡æ*æ\„%9ņD= u ę‚A”Čuص³øŃ(˜ńw’čO_.§¤†Bkļ~Q­©;N©‰[\ĒŚņžkŽpœÜc\m7å āÕ¢g\ŹQ­$śA‰ćöēŹÆJ湗£Ī…RŽĘĖŒĒ›•ģlSŽ RЇ$EāŖß\Ģ•PJČkp!>厹õžŅ>­V™ C(Ųn}1…½…õߞV@pū‹õ»5·ó”ŹM^’ĮrYH¹ģ)s×īÅ ‚ü|0aµŲ&Ī©Vę£Ģw:A«ņzxÉĒ–i‚Ķn§ĮõČiŠ`m_g‘ŗ‘ŗŅėq¼„Śr#޼Œ÷PkrŽ„+{–óųl2 ß¾sf~foOŃz‚e“Ū‚ĒŒĪOį:ųÓ:ż mÜÅb·T +^q&SłčāĆ^™üLxĀąŻ5KŻ!ÕNĘ»°=Š'~÷<Ÿˆžlņ¬±Ž÷š==x\“õ‚Ž /PŁ®ĄåŠNŽc4XŚGמ†T«s­ŚseHFyŠĻŹ¢żė£V–ź•,pŠ6r‡¦>,Mš“]»ˆE$>ŻnuÖņpštrt¬§WŽ/ęa†ūu¬£·k„į„<0/4·U£éņ®¤Ģł$”śęžÖB^Q~ś,ąĻ +קоf«sŸ7ź×ł-Žųx˜$‘ ³ +=F’l˜ÅœNm“ڽ2ĖT©”Įµs§čkUŌÅ ¢ēZźĮ‹{oēYŲe\ø×óĆNGzC]kõĶNŹĀ3_gćWöѓģļ…Ė_HĖąˆøSրxta’RłK…¾×"šėhh‰³[<Æpg¢6Č”Ä(‡ł—öĻŖ&ņjƒ`ܳ“Ÿū²žĪę É)f»`æƒĶæ|„^lŁš£­ÉÅéH;ž>\„ŗæ +‰;*tf Z6śƒü˜°ė½Š½·Ē1ų®y4„™ŗ?pėóU„‡6t$„ŲĪ™ JēüJŠ*†9ĶAŌē—䥫Ėė·K·(w`7…=ŃE>ōmŚēŻ^T×~ŹqņØ:c¤pĖÉĒl€`Hqk–_® +b›É>/„ ›”,Į÷w:}ŒFķąxäUb0 ¦ß"Ć£p¦źæV [#\‘ƒ“ŹRšėŁģčõF ņ›¾ƒŽ!jļ½ \Ó1ĢeOJŲ¤s e/ŁŪtéĀūŻ$~żąæ8P¢EźŒÓž”­ÄŁn9xĀSI¦^UäšSE‹Ÿ/Ņd‡3%Ō÷ū0ąRSø U)t?=³aPūūs‰ŻhaĻż¹ĖŸ=:££1v>Õ#]wtö… +¹?C”ĶßL–akš‹k«¤ĻÓŪG+9ĻøQÄėEŰ/%m‰‚”’ŗ©Ål;Ąīā·„īŒ vzG—})ńū•o%6v°t£%†@ŚźņƒVŹütŲźĖqų”Ą,^éé\¹†{7!ŪīY&ÅöļLÓyŅõŠ—ķ+l4՗mÖ§ē_[‘P‡ū_‚ w2Č?=gÆŻ–8¶n ,K,‹6T]Ó?½RY6-ń…©_l &£µ~˜,u†Ģžjc¢ńŹ91QgŹ6潄cŚcұ}ąøS˜vilŽ· «Ź:Œ•7¾*ŽÕüUå$Ēi½ˊ`šxŅom_Ž0’jH©|ģńśė}£×`fā–H€ä†9<¶6£’Šo>4ž6¬Śoe^#^–ħ›ˆ¹BƒŚIćüZą$„äĒČ3•ß7¼Ö”„NNšų o·1ЊvĒ”¶Q ×?Z!ķ·d:¤PqsDhü1ˆRmŁŽE«ŠķŗćŸó†ĢŖKg~ōģ±ĘSš¹ß8x ļHS›‚|™ÖŒKż·öj>õ~®Ē;6Ī™K)HōsN€|&ĪėĶķL#ó$Ø1S4"ī>ĖŚyŻ1Ī8"ÓOæ»čYšg•®I³\Ž“™1ĆmbS€ņ"sLsĶHc«C*^—ŠŹ¹]4t‡¦c+”"zČS…ń SĘh¦’¼Ø +·§›Ģ<˜ ™My ¢FrK£v„,3äŲQްm˜V4EjĪ· ’“Żüh޻ː.’¶ļ…ž{3{:LŲ~ Ėī æW§ciqO±ŽčcµžY*EĘėꞀ + æéĻZųŌųH‰ŻVŸ™³åĖø•KrĪŻņ8Ó ×žČŪõ?šū‰ś,|ęĖś®ŗ1Qģuå Væ·*h0] +SŽ9ō+dØÅx¼Š,pn®B'ōp 1ĄJY‚;€{ė€åJł£Ā6I»{d)Īļd(įón5Qų1Ģą»ń0S“7ŁékŅ·™É}F„äķ/ķ(äŠ\{Żräkē‡=½G|Ēun†ÄÓjƒŚü ē!š9āĢžĘ +œ š:ėĄ +”‡—õ”ŗ@ÆKŽŃߨŖeA›]>#ūŲ0ps3 ®ŲW”>÷•xŪn¬=6ł]9ļ ūĶŖā©¶7H›Õ‚ŃT¼¬µIä56”É¢ęX‰ōb±ÆIŗ£CJ>c- K`œŽ>XcÓVž+É÷ļTœ­Ę0e•µ!éĪ2ČcJĒæž®ó hXDbyM/ü ²ŗ<ßNo֙lˆ+ŖJø¤"9Ttļ¹ÉOe«3Ł' +ĀĀüś¼ą•Øz%ū—éō:ył82FYõMOķ ¢¹zwįīfĒńę#p"yB*2a^Ÿwuź½Óśŗ–Ÿ% ÕąCļ¦v©ņz°?ŸźēB: æ +¦nēĪ1a“;Œ—P–l˜ž˜ęåBiĻé(Āóć/źµWfÖĻDųA=Ö¢¾åT@Z`g¶Ø¶Öx +»šVCzŠ•Z½;zœü¢SÅÅūP×Ń6YT 7Hˆ¬E„ŠHȈͫŌ9¬†G×¾ĮQf>Ä;ˆŚų–«YčZńk”żI’nŚ’戰B]Ąö$på®Ė³nø ŲļŽI‚ +”Ó=\XCż†!•B§±ĻtßaŁĀK‘9󙟮‡ ›ć†‰0؊hʉ’} ō;{‹.’`+„ŚNĺלē].ķżģ¾­ĢSžļ"’”ÖŗjkFoq®³%°Ɠ0²*1ēĶQłh* §*JNČ +hO“ÄÉ5u-éG ±Ś]"i¶wŗżŸ +6äŁōÄBdqnXń.ˤØć®DŃś%äļ¦ż•CšVP¤Äk²%]0_tU^6–É*ÄׄõĖõ„׃·5K®W;\r=ū;ó)Wā^äĮÖ× Vv:ėŠīœü®JiqŗÄв¤a° :&)ć]Ąrsv€Š†GC¤ß¢é5Õ»Ć)M—”¶ĖØvņ¹ŹÄ+ßr“w%9<+³ČĢI„æ9ŚĢßódF"Ÿł+~Z÷1ĻM UōŃβ=1ł”’1ŏņÖ°1†čՓƪЧÜI3 ąóĶųӅĒU}÷ ’ÓKņHZ⤬]0’”LXś‡¢’ē5ɛ-4.–ü%|N }8€?g"ŲPÜz=€Š,†V›@†Ų‡[äŚåž3ņ1Ā$­MP:„ø32ŪøųVŹ%.ŹĀW=Zwkŗ®Ķ;H€„R¼mŽĶ–ėL†J,“ūiT“÷+ä›ķ’–.šķAD c[€‚²J}—-4^-7™;æņˆį“ ,kˆwłZŰgf‘'Į¼4č“AŽ_¦”›„9ö#X ףćiW4å5’­«ŽEw|As FŪ¬×\āqż%ØkēecÅÖtäSÅóŪ„:ŗMVģč;ųą™9¶åž/pį ˆ=ĻĀ PdŌk6³a[ÉčU~{įn&yMuyĘw5ųĪųT’DÜ”č—ĖžĒœ{ƒŸ7Ƶ|&åb”DIņp_ņĶ\”EĖ…Mx&Žā)ßA¤”×%‹³¦žW¬Ŗ Gšs˜ČŻŖVš¢ŅRŪĘ߃ ßįż3„)/«·&»B@.Łi¶;™~쾬׎ņŒ#’:Ƶ@XnĶūCp߇L^]ƒś“e•RæĀšŠfæl Chćņs!““·E}n…„v×WPRõżįń[£Tģ…Gėbļzš×Ć^ŽŊ“ųµPIņsŌQŅF™{‹ +ÓZŁå§hJS‹܈‚Å( ĒY92ŽŲvß ĘYWj*Ÿ–“ČČŸō0ʵņQķy†%·wp%"É0ķÄ0øoł“šū±!Āȑ\N€żÆļ‘äĖŁž¶±¼p£Ź@æ°{[č[nžśÄȜ@—CZēeŒz|(F¾FšżAŖ<«¦x“}¼vXlZĘ`·•ĶŖ@ļ°!Œ£I+žw‡é¬5h‚Śl­NFn-­_Æ2f4ŽĖĻaz +µG_čKtg“Ę®r·»‹XūĘŹ©qķuåė®R“ŽŁ0»öD-ŽÓP€TĻ/£A­Š¹BP ²å™“ ¾ [o£t#O>ølÜg©—ĘˆųOK`÷¹ōϟ4š@)|ÕX +®ÅĒ‚ŅśÓä˾ŌKœżSņ‰rRńōĄčcø÷64ž­ „Ś»|ķTŽ~jM„¢`b²ŃA\ĘBLKŻ-i±”мöÉyöł$-×,ī5aFYŖ»ż§2O\Ėł^–ŠĀ'ƒÓh;~š5Ri6Liæ üŽĪS6óÕŹĄ»AC.Jķ|d蕄h%G·“dt øž#M茬Ūä4“ćē­¦”€q—nŁ{xĢčÖč%“Ū~°' y½~² Ż›t5#ØI\fĘŠ‹CłU¬‘eA¶l£p£­–'{tł½ń šĄe£[tŒ|ü×äbhuŖ$ŅM‹Ķ?š?Ī·¬Ļz§Zgv­Ģ[^²øÓrlĄ}É@ü6ß;75­‡ęÕ¾6ėvõeB”¼}„įe–ł 6å>—Žzz~+ŖØųĀ捔Œu°śŗ_Vaė¬SI”K˜¬Ą"%w3µŠ ÆÆŌ¶‹é<ŠńģU“ńšˆl¾ķFƒž£Iæ$'2“Dø–·øk‡ÓöēY0:4)ž”,q„GÜŁ˜»mš6ū³ęjZµłFéX‹%pX‚ŁūžĆ½×Nģp¦•u«ķ$Só ēÖ«5Qµń „KĄ·CŽÉ"<Ö ¬ėRo\Āhń uŌfÉļc­Ā_vÜ^x°‰^+ĒeÄėaĖņvgŗÕæ,†$›£ ÷3ÓcÄįŖę>Æ<@u^‚„j$īĻóz ą[lHšx@O)‡‰-š~£$’™œ7>wØ ė .å6ĘīMĪSÄ(^ūŗ”£å£ahŻ-÷QjŒqo1Ba-¬›Žr–šˆŹŸ7³g} ÅŖqpŪŅ +Y¾ŗC!~ά¼Š=<ĢÖXŠ\ŁpŌ~N7īśĒ±īŚr® ,n6}Üž…™eĮAĢć'-Isē8 BÕ}ģ’'µJųF`yõ Ef «¶“‰ps~4|­¶•īŪ‚B=Å÷!eŸ›Óć[tpBCċ‡Z¹‚Y.« ”¶SļÆP)dŁĻµŖ‹h” rzĄåĒļ¦ō'$HĪ®ś:¬Ä’ŲāB ovy隦Ķņ“:’ąę€œeŻį< ÷īė-FuäS™Q’t§®š%+$¹\·Š†’m0ĖĖ ĮŸQPl“¼ÖüGU`|]¢V­ w*ræ·ė-[śĘEW銎`Åó¶näŽ3īįY“Ś‘ņnįĀx#=/ĶŗiØz<ņnZŌāøū öµūm =TĶ'µŸW““ź‹®‚§„ŁĄŃž\ø·ī8»1¢­žb[ń’”AŽūKåCG΁Ś·F×ZN(PZDüö›„×± Ö@`gR‡™­­žÕ ×{Įn%9’œƒŅ_ڟ œęS® ©OKŠ€‹ö^}’DnšpQ{šÆ Īæpbp0’Ģ tō’‚÷¢]’V4ƒ#XܧŠ /–ž±žü'Į%^ĄmÅ›ŌŖ©ŹŖ· ŁļŲG±»Ę øƒ$UFøŽŖ8Jr½Ē`E”æoO-4¦‡Ī9]¾įÄßĮ·I½D(±ØÓHé›BóK*&Õę)æŖ”½ĒŌŲ(ąصęļV²q_ЁŽŲtĶ ę°Lł?''!ĆvŹĆ  ³uy ęFųr#Ž"ÜärR4tł°'ŸOž˜3ž%lWūHėķRµŸ’įļe5ų=N©t­Ć5²ņ›„80É6+Ū¬“†Œ­q2-»äTåE‚–\Į-w˜ĄŲņ*7IIZ“ššÜƀu~ĶK¹™OéS’U~¾Jf݊!} >Ł;f-Vī­J»ÕžĻ“†c8;Ź[*iķš–;Šrō’^ž[āž=TWŒœ!%<ŚɃü ŁLkĢq恠 šģóE(•sĀ::ķKŽĻĪŪĒ͊WĮ§ ų2t ³Ųuw»"'ć’SYę”ļ¦!Ŗ‚}FWTŻ4å8ŸA"‰ÅåĻĀŚ&¼ņ„ßYŗ°OŽśµ &{é%CĘ~GZÕ +Ń+É8`Dü»Rł CGV—Zą>銆8Sn·+ĆC4§‘žÉ3i*Į8€ūŻć2MÆ_c.{`*ĄK©Äó±Ā TŲŅÉÕš‡|3}ą„—ÓŖFj±ŸīŌõt‹0 qł?©å»"”Iå&6Ł’A˜Ÿąg7Ä >ŹÕ/øy#Øädųõަāēšžó·æ.j)T§°7 Ą‰ų¶e{`ur µ—a¼H¢~y~ZÖŻhĢēJ7Žē2cOļ+¦M1žrL%Q“Ā:&§ķĪĢ6‰5) yŠ6r +Ź—µ,Pų*Ķēū®`Ūu‚Åæ¾ņ•:ŅŃŲīö­Źåš‹Š£jä¹ˆÖųƒjjPąųLŃ„H»™ƒøž’ #£#»ŠšZȓ™cą¦ģܖD"†a +łŽE;Ž+ō ¤Ćę+4{¬”Ķ)ÌĢčāNv§³Ūōž–ž¾č¦uĪ üųŚūĮ:Żø-39ŽĒ²ļd2H’ ōŗ9õčōz –³Ļ?÷¦ŲV[FŠ@įg“zŅß:NF‰ē4¦oŹ6 >ZkGgq’»ŌŅ–§>¬Fų•żÄ4Ā‚ć*d%:Tnń†@µnūœŚr}éUŚ«ŽńȝŲ], +Ŗ7BčŗG„óĶĖSKķ§rh± ā?ŅßLRĶĒ& ¶ ¾æBØŌ„0}DĻ‚T$,uāŠ^·č9‹ļ T’³€¹ŃÅ/ļ(½HµŌ Ā0jJüG‡”·†åH¢FIxm†łQõ3k½b« +üV“ˆV2„9ē®6·]ą’µŃĄ|ń|’…ūŹŹSČ)Ōugõt–cūšłĻĄ™¹ ”.Ķd£Ā_/»Ø²`稙K ak_=ž·”RcųžN”Ÿó„Ēiżū?Tąį ć«°4©n¤³ā3Č ć§ź•c²”mčżtķsO»¤M0†ä„^K×qć&ŪÉׁ*’!ŽŠĮ'Ž=֋oō„0Ė¢ųw‡be¢Zuļų}Ų9µA:ńāB«V_fļÅ'7B Kł+V…±Ž"Ŗ)Õ“Ā$‘ÜlļA9(Ż"ČżÆT4‚ßå€mŖļ¼1“?Ń`čOt“$ĮSIŃ3‡ųĀ #Żéo˜‡7v=žžöXTQäõvYµ’c%4ą·ū…BŗėQ 0ōB$uļ]LźU½żĢ¾šQŠ8e ǧZ+äHŽ*Ļ…£iČńFJ‘ŒŒg2Øė.Į —īiŪ!ĆWl­G Mń"ŖJ»U–.DnÜ}™08åIĄuVéQ RõTSÄOĄ—}¢šŃÄAl‚#Ņ endstream endobj -1339 0 obj << +1262 0 obj << /Type /FontDescriptor -/FontName /QUTYHC+NimbusMonL-Regu +/FontName /FIYGZI+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 @@ -7470,10 +7000,10 @@ endobj /ItalicAngle 0 /StemV 41 /XHeight 426 -/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1338 0 R +/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/quotedbl/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) +/FontFile 1261 0 R >> endobj -1340 0 obj << +1263 0 obj << /Length1 1626 /Length2 15654 /Length3 0 @@ -7545,7 +7075,7 @@ z)1 FąŃ”ś³R:…{pIč?TRQżAjŽ×7@ß*כ(»FF uXFģR;ą£ĄÆŻč Ķkœ{jżm.‘ęŠģ聳Z7ā\†ø7VųŽOg’5R7ó“›™Ņķ@=ß8Õ"æx‰Ä£jˆįͦŪk¤7Øq(—Ūö’ČŅ“x endstream endobj -1341 0 obj << +1264 0 obj << /Type /FontDescriptor /FontName /NGPWFR+NimbusRomNo9L-Medi /Flags 4 @@ -7557,73 +7087,60 @@ endobj /StemV 140 /XHeight 461 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/Q/R/S/T/U/X/a/ampersand/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/f/fi/five/four/g/h/hyphen/i/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1340 0 R +/FontFile 1263 0 R >> endobj -1342 0 obj << +1265 0 obj << /Length1 1642 -/Length2 12001 +/Length2 11828 /Length3 0 -/Length 12853 +/Length 12677 /Filter /FlateDecode >> stream -xŚ­tUT]ķ’-īwŪĮ=ø»»;Ż׍»'hp·ą®ĮŻ]‚—ąÜĖ’Ÿ{śō8÷öKw?¬5ÖW³jVÕ7kÕGu&Q ƒ)HŹĮŽ…‰•™… degźź¬ę`§äĄ«Ą¤ZÉŗ˜ŲŽ1N$**q0ČÄÅŹĮ^ĀÄÄŠ 3€•——‰ - īąč ¶²°tŠjŖiÓ100žĖņ— ĄŌóŸČ{¤³•…=€śżĆ dėąh²wy§ųoŖƒ@KĄÜŹWVѕU’ŠJ+i¤Aö š{*®¦¶Vf+3½3ˆ`īŲžć0s°ZżÕš3ó;—Ø3Ąąģ2³zy˜’‚Ž °•³óū7ĄŹ`6±wy怕½™­+šÆŽķęävx÷°{ĒŽÉTœ]œĶĄVŽ.€÷¬*R’ØÓÅŅÄåÆÜĪVļ0ĄĮüŻč`ęśWKcļ4廓‰•½3ĄäįņW.ShåģhkāłžūĢlõw®ĪVö’Ŗ€Y˜€¶ gēwšwīænē_}žS÷&ŽŽ¶žG;üķõ5X¹8ƒlĶ™‘XŁŽsš¹¼ē¶°²Gśō×¼ČŚ›;XYžaŗ:žs’¾ Śæf†ī½ ƒ½­'2Gś¤äąņž@ūßS™łOä’‰’Wž_‘÷&īækōŸ~ā’é’üļŌR®¶¶J&vļš=x_4&ö€÷]Püµl\ķķ+³’'ŅÄĪŹÖóæŠżwomŠ?Šs°ž;ö~Q{‹wu˜X9™Ł’a¶r–²ņU¬\Ģ,ę&¶ļ÷·]ÓŪZكŽžūn߃XXž Ó°“2³±’K Ī@ {ąæ7š®Łßå’S“×Taų/6ķßĪ*ļį¢įéüßLڊĄ’8üE%&ęąšfb{/…‰ĄĖĖąåāšż’dż›‡õ_gE°•@Ÿ…™……šžžēóÆÓ磑“7sž5Bź.&öĄ÷©ūĆ_°™+ü.öߋą½ńž’žČd†“ōĖĮŒ?Ä:5#Ķ„/gp\B淛z0Ō±ų‡FA^@•C—jŲ&o¹ńsu(sż$ßk‹ēü‘ćĖŽżīp7®-MW2č4—Ų—‚®'cŗ›a7č“a1jŚķ(ļ³9… =.­ŻßćŖj†EĻp$“mģ`„³;ŗ -·¼lŹ[Ē~f)u18ķčõ˜5łGØīniśG†ŗ.`{vˆ²c©ųMšü’Ž>&ŗxƒÆ˜½Ā>ŗqƒļnDĘŽ@+½ ÄR‘^aél;$æ„śŹX鞰ČĻK‘-F’RŸGĖĶ|]ŒŒŁ EfJĻ6‘óē›hL8 öMēTŽ -k‡Ź¢œ£¤®š@ŗ»t×i¤Ć[Æpž¬Ż4ąÉį.”:šģ™3pā›}ŌĢŲķ Bµ”$ōŠn¼Ÿmмµķ dzC¾\!¦ ’1Y/Pūõ•Ō™#uģŁżŠŠČÓ8Žy„žGGöl/ļԊč[7%Šeßk -4×NZmŌs²ģ*F‹MłmES}^u40¹lJ³SŃŌéb‡§ĶTdK&u}™:X$ši¦+(RX„1”b·YyÓŖ"¬‚ä©—²ō]Ž4MS7YŃLü<¬īé tŅŲĖŅoģX=kīŌ†}'ī+: -—P㰊!L­zAā-NزŅx©FFī¤Z<żH–ØiżöĒ\ŽWlāƧ”×É­»­“Ńnȅ””8"ė;Œ1rvzßÜŌp ZgŖr@Œb¾“ Ą‘–/HšJ„mƒ'“ņé½Pp¢«ķ§füw6~#”É5 å%›ēĮŻ(æĄŚ=BÖ§c -HŽĮœą<Ć8ōī=Čʱ+čf -AßæįöĖ*–t˜ ” € †ĪČ zģ,‚Ÿ×ʧˆŽƒK½ÓwźPr]śV®Fd$§ōæšŪ—Ć8tmm…ź*LŲp€ƒY‹€;ķ6a²/sKU– ģ?ŅÉ?¦QWŒgož¼'mĢ6‰)”{›§<°QÕ6„IÅGś6ēČÆ$*™S»œ~U‰Ōäģ cNĄ¤L\Ȟxݟ•ųĖŪ¹ŗH!¾9 jtµg½÷ć8‚æ”pŃK-D#ņ˜Å}ņVßsĻuų}ō5 aU­TdüÖ ›ō$ŒĄ,2fāR4ėź$ļd$™/Ų^ß.R'÷ü"I6oœOŪ‚÷Ö[ģ-r¤…‡ä­Š ˜µwōćéŌc2‡ķŹ“_Ķ×P„„@æi•I^hĖĒĪa5Wm°ŲNŃŠŒöēņĖ²gs±cM!,†rŚ©k+! LĻĄÄl -„kØūŚ%Ŗ±;„ŠĀ7²ó%WĘföĻ7zG|:)¦ģā}t |)\÷t¹(8ÖGe¼śō«Ź¢=³nTX†ų»Č³—_śn•Jµ¾į$²iõü>”Ģ= š=P7Ū åN4¦Ź’˜„ź÷[1‰g - Ü"cŃ{¢žt?9 f’Ré*ź7±”RCŽRF?pг]ŠS›”“õwbmś†w[{ -W{–ųjP²śž)Ł”ģæÅūūÉRŲ5jK>ųOĢ*n“@„w6å„!Ģ|ÆHčķk’ -Į <b‡e.\®æä×¦0Šįo+č ¦[uöæā.µ-ń²IĻqr¶Ż£Ķ[D '“¤bš{&+œwC‡:£B”Vż­&h„÷ųp_S7ŗł!§Õ°ŁceQhʽ—n <_t»¦½©·×‚·ŲD©•ØÖµ{æ0f‘`1 K¢ŁŖ #ŸYƒ5Z?v·:#÷’IZ -r‘ńŹW€ŗ+„Œ¼›ø “e½>R±D‹Føąź¢¶³9ђCiĶĘĒVČšQ"ræ‘ ^Ö±ĪŹē/7Õł“«_ž)Čōš ą×”¢©Wt}ó䆄õ<©Ą„¶:(uŽB'„CJ·Žį(IōA÷yFī”»#So5\,“t2rõęx=]ļ Ÿ ®Œ/rGŚĖCÜŗx„ŲÖŌäם†Teįǹß8a¬ƒænóS;č{σŖĻŗru3°²j¾¢ķęTŖ>‡öŸżčsmTÖ ]·5:ŁZ3<2«/Ćļ”Ó0¢efSy€žœ“#">¼Ń_ļøv$ź¾ŗ¢óģ¬āĶčo~ä -³ŠmźŽFA ‹Ÿ%ĄĄŽ÷ĖĆB°t Ŗ'ģV„R‰čč·ÅÆåņb§SÄźMžlł“"ĒŸé°łØ]€{3J`'ż‘,źózs&I”;ųڵÕmĄ3ęA²eŸ¼§b/›_UĆX\­Š¬c⩚%”“Ī–…³® ÓS$:Ū;£Kįj/Ńzå+łš 4i`ŗI{Ćjóē…#?$. ؊ÆuvåÓŠ&ˆ»śR=féŹ%×EyÕņG6~“µ}v&yhęóĀą*ü*ķ)v\ŪĒ~Se>)įD±a .«EÜīĶm«.1sį'w6Ś)ƒ€ūć:›§€11 Į4ėž™”›BŻ@ąSĒø@1ŻÅĶ”Ą IÖe\«éČŁT7“›HĄ>ø„½ żÅ(1}‚écźŒVGz„M'E†Š’|ĢŹ>³Æ`ćk¬ ķŪąRž>ōZJµٌHŠIG¾oīĻzTA54ŅYˆūXMįeģX¾˜cH‚2ģÉڧŸ¼ « ņ($ø}Y¹ē  -‘é9®¶lģŪõņŲńüūŖć.—’¾Ł³€jrŽ•[ź(HZėĒ”„aS‚•1dØĘŚb>²÷kØ×ö¾ńöĀsPjŒ&JšÄiš7(,tt/dęŌLœoüĮmuŽˆAÖÄ'Ėoæā‹!i¾>§“³as„‚¢Ž¼öŚ üi”²#ö§ŗ›F®—¹SlÆp£¬FQ&”@c „+‡Vč¢t«‰¾—ö;!x6Aēąas-ŖR¬ÄK†łE`”—ģE÷„̰č€.²Ųć•}j~H;¾ Vh ŪKĘ1IsŒĢ[ŻŽK×Z—8®xPNŌmʲX·ī<Œ4ėÜĒ HÜæ}pC+āD6_öÖųb…}`ē$uĖQɌĄ„¹ž±fHÓÓ< ĄFéxęīfĄĘÆ|ńŪłGņ:ĆżP•o Åߤ»•¤e”p *‘ģ Y”ÕnÕź‰ä)PńՈĒ'ßaŌp%MÅ5lŻ.u0\ČÜ|SžĮų7†ÖØŚŽŠ9©ŌØ{Øuń -„™LĶ“  ”Ē71bŹg‚ĻBĮż,;ƽ=˜į»½®iŲoŠt(ādÜ\›Ż"=Ń× éD÷Čo9Æ}»ŲĒßv£XsĖēK“ĖY· -ŃR¼›GąņŒaĄ£c³AYVqSēķ9ójTė3aŽņBxtĆ·`0j~FU(>§čódkŽńļ SGė@>˜2 Y{)ÖšeJ¶&Ėf¼#sßµļ DĆdš»jrKIÆRĒG€ ,ū8gwTŒx“26z>ŖņØõ¢"°A'h*&vĀņĻą×–ģ×pĆ_XĻ<ŸķÖmŸX!„É“¼z¹»øYha‡˜ż;Ü·ü…8ofŁQ×ń†@WØYž$Ō·ŃKż\d|u»ĮRKG#Ū@Æø7“ØW5bÜĻb¼—Č®ņšh¾ÖĒģ†`lKÄ:ąŅt/Ÿ¦ń@~ō±OµæÄĶ&^ų&>^ŠćhŚNŒß‘p 5¬ŒŁ9Ļā•Č£³u—cą&ō¾üxQVšć@Ļ["okvƼ²ęāÅ\…2WӘ|¦ĪA3ŠÖ„UėPn°KQĮH_}yX™‡śÖ£jVÉ˚¹Ōż«9É8ģ=hµlbP߇(X7ŖSI!L¤ĻŒšØ$³iyFQKa)%ū^$–JeīwL}»Õ/#^Į‡>§ÄJ)扄rŠ$ˆĪž@   łØ‰š$nńŖ†œ,\‡>óH$2ĶŽį¾’j?_« bÉč«•ĆGė`gdpv†/Rq8øG[ĄĄłŽDu ųM,.Ӈžē“łf›žHŲĖóW‘qƒ””Įo kµ“։iĻŻµųmņcFuŠŹ>Vk«¶&®”7`œé’­÷®W®Eū«h¦cY<Ž\}żÄ"D\7æeåshó·sŃ -e0«žqdćŌóž'¶k ”‹²‰ćƒ\Ęōß±æ2—žO7j9‹č–^ Qc«”l؜÷z;jģ>· ją€šĢ͜ݠf4qĘB7ējL0Ć ­ĖŁe‘Iǚ½†*EŽgœ›a ‡IXŽ‘2ŗĒ;:Ž‘&¬ę *æĻ¼°A ké=Æp&+ĶūV£ÉØĆ²P2Œ©•SēV|š€Y$Ū/$JWt Ø[”ŁPµD”ņt€WsDt†bZ–ĪOY÷„ ŸÄŃ§bA[į”ˆĘé½āOOѳjūK–īyČTčˆŠ¼U@$QhRŠō6yWńKųĢ1¤3ŌH.r$#bꢪ›}ę*I)2yæ+źēXų?@‹2JęŽVˆ{į²JYO§v5ur‚»š]"@QčožØįÖÆ¤†rhИڪ³µ OņĘŻ“Åŗām\1e–\w~ƒS)VD0,NlÄę“aiģÄ~ń®ƒģ8܊¦AGAŲø¬EĆ”ģ¾"ųes£ ē ću?dxĘKšĒV‹sēßŪ–ŸJ&2¢B3‡ż9Ž£4ÕgվƎ-I‰gH ~Ž“Ē®Æ“şšRo2!ĘŲŽJW}‹¼§ÜqŁ>B5]%‰ūrt¤ą+Ś×ĀŚGö¢‚ag*VG‰š¶×*ĮnrVļźT~ƲØ(‰c‹Ū†y¬’ŗįÉĆ÷M²õ[U6‡½kX‹<=vŹĪŽÄJ!.āe/ēkc½÷ֈVkL6£&źx‡Ź@ßn_æLWįIŠŃsž»®löń¼0X÷2“Īkw(•(Žh…E Z!Öµłõń[“Bø“_łpkE‹'72nJ†%~;»÷U¢ŚžŖED·ø‹°˜y{›ŗ•ĪÆCMĻ+ėų(~ū(jwĮį©Ś>Ł{K_.愨_Åé“*IæV–ņaĀrŽś8_üŠ&cÅW b2”Ÿ+ھy~J‚Šy§‹õ‡6Köč~½źŅĄxö‘ˆŻŹ¾®ĮH@Æōp½ōš“wn„eƒŅéMHõÅešŹŹu¾lņ“½32¾Qm„„Ī"śŁŽY1„Ģł¼‰ģĶ×°¶ķ$¹gl%»qŚŽL'…ż ńŸ?ĖN!•ĖtѲ¼ /Y–-Eu¾ņÜčzz¹HžĆ@qTa‘Y{Ēģ`Ą8•G~Gœ“t7 'łłGwŅ1cWŗ°|rü*™ķśŗźĢQĪ0Ę>}ڌ,›E z&³”Šć‰>ÖOFyä)Æ]\Ć`ģJM^\¦1ōķo:\Qēķ„.=uņ­woQ®xɲõ Ć+lX#nxvm°ō ńf%8c6Ķo2Į2m¶Å0hėxĒ€ķævMFÄ_2 n,¤ž%~»eVSŃLC -|¦””]ø(²ų–ŻØ1Ćl‹rŅ>t¹c#7p‘v÷ -£jŌņŪš„‘ˆJ<8=<³qbM2&IF…˜,˃bģ£æ¦„ięĄå²8žŠŒEd ©/†ŌćŠaČ® &Ń`™ ó¶£¢š'ņ5–Ŗ/ĒÓ6wā0`r³9­1 æāBļ2T8ŒL!=5ұoŌþ~®4O=Cž¬ėC³æ)żĶĪ“ō?łĢˆp^Ė/Ф±H÷ŚņH‹›zC›’ņڶx‡Ö-łdČ’ahˆwI»–˜Żģ‰ĮÉMLE¼ŒtĒ‘żä"Ė)#“®Ć›y9A¤ID&Īės?ø5\HŃłm¦“sŸmEŽYÆŻ¤×_v’óüż;…5¶d„¬Łk&X£ói-ékJ„Uņ <t½Męš[}•ø*cŸv(\²ˆJƒ^ŒŪ§cj4ö[jJŪPŹ€½ÆŹAoßćÓX$оŗÕ~~įį¹i¦ų­,qå hOŸyµ¾CŸ$µnXói¤µć—‚’†ŽÜżņƒkÉŻ“-éŠ.’”Ę™’›×äō8§ķj©7(#§0ƙR;LG5ˆ@a2oŖƒ}0}AWjå> ©3ĄźLEé°÷*=G¢ÓBI~dĖģ…Ę„aēĆéįŪ¬®ĄųZ -R_ÜnkcœhŅW…×…nU'.Iw—~ąÕ¢¬®o<¶÷D’ŽU3ģWkFĶFó]µ{øøŗ7«’±i-ƒ«fkĶL"Ļ—_=alä¹#(‡"X Ąpµo`ѹĄeqQJßEŒs—­ÖX4š§J÷nIŹGmxc–‡Źć¹”›UncŌX:‘ŸX®?Cy:¾Jź]Ę{ŽM%yü¶×Ą[{°YźŲ·‘6@®ŁURÖ⮈ś-īķŚČv±ÅUPÓŹxū&˜~pC‡xšM$ŚP’A ócNöŠ!Ä­J ³Q#āĆM¦zn÷n›ˆuĻ ę Ǿ¬˜CāY-咆f+Ü"Méėh9"¤…ŽULx©ģŅ| ”6#)£G…=ĻÆ?8šwSŽ I¦ō\nv$qTg‰ƒc“a‹Ļ°60ūŽP“Ļ£0į·lrõBßĒ|R¾ōuāN£OµGNŅYēA¾œT ŅāBK§Ü‹•ņŌ|aŁ­O4:h}—+ó& -£a1'SÆ{”Ÿc,OXµG`įU9ū _łš­SRbĆTU q×#F$HW!š~ēį@ -‚ aXC|VY‡U‚Ā~^'@9ÆĶ>+Ē} ÕŪć)$_…ÕݼŃu†m quŹ€vźĖ¢”•¼2·– ų§8™ōE‰¾<Hʝ›ž÷¦ó£Wą,Cż·ķvYų˜š·37Ś V‹ću“āÉCœ©ÜŅ„…ž%ŒŹū1P+°2ś»ė…ücyŌqĪ -N^: Fæv¼^%eOyeAw©cÖ~źS żųRk_ż½ŁĘa?‘q&öWž1§µ<™9^v>¦“`T‰r­Uü„ĮnDŖß„0ź@ۃĀY»äær 1$ūāÜ{%˜ާš$1t.*»ĶW@½1l)¬tōc~7¤”/gō”dü…“p“1}ņõN ł7N4ŗIo™†<>Īqń` ,Kš€­Ź"–Ō@q~ÓJr>o‹FnŚ7]¬ShIUń/ĢŌŒĒ¬¦óÓyE–š#ĻE„>*/I"ĶcD„(+rŽ®·ŒOF•*ؘ|Ść\ØB Z'BĻ\ö W”s½Ī!ņ#V”c†Œr+ÕżžxśfÕ3jʍ‰ZLe‹®ąā%@l¾P©Œū]õĒĶš®šPķå@xŻfą «’Jmndž9jŗ9fūķę iKŪĶŽ¹8cß ±NZ†!w¼F~eaō½Īń2†Ėõ’f„Pč÷Łš…>ü˜vØųß¹’\ܜ??Gq“+ŽLõvvP š”Ž”ŪŌäÜCmō‹"KĶ×¾žäJ Ķ~¦8z -›1ÉŠ2īµ½r俉\7‡Ē ¦Ż5ÜIJbēź },Ÿ‰Ś5*.ö@Ņ„»ŗ‡Š³F«g’śvQåĮ4쁫} `žw5·˜’Ī}»/XY|Iēvū ćGā/„ß;YQyÕhÄxgåž#S°”ę©"o.P —õ‰Yķā qˆSJąLøÄ#„5Ź{!¬śĄœ£“u0aVÉKFŲ5é0éĆĖzŅE“}4œš'VĮd<ņ,žē”ƒäelĒõōŸĘ“b$ RŹ–™WÅ>£RÉZ+f}ķŃ*Vņ±s'1&»Ö?X2öœs:vƒ2 1µˆ½÷'ÜBĪĻJi_ėŹ?¼Å®„PD›˜Ģ’µÜՒ˜ü”ß‘¹yø"÷5]kŚÆh‡UĶ`R£„SæÕ_Ü_lBo‡Ÿb»¬āB0@Ģ4q!oß £4 -Ø“ØĒ;AiÖ²5µ{Õ¤ŁślĘėøóŖ$Ń`G`u!løé„§™NĀd -:A…T£‚ō²ŖdĖĘj&£xÜR³ś8O¼šKÖEĢŪs×gӂ Oh-˜ķF"kł+Ó0ķ^"‘±u©m{ Ÿ ‚dD•ćäĪ9B¼c†ĪŽęä ˜ßĶĘÄÆŖł«ļš,›õM²‹,`LŠĢ84Dwėó¹TH±%<Õe#öwnz·eHŸ{ŗ°u”źÅø6śČę%®1ūõI ~Iź˜zų¦”Öæ¼ ¤vøŪļķŻĒYčCĶi¼o>}&$½ö;æŚ­Vö†š¶Ftē£ÄZs¾Č©ŌÕ¹©ua«'Š©‹ų5z÷żUā˜VÜŽ4Ü`ŗ|rŲŲŗó*qē«ÜIŖoļö1DŽ;”¢^³!D¼CĪü³}¤Bœ™i®^×ŲāWķ¼0Ā&ŗ*ä}Ēcü«°Āe‰\õ7ü&¶¹]Ā/lģ‰į - b– OŻE…eŽ)HÕ(źW¦ģüÆŅĄÕG›ō<˜70GjjīøŁßDaQ;K昦ū°M£b_,ØĻsż²g‰9ĄĶEų_šF<3½Õy,p·RĢ[ -=÷VÅMd†A]‘“ćŲAj‡o¼iU8#zMdGU~Ņ¢V÷Ū¾S^ķĄćݐKČŚEķŃóxpĪa¬«ōDsŖŲM¾ŅŹĆöžo÷ź…@ˆc.f^ČTžę)ŁoFf‰Ü,”Ī-…ż|Iś²DĢŪѤzH?#¤;†"ń÷«p M¾—©‚““ów ®,ån7!o¤p4„ēżįBh#ʃ¤’ c‹Üü>‡FĶó¢Ģg–śå§œŗ=ūzĢPvL8ÕœF‘ä–ØY¢š|쯹„Īyy“ć»eVȦinņuMŽę)3÷«ĮŁé ĖVŚe+½‰ų€ć5\^Ü}śV"«ryS3*¹x󊰯oLj=ĮT_‘šČ[>,­cöXēųg§0ž „čĘ9E+°5āŚå>Ć/‚X’ ‘ē*»åģ_µ±āvhA}%Ÿo¤ ÖĖą~Ā<yń•`”UgHįN4žĶhW:w~Ļ,YJR,%š–¢cNk‡"r”&œč—y±šr>“׳h憙VNš-ę^Å®ž€™8‘mėbQŒ±i.U‹iĆt]}4 -¢Į– -F#"T‰ÜÉł¬ƒ@ŗ„2Ģ·}Ŗ¾ÕŠ=§Å­_ŗö ę¶&ļµ’«Öń[˜Ųįis©óOL”ypÉ`Ø9÷Ӛĭ}Ž*Ķ ą «ÓO¶Æ®”Ē7ēj<²^&­é±¼*5Ÿm¦t­ ‚^2:eTȱvyĘØŹB§Œ -˜Ÿ¤M((ęS™SņƂˆŖE<Œ‚’„ęc°\üyꭜŁ:ūlóŻaļ} ļś1N [ӚKt(ÄPšrs&ĘĘõpųĪ›ft†7׀¾|¼ŗSˆ³½xUŪņ¹VSčhĖåÓĶhkóŽ™d“Ēžن³(Øü‰PO@ńĄ”®‘m*«_Ń\Ī܈nåvx’Ń>\ŸŅ墒ÉP8†1O^¼ŽluōOdÉd(³@•TJŌ‚‰ęr¦„?fXĶw«ēK± -Ü_Ģ]{ĶyBō0Č -ˆœĢŪ™Ø%Y --vœĄfÖ±ĀŒ„Ō'^»”6lsź’ĢŒ³‰Æ+šC[!1Ne÷¶x VÓn ¦+ńа~HMOUtĖœ¢É "4ņ¹_’ķ…•Sūņ0~*¬ī’Nm<ŖÕT“š/iD×Ģ<Ų"Ÿ²W}1Ģ›; -=YÆ>%aéB:ĀÕÜļ=ŗ.­Ž–r¾āµ?‡Äć>…»ŅœÆŻvk†Üƒ9h®E^5aWõŲēŁĮāÜėė`…šł|@oͧ&¶= $‘¢œ -j,3œ5Ķø±Œa»]ōœüėHėÓχ&DOP”Ļߤ8FfhUĶmā·K>%`|Óy -€ÄX -6bĻÉ")Ea+Øz›ümõŁĄūacߍcŁĮ’©{ 'ßæ£!{żG öī '6N®·œVo¹mķĮ(ģĶ‹Ųąäų‡ŻŚÓ埘Čķļ bųkfߊ°°†€|Ö vUˆĒ[JĆOe¶’=‘’$ž_ųEŽ’™ø’®Ńz‰’§ļóæSĖz:9©Z8æ Ą?ö ąmŃX€o»  ųkŁx:žŚ7öV’O¤…³½“ļūļŽz -q²žwģü’`Ū7uX9yŁø’a¶w—µ÷Y«Ū{XŁl,œŽ.īo»Ųäęd½ ü÷ݾqpü¦mgoåžK Ž@ °õæ7š¦Łßå³čĖėu™’‹Mū·³śŪDxhūŗ€’7“ž +Äś?QIIA|ž¬\o„°rsńł‚|<’Ÿ¬ópžė¬bįįfļ0ā`ćąą¼ż’ó÷Æ“ÉæŃȀ­ ֍–‡ŲśmźžĆšlåéęö&öߋą­ńž’žČd…²ōb%īž%Ć£–0whhŌ×Ć ;ōĮ„“A»Ø ¤Ņœ¹!XažTó­qJč„Õ÷Ē”Ėó¶"ÓĪH}w*č4Ÿ,†±·ū];?óN(»i)zʑŽg’³yåu8C>Żßš¦%OäSķÜnHgwŒ!4^!xļn]0‚¬Ņźćš;°”pj č’öļnéF‡‡»/ą{·I™sāi…-ƒR©’=|ĶŻ®¬^ą½ųŻīn$CPĘA+>} är‰>uq¹ż;” ¤ĘŖNx¹ŽČh“„h`룙Œ¬±ÉćX…U ‡™9K±ÄlłŁŖKįfä†Ir’Ln՘øŽ“s“ōhļĻĮžzmā 2D‡ŽļCu{Cƹüe“ū¾½óĘ®Bs:Y҃;½"¤čŽļH|ōšīē¾éÜ:õæg}E½\!{Õ0Õ(R÷ńEŌ•+{ģŪóІĢń ®igßöŖoGE—ī§žAÅ5KbīŻę÷6z)«M†®vŻ„˜ń©įæķékĪ«§VĆ,é·”š»<œ õXėC(eÆ/3> •HfYˆJ—] §9oTŻ“©‹«£ų¦-å)R¤a*⤪XIŸøiłBTOšś8Ģ]jcęl\["ńī¤%Ē’j!«ŲātäžŅ$ź+M—š”Ō”„3”ÉšŃÆG6Š‚R“ģĆ/S›w›c^ØÅ>ąK¬µ²Ä):Ęzi·ĶVē‚šX¤¬÷%Z#PU‹ŹŪ‡N”2ū`$W;N1fƒwŽ»®’FśŖų ³ Õ¦ąįFķŽłŗ13 GDęī’ Ī•øo÷A![Łš K öž•`@A„¬Ób°bXd<|öųÖµOŁŁ6ģé××ĒiҐć°r’Ģķz“|ž•«Qy™i£6ą +8H÷ęęSåIGc·0ĪėķĒH…ēł„j»oÜ ™ŌTt5Ę9ßļ)šr,āŹ_ęg¢Žķ;jč™ĀĒ„”ÄĪ»«JŹäÖ-g^U”4»ūĆ9%F³Ŗ‘s'_d'’ōwÆ)QNlɆ[ķ]+" š@²6/y®ƒjBŀ[Ü£n <÷]CÜĆśe+®”›ŽJ“Ąy”ķ˜™‚ż>›’¬Ü'Ć”&Å?U$E>Ļ/ö"}y7(š|ćĘż“=l÷a­l›ß^°B?hÕŃ9@ØßˆĆ¹#ßq5GVKc–‘öø[ŅZM²ė^ķ’g|60˜ ŠEśęĶ<ƒŻxƒÄŻaŚnљ BVŗJ\/€ōłĒö‡¶ēš@mV¤×ūŸRĀĘÖą_M‹æbŒEV–3¬Ja§;ž”OöcˆłćUæuĒM$Ž4„ļ|/>’į\Š)±ŹQ¼(Ån9²‰cSDŽléSźl+Ķ3Ü›ūT•Ri$ń]¼,żü‘n£Kv©°½ņωüĶ pēń»śŽ¼ęC%#Ż$!~ŽŁDĶe˜ “ž¢ÜŁ‹$ϟ;“Tū°Æŗ_e.ō”āēq[Ŗ×9œ¦ééĒņ…ĒøsųĶøq§‘?šˆ:Ÿié© £ŠĢĢĀÅmˆDik:'“hrC>H"6q „VĘē˜÷O7†‡]4ÓΉÅ!4ž»|4ļqīś®ŗÄb?I/¾+Dš’¾Ž# =£‰ĒƀF_įætåūlŠ=ćO·õ+l“K’–E•ö—Ø^_K69.›5IY W Iōg˜vUO›;źĄQŹR؇¼_”2Ģ]1tōŻä]¤ēuŲɰʨf Ņ…Ąp7Ӄø³ć‰®"Z[žņ—URļ ٲ¾Cv”p…„žļÜ|£Š,QÖv·Įś?Ņ·DųŅĒ®„‡Ż:'ŠņŪĮą .‘ņFÆĒˆ³źIss2C‚źŃä/æ"Ā@¶†–ĀŪK=jśS¶¤ŸÉ¶„ˆß÷³„X¦ƒł’՜uē|ĮĶ®żˆNŗ“[„ńĒzxļ)ˆ)ßQ}­ŲsK»Ė«ķ‹OVµŹeäĮŻ"lvŒü\ŗ€u0o“ńŌØD€`ĢĒ;¾m`}Ä{O,į¢ķUĀYĆó *¾H[ƒęž4$R7é³$8ų‰%x(ŽĪ!­¤JŹtZ ӖōćµŅ·‚ų™ƒ“©F‹?NBŗŃOŒxBtCÖ»³Ŗn®F£ŁtŪē6¬2hwˆuæØjŚ­Ļ؊D(— +ž”āū9ž¬ĮżĀ×Ė9~”HŪTÕ=[Ͼ‚ĶLvutŔ-".Ō]bö)U ėŠĆõPōE*מ’$Š‘¼,6Ø!ż«“¤»ž!uTŚ3īš1Ū@1µž³_pt•ØŻÄü”EČ›Æ|꣜ÆŌq]?÷\µĶŠ•fŻXZA—¬ĆßI 8{į› x6Ö%Dšū:G ˆ%9$É2ūž¹‡FĖXPϲ@3ÓĶĻZĀ,CŁm^§ćĀŪ\?›_ˆLĢ=“„· a–œ9ÉJ•>«Ū™łÉ±‹ę‹zšø•=¶@Ѧ—xQ†×”„Ā=Ų_i5A”³i…¹¤ßŃE51)ę īćuėńā…āŽ”‰O(ńrõ§źž|8-PĒ Ż:–Õz÷«‘YŸź:ŻĢ»Ÿ;Ÿ~_uŽå ß·ųŃNĶ!pņˆŹé6M›“ģĶ”?h_`.¢śæ|šŪŚ3ßZx +MÓAĖžfų#"?Œķ†ĻžZI M<b®Ī“ +!)XdķUFŲ’Pńʹ›¶|RV1ü”÷kHéō³š {żMßó|™%³_”YvS°¤>+Ś{s Ҿ=¤“¶$Ó~²’¹ćN ‘KŌ=lÄF7@¤ŗ7łÄŽłĒ¢u±ŸĀm/’„üˆ&hŸ1ŗŌē…{śĒ°^bQŲ8žŸœKŠ8Ī8…›`MGc[}ņ„Ź=@-sČ ¹0ŌVdĶ”ė ŚŖk $yļöĮ ³„ÕŌķ²Æ6Ļ,ƒ›—Ā+W=ėÜÅȬs†”Īž;<“Ī'žf<¢Ŗē ķŸ ä/³üՅƲĀ͛ٔŗfIūĄTwčJ#Üž(ū6__‘ŹfĀų…1ӕ uĻČ5ēō”(1› %fóß\ŲŖøcš»Ćē0²cŽJW ¬äkg<åŠųÉŸÖh!ų“B¶ŹŽg9ÉpŽaĢy`ĖČß ™ČÆŲÄŠ ó\Ī‹L¤'咽£csµ_ś÷wšŽ”bw>sęTü(O­ąÜ,ĘLóoE(0‡sŸ Ķʶ×N˜>ļČ}ų” M»6é¢$†! ļk³ŗXŪܧ܌Ø!€ˆ +öұ\Į +ń¹A‹B» Ėpeu—S:ĆĆ~E?čĮŁÅj Ē ćGÜĪ1ī]4 Ō„£xé6Å!’!S‡’a>ŚŖųø‰£5#VLp¹’č8cœ¢{·;ł“ķ[g»øPł;>œfTsņeœž£ĒŪś®×ŽŒ½ĖzģØČyµ¤c+t]ňXNż204nŚRiՅ¼ÉnqäĖLG2ĄåŁżŗ&”‰Æģø=ŸY”Ų*ŅŻ÷g²ŹkÕ$ųjŃ“%ŸF¢ +ņY%™»Z›”0d"Y,õ”hEuÓDc„mWd:āšĻ3š‘”iÄ:p·5q”±łńĮČ<9Nķ±=c^u«9½ŠŌ +)å«%ĘŁx­»ŌgžĀ 60¦Ć.×Dlō%ł3Üc=|ĘEef‰!_ōH2Ń(†h„6ł,Ś|Yż.å¾DóRźõoSŠˆ&_:ōU G‡#“¤P£Vk³)b±Ų+mņ¤Ūķ¹±²Ir{˜v Jņ›Ń$ Wc~@?‡Čfłčē®,· 8U‡q”ńeš~+zsėY7-$O6AlÅfŃ1AW.=§é÷åjŁīŠŌĀģDݟ6 _”z.ŸŃcMu ˜Ļa¹£ōŽ÷¾ĒÄaŗjöJˬÖ"B‚{’•jŽł°ł4.m|ģ|LżQ÷Y]*d"AŌRJ$ŃzŲŗYx†ˆü+d ü‹ ź™ćż™ļ“óšÓŸ}N(qźæ>žž~ųaTkœmž[į÷ÅųÆV9؟ÆM­<•aꠄSŠ_o$/ņQ‰“œ‡Źķ\̜Žū%¼b~žõŌ$#0‘¼DõTBÄ t8ę>†s*“źDČ0øü3Cˆģ® +bŠ’S÷SŚjņYh’źR?DĒirāŽœOģŪŹø³ūa™ZWO6ARßsó²äˆrVĮŁD{‹§8Ī•Ÿ Ī*Œ¦öŌ“x.¦±µ1C}F> q˜é:·,-œÜUÄĆŹ˜Ųv8 «*Aά-”žŸ-)vÖ3ØĮ1CöĖʍżČ¢õcśU4ā¤FlHŖņvg4u4Ѳ +oEāŖWåēį9ÆF@Fż.ĀNÉTÓ~“ŠåbɆĻŽ 014%RM7…I“Ć®¶žĆ&ĄdÖ¹q‚ +k“kĶ}d\y#Ķ +Ä}œ‘/_x{LKŌ!ū÷˜ ŲųyĶ“Ē F™“|?V6‚ėĘ«Sf2IŸĄ+Bå—”/ŚĀ–1š60{‡æŗpĄü9Ż‹±ST_JčBWöpŪŚōtxdż¬—\}w}Š+z%³\¾&óĪ76N.B%ōŪU=}h‰=—¬Tsć4:Žnš~ŚcēŗŠ]|<ŽĻgÉü’óKņŅÓézo ćŅK1z|µŖ#­ūn_g­ˆ³IŪPhØØ6>(‰ŠĘŹŻ fa6IüĆĘ|­N$“CW“*Åx‹ßšC•Äń¬{ ģ9Ē1Ź—ž‰ĪĪc”IūyØŖ¼Y‘gīa(T]ƧޤcՁ5˜ņZšļ˜Ē5+čņ+1|Ö2ĄņbŗV5.t] ˆj!€šb£ŒÅ\JØ!įāň +N7ŁĻ2Ew÷l5ķ•ńśc%f®DQ%ēd{…‡Ą7µgō0ŌČVāźĮ²[dv§ĖØ+–˜p–*eöŒ— rFf%@Vķj6榋^z¤b>‰,¶ē5Oü§]śēUMȤƒ½ø&ÜÄ,R/ņ©ēč%£›ƒń!‚Ø?~d&Ń©hÓ,Ed‚Rŗ óLN"˜ż;Óį®,ÅÆ°Ź$}¬® (§Ī ńØUDgüzżŚG’Ś•¦±-Šķ¦„:* ņDńŲWL„v³ķ'Lę?,aļ‹4e2|žŽ…1n€Ā:l4‰u-œnC„™­’]Į;i2 ™*ęTŹ6²õŁ<³OśĻŸ˜¹"ͽ%;ļTŚ.,dĮjkIX +ŠĢuwésŌģ1“;Ģh>j4 rś¢†8k•¼•zĄŻ$ńhŅŚöė;¶¾6fØ{ńÆU +¾®šZŌÄߜæŃļš“J>üų<Ņö‘ĀTÓGOćh(Gś¤`Ā;UŖ;ŃŃG~Ésūē¹[:͊¶ķ‰£Ō¼üOķķų’z8Ą6äV2ö3”£ĒÆ“TŒ¼ĻŽ‘šqʆ¾p~÷Ʀg‚ÄGNŗ¼ų/DĘxNĀ“ņ…ŠŸ*ur¹Ÿ}ŹÓżńWĮżõœ˜)ŖĆ"ÅLó¼Īżå­Įtļ §’āĢŻh “6©{+‚—ĮŸ42h)Ā[—cŪ֔ʁ’ż­œż”ĻźŲ– –RõļŠ3vŪ€BQgP—ŚĖ.®meYWĀzÜcćĒu_”X}č¶Ųź°gd«>^ŚöīäJ1)ęV Œw_ļ¾6a֙SŽÄiJŗ' 33u€—)*}‰;{Ļæ¬©YQ‡\~Ø÷ŪN'M4[įP…UŽ÷ly¹CŽmVNq+P;Ų\ŃȏĪG˜–ēHÜŹé{րÆZ% J»IJٶ¶čŚƒj°5 żBqß3m~ŽY€ü©§śo)ʝ¶©»²kÖĶVD} IZ. \ĄšJŽ`©ü$&£ū¾¢X¤*Ŗ,€>]lH^mōOA‡–[­Pˆ¹'uQX‘½ią@óĮŠ–`ĀHł©k`£w«Zås¶S`$aq;(ŒŲyŻ·'t£—TLŲ4;Éē›Ų V8Ź1֍ö8fŻ0}’87šĒī©O‰—l¢ėĖŁ'ąoÆ/5“ŒÄ3P¦"Ä&ļ€ļ.Jlgä4éBͲ9”t _n;*^dœ@'&¼Ąi˜µž6}n"„•ˌʪ‚Fžü%—"ÆNFł×›fœŹ9Xh™5x¹,M“"g]Kˆ-ūøb¾ć(ŠĆLażUŌ}Ė%@(ĘNż‹c½:āxĘŃųNĪŚ*NQw\;Ø“Ų’+:v–˜”&EÆT,ŻH`'żŸŽaßIεṢß1‡X§±S ~š^+-0…dpČõ9 ČI[śĆZR:µśGŌ.|Q:bž’č‘q œŪčĆĻONG¾LņĘW`÷Pą•[ÓĢŗœ$UĪ"„”‹ øŚ)¦éŠķāŻćZQ¤C•~/›•]±’SŪ€MN˜ąR¼ł­ŗMÖŲŚŽė“V¬‹›1'Öé#{ h‘fiߒ†ĮŲ8£ų&ļ¹'¬\e€ĮE"ˆ›°īµ6wī³³ŃÜ]W ‘X.AĻX N¢jé1*ó—D‚F£$QōĀ8’Ūm|‹/ĪPf¬`Ńss/[Ļv»”4's½óGØŻ3ōÄ W§EüD÷%øźŁĢai' ŃĮ¬- 9P“'<ŅĶ:NŖUīQŚŠ5ž¢ršßŌū„ž{•ø/†õyxHØa›ōéčIyźō qŽĖL’(c“›$no=eh*ōa2å ɱc  ńŲŁ-Ń­³Üß¶ļ°BzĀū˜ö’K„éN{…é%Ü«WK–e+ć[ć~ćĮJ>Y¤”½üū_ŚNļśU湞Nų+”?“„tTV‹A»4Ė6 Źj¦xó5¾h”RcŖ{^v>ŸŠ3»×Q+“,ś®R-_ +ЉŃß +k€3lķÖög6„O-¢I<$ż'EO`Œŗ~0ńDµ }š.Š3Ŗ¾[NhX³·ƒ÷ģiwlé„’ÄÆ}ķ×J¢b½(šŅCq±ZÜ%® Ł”są®DāŒ)d°n؞ܟ–‚»!™mk•Š)r]Ąūś–RÄ»šhs+ī4¶!‘‹,Õw>N+ēZ½Ół~øóGx7Ł2?XoC=Ķ«­Ā*™·^›Š”} +†¢ThL!ĀČÆW‹ŗm&ƒ—>eX×į ” %·+ŖN#–bĶS&@мīėy/µ™W™xŁm®ĢETŪŠ pęL/a?.ČŁ«ƒ7$ŚšśD -Ģ–g®ŻųśäNv&{>Qѧź +œ•“*.Ī{ÉėH" ė÷ūŠēõ£zŗYZ­<§ņÖAJ(7–®źŪFžœŒ6—J ć*‰Į)źzE*e2łf)l”Ė«¢ŹnpÄ(§Xƒw&½POSÄĆ׏¢µ¦5Öņ'FŁĀ-潂Ā*ó«ė%¼[…oTŹ>‘4­õNr'u§bfmĆbSÅąŠłųi…Z(]KÓ3Ž}Ż=X‹Ģ…”‰DńŸŗĆÄżU‚W‰£€ž2w OÉŲ\Š|nW÷óX +«MGāœ2ŻkćmPmQśńŠ'®ļ¬ŻwŹįˆŹŠ +¬Wķßµ’˜öć9OŁü%$wķļųŽŸ…‘nįø{ŚŅļ·ö<(8uĆ~ķ'ĆŗśUŌĶŃ]æWŗģ7]7nb ś×Ÿ»Z‚ŌIU©˜ŃŸż0ŻėS¶CPyF®ö wÕ4£,ńź‚y5m™•Ž]’Ķl‰ß(2všėŲ«ņ'CŠš³Õƒö²‡Kń§U@+“¶¶¤u6el/“@¾[tWV«Ž ¬Pō Nź×(ĆSń\@O@„`$ü‹Wq*:°ź½]³Źš—Ö'’”¹śåmĢ?²_»†%ɏŽČż€!4:ĄmŸņėŅ'Κ×ū¼šo¾œ÷°ŹJÅÉrŃ"aS\#³AO¾ō«žœ“)BJ źjӄL*ł“ųŌˆÅ;¶–™^©®žhF‡ßiH› G›Fi‘N ÆŗŃ p¶©wꖦŅ9°Ty9^iéøšCŻĖłö¶3 SĖ€sƒī½©ŪŻēx$äŹŅ®9P*Iµfžł3œģh/.qƒįoŽ9¤é-Ió>|Ķ•źåFqĪ'®HQM»‘2ÄRńī@C” tDfł¹KÖõžōy¼dā4Ł…&Ž8ęÄlXœBd„LVtēQ<`ņÕpbÄ×ņ@4ą…5Ø1’Œūö›mt&NFź źćģŪ4٤å*”ĻūꀭÓqMzš¦&źŒ`÷£Zčk^bĘ pó£wI]Äȳ€ĄM Ķo5ąDŌ–‘)ėjm›)EvĶ“*>Ž}“­óU ź=“÷%†gŁŻ'ŠįYķ3UW.橙C·Üö«„¾Š/¹ÅŲīļń"õč”ÄŹ+ŠÓŲÜC™ ²+÷‘(]!ö÷DćźŖ}W™IĄ.[U„ŃM«gzoŪ§ÆsĘ"æŅPśvښ$S>*æ,ōhøņÉx{ X_-JĮ&āłO¦čŪ·Ąōp`Ńi°ŁŃ¼GHx`|µ/ŸŃ5¾jq€ÓiÅ!'õ­õųłŲÉE?ŠVt  ŒŌ¼/9¹,-I뿈“`ėvŅؗ³ž®Ž³S–F„‡hĪńPu2M +„lH0ćǼ åõ.=…Mž\²ÅĻßŗ6 ?S$zÉNgŲā{•œć”śģåŖ±‡AUĖķJ•Ž9}‹ć4Ā<ŠģēL  ģ¦E»E®r{VXlŅ-·ņ·]Ž«™¾ŁU1Õ7įpÄŲäŠEÕ ĮIāOd£ŃZeņ–‘AÄĻ«œĖ É·.2’j’V‰;ķ¬;ņųtxĀm—Fx ø$„Gń3OŖOg=˜h K§evK2*(£MĖ9Į^CJVyį(ąIzÄS šśź Å—rĮHŪL8ń߅߂©õ&³)ö`€1‘M!j¤:}\0Šœ”ķŪŌ äJE-Y}»Ÿ±›cMē¾1cņ³*‡¼W+s×3Āwu}1Ī›j±^YĮžĢWĖXż:±Š~­Ź`dĶŽ8—ģK}Ć"œŲ—ū،ķ‚~ų‰żĄd"¦h‚— HĖFĖ”ńjHKmŃūĮć>ÉIƬV8h»:>qYåČä<’+Ä^ČųĀńB'}®Eœ²MĢ}6ŠFĶÉiX?"1 ē¬;ˆRó?˜kq^/᛿rDż“ć™ŃWEŸ“ÕĶ×kgĮÖĻ.>xĘWw1IyČŅYG–_ćg’–ŖoU#kIߟ{ijdmÅ6łMZ "³÷±±ū(žōĒ óHŬd‰~¬ę`h„½sµć{ĆhvėåÖČūwjĪśę*}+ųC®·O«­³ u†ż”™Y3›0ŽdŗO<÷`ˆN‹ƒYA⨕h:XÄØƒ7ėu‘6ó?’£Åžˆ„ģƒĆžnēĀS‹Ā×Ģže’ߎ-²lĒå-‡S\?vFW[XO+4‹Ī/–^rbø¢ƒüņnL6? ØaAdαC&P3ļņŚgĶϜEŪÜLesū}¶ę¬5mÄfűå8DĪ.‚³źŖĒ 'K»0~ūŪcźKp#8$­Ņź—fÄ*V}†eĖY‡¤®‰ÜĪŽ‚9NŁNĖ,ßSgmžݲˆā{é<źqF]GÕ Üo»Ŗ5ā-Jlšoėņ6£†ĖŸĘ+ČcL·Ø(ŪBm@Daé+¾š„qZ†öo„j<ąQXĘęG œÖ̤}¶Ćō¤õ6Ls]RŌ&%sóØŁŲUhą‡ü£»$±®e¤”©Ņßćiʐ NmoWdŗēödéķņR»Ķ”Ł!ŸßŲBd¾ā/P“–!ļ2;t‚łp/™—Öž¢„Slƒł-°ˆ, Qī%ų2/·u÷ƈ°3=įȃū²~sµēĀžCńā8ØłEö¢ēü(épa¦½ó“öVŖ9¾żGŲŽų&YO€ÉO&™ZzLKK3%<Cō3¤¶x'įI¶"ČQŖ»÷-ģ#ƒ lKU(ØČ_śĖn‡ ¹ƒžÕÓ+)bOF*I,n§Õ)Oķ£ŪēZ;Ā›­hr§©®^2ѓ]rĻŲ…µ<ÅęFs;JŁ‚¾ą#ŚÕ +hŗ«eq§ÆćÖ„K‚Éīźš°Rg©’ȘÜŠ +õ4ÖuH&éŹŪIņ“ćę;'4LgX³ķĢŗDŽū«/čź)ÉŻĻ2‡¼F²VźÅŠō;>P«z$pÓ¼ĢķŃ”¦­¶_L$‰~’x"\e`*pˆ‹\dõ9É*hVf­ŖČ%ÆK„R _’}yRbRź—øĪBŃ/§žŗĖ±ž— ž&W™ž)†õ³;1M1A”åŽÜWxqZœ|kYŪ"WĘ>)ZŠ©ķvHĮ-¼ +WžC# 2§7±äćĶkI¬ ĄŌš*\2øĆ;Ho.łźKĢÉW‰WĀåŽ2̵łŽūUQüXGĆ÷[ŸWzōÉJVOhnj“³½m)A&/ä"E +Žk“ØTYD=Jc8÷ŗęFHPśFóiU… ÓėŁY:ĮŌ&•øžq€œbCōźŚ }įNń1ŠĻ˜\ŽMø‚ˆųęt€»ĒĮ ÷`[÷ŅzŸ±Ģ%,ł;„Šs`6`¹:8 E1Źƒ¬Rõ­5†,Ä·#7l(1”9-ėeKūNƒćsŻMī§PP|› <Y +v;P†ÉYĒź•1†ĻްūÖ"’I‹cż‘¶G™Ų^γ9iŽņų§32?%;vóFó’2vOÅ™JŪę¬×]øks€į»1ŗ!čiɉļH(°•q·9™zåæQ£ŗ·G³«;Ńq×±žMVMđ„ź£ŗOäĮ}įž{mÅk8=OŽC÷/:#ō®¹.°µŽŚ@šŸBS9få CM\“rWg×Ņūõ 9e¤ŻĒƳ0, ń—/JCP09cF}Ž>±:§9!ē¹ĀߎEtą•Üž2jIF[ײd"‰L˜Yņ'@ßļH€ zļ__äļCˆitķ×>k·čEf…įł‡FxĖVtĀ0Ŗå©öÕ¶ć$Šø†ć)­Ū‘—/ӌx×jX©Ļßø|Ķݬšœ€"MƒZN ƒ^%h®Ė ©äO“ŹńQ“H›ę9RyŚ?Ķa6†}Š-ƒ:7ödcł‘ü}Œ—XEŽÆl•\OGeŒ4PĘū˜ām’»Ņl­Ś¼wŃ^6Š?iL/3įŠ ČŪ7—Õ;ɾŪĪM6ÄZĻ‚½ņ¾­åŹĀ„ŚTnNć 4ž#ØŚÉIŸ†fzŽł6‹„½ź…±]ū/MpĄ Emuce² ĀZB²×gšEßED‚TąWfeŖf+Ä-ĀeJ˜z¦Rž*J_`±Ż÷°8Ą¢µ/õ`M\„b‚ļ¶ĢAG82\W)ą#žÜ6퐈>ö€Œ—MŸAœØą]"1€Yš @<āS?Ś'aį ņQ£Eö_ø• 6«8žČĄ‚>ķuā±WŗĮ¤Ÿé ‹ūń2Ü/œż®·Ųm5Åšŗ+Ģ'C€čŸó7ćń9x‰ŒŽSϹČO6ī–ŚÅX՜;ÉŪGxž›†Čg +li4Vć¼{®VŪšžs¢$a=Z1—÷9韐~?@€|aķF_•æKŲ ®J²÷n|Uj’]’”kkb9Ą:Šh$9R½iŽÅ¢¤óO¾N×9Ä»BÉxqÆDqšžx¦{8öĄ9ŚHyń9€õ>vŪ 2©¹ź\³« |ŒvY5¼žÜų»Åw-éŸ(Ė K?ꇮ³o±sėüQF²dŲ9#— ˆłyEJ¢H†„"ĮP~Vøó®Ké ¹å”l¤=:ōĆŠŸ³dĘšYĢĆÄüfX.n­Ū†˜-*µPækcfœ*OŠšTWu7”Ķ„H’ ,ń7 endstream endobj -1343 0 obj << +1266 0 obj << /Type /FontDescriptor -/FontName /JBRKUP+NimbusRomNo9L-MediItal +/FontName /YXHWDV+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 @@ -7632,10 +7149,10 @@ endobj /ItalicAngle -15 /StemV 120 /XHeight 462 -/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/bracketleft/bracketright/c/comma/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/underscore/v/x) -/FontFile 1342 0 R +/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/c/comma/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/underscore/v/x) +/FontFile 1265 0 R >> endobj -1344 0 obj << +1267 0 obj << /Length1 1630 /Length2 19291 /Length3 0 @@ -7718,7 +7235,7 @@ EWkl ¢b™®Üqćæ~§%kł[d6Õż§ĆŚīne6¶óŗō0īLjD›ĪF3Ł)T²±>ēś·‰¢EÄw endstream endobj -1345 0 obj << +1268 0 obj << /Type /FontDescriptor /FontName /BFWHCH+NimbusRomNo9L-Regu /Flags 4 @@ -7730,9 +7247,9 @@ endobj /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/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1344 0 R +/FontFile 1267 0 R >> endobj -1346 0 obj << +1269 0 obj << /Length1 1647 /Length2 9103 /Length3 0 @@ -7792,7 +7309,7 @@ $ 3T†Ū—oZ%‘Ķx‡¾Ö@ŻJ–X6y$ Ń~ź–"— \±čÄŒŌZĻ>žŃūݵšcłīiéķĆp.Sź1iiJ}…'ĀšvĒĀä›ūó“GY1RĒŹ_įy±‡ršõ¬Ŗ–§tŠØkjÕM8³y:’bd1_dÅ£5ķ| ōVŲ·åöä±c:ų2Ó|,?še]Oø×³Ø•u6ūk‰9n¬˜ÆŖ1&#éĮ­Ģ¾øŽ„žź›Ņ’ĪČńµ endstream endobj -1347 0 obj << +1270 0 obj << /Type /FontDescriptor /FontName /NDZOVZ+NimbusRomNo9L-ReguItal /Flags 4 @@ -7804,369 +7321,318 @@ endobj /StemV 78 /XHeight 441 /CharSet (/A/C/E/G/O/S/a/b/c/d/e/f/g/h/i/l/m/n/o/p/period/q/r/s/t/u/y) -/FontFile 1346 0 R +/FontFile 1269 0 R >> endobj -1320 0 obj << +1243 0 obj << /Type /Encoding -/Differences [2/fi/fl 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater 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/backslash/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/bar/braceright 149/bullet/endash 228/adieresis] +/Differences [2/fi/fl 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater 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/bar/braceright 149/bullet/endash 228/adieresis] >> endobj -698 0 obj << +673 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AIRNDP+CMMI10 -/FontDescriptor 1331 0 R +/FontDescriptor 1254 0 R /FirstChar 58 /LastChar 84 -/Widths 1326 0 R +/Widths 1249 0 R >> endobj -707 0 obj << +682 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VYDKHY+CMR10 -/FontDescriptor 1333 0 R +/FontDescriptor 1256 0 R /FirstChar 48 /LastChar 61 -/Widths 1325 0 R +/Widths 1248 0 R >> endobj -778 0 obj << +726 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NBBWCW+CMSY10 -/FontDescriptor 1335 0 R +/FontDescriptor 1258 0 R /FirstChar 3 /LastChar 106 -/Widths 1324 0 R +/Widths 1247 0 R >> endobj -854 0 obj << +789 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LAJUWJ+CMSY7 -/FontDescriptor 1337 0 R +/FontDescriptor 1260 0 R /FirstChar 94 /LastChar 94 -/Widths 1323 0 R +/Widths 1246 0 R >> endobj -577 0 obj << +546 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /QUTYHC+NimbusMonL-Regu -/FontDescriptor 1339 0 R +/BaseFont /FIYGZI+NimbusMonL-Regu +/FontDescriptor 1262 0 R /FirstChar 33 /LastChar 125 -/Widths 1327 0 R -/Encoding 1320 0 R +/Widths 1250 0 R +/Encoding 1243 0 R >> endobj -424 0 obj << +400 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NGPWFR+NimbusRomNo9L-Medi -/FontDescriptor 1341 0 R +/FontDescriptor 1264 0 R /FirstChar 2 /LastChar 150 -/Widths 1329 0 R -/Encoding 1320 0 R +/Widths 1252 0 R +/Encoding 1243 0 R >> endobj -1045 0 obj << +984 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /JBRKUP+NimbusRomNo9L-MediItal -/FontDescriptor 1343 0 R +/BaseFont /YXHWDV+NimbusRomNo9L-MediItal +/FontDescriptor 1266 0 R /FirstChar 44 /LastChar 120 -/Widths 1321 0 R -/Encoding 1320 0 R +/Widths 1244 0 R +/Encoding 1243 0 R >> endobj -425 0 obj << +401 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BFWHCH+NimbusRomNo9L-Regu -/FontDescriptor 1345 0 R +/FontDescriptor 1268 0 R /FirstChar 2 /LastChar 228 -/Widths 1328 0 R -/Encoding 1320 0 R +/Widths 1251 0 R +/Encoding 1243 0 R >> endobj -980 0 obj << +964 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NDZOVZ+NimbusRomNo9L-ReguItal -/FontDescriptor 1347 0 R +/FontDescriptor 1270 0 R /FirstChar 46 /LastChar 121 -/Widths 1322 0 R -/Encoding 1320 0 R +/Widths 1245 0 R +/Encoding 1243 0 R >> endobj -426 0 obj << +402 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [418 0 R 429 0 R 460 0 R 498 0 R 537 0 R 546 0 R] +/Parent 1271 0 R +/Kids [394 0 R 405 0 R 436 0 R 475 0 R 513 0 R 516 0 R] >> endobj -555 0 obj << +525 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [549 0 R 557 0 R 570 0 R 597 0 R 609 0 R 617 0 R] +/Parent 1271 0 R +/Kids [519 0 R 527 0 R 539 0 R 565 0 R 577 0 R 585 0 R] >> endobj -643 0 obj << +611 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [637 0 R 658 0 R 671 0 R 677 0 R 683 0 R 688 0 R] +/Parent 1271 0 R +/Kids [605 0 R 628 0 R 644 0 R 650 0 R 656 0 R 662 0 R] >> endobj -700 0 obj << +675 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [693 0 R 703 0 R 713 0 R 721 0 R 725 0 R 729 0 R] +/Parent 1271 0 R +/Kids [668 0 R 678 0 R 694 0 R 701 0 R 707 0 R 711 0 R] >> endobj -746 0 obj << +731 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [743 0 R 751 0 R 759 0 R 763 0 R 774 0 R 791 0 R] +/Parent 1271 0 R +/Kids [722 0 R 744 0 R 755 0 R 783 0 R 801 0 R 810 0 R] >> endobj -816 0 obj << +832 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [806 0 R 835 0 R 851 0 R 862 0 R 874 0 R 909 0 R] +/Parent 1271 0 R +/Kids [827 0 R 885 0 R 961 0 R 980 0 R 991 0 R 997 0 R] >> endobj -981 0 obj << +1004 0 obj << /Type /Pages /Count 6 -/Parent 1349 0 R -/Kids [977 0 R 1038 0 R 1049 0 R 1059 0 R 1064 0 R 1071 0 R] +/Parent 1272 0 R +/Kids [1001 0 R 1009 0 R 1018 0 R 1027 0 R 1035 0 R 1039 0 R] >> endobj -1083 0 obj << +1107 0 obj << /Type /Pages -/Count 6 -/Parent 1349 0 R -/Kids [1080 0 R 1092 0 R 1098 0 R 1106 0 R 1180 0 R 1267 0 R] +/Count 3 +/Parent 1272 0 R +/Kids [1104 0 R 1192 0 R 1240 0 R] >> endobj -1319 0 obj << -/Type /Pages -/Count 1 -/Parent 1349 0 R -/Kids [1316 0 R] ->> endobj -1348 0 obj << +1271 0 obj << /Type /Pages /Count 36 -/Parent 1350 0 R -/Kids [426 0 R 555 0 R 643 0 R 700 0 R 746 0 R 816 0 R] +/Parent 1273 0 R +/Kids [402 0 R 525 0 R 611 0 R 675 0 R 731 0 R 832 0 R] >> endobj -1349 0 obj << +1272 0 obj << /Type /Pages -/Count 13 -/Parent 1350 0 R -/Kids [981 0 R 1083 0 R 1319 0 R] +/Count 9 +/Parent 1273 0 R +/Kids [1004 0 R 1107 0 R] >> endobj -1350 0 obj << +1273 0 obj << /Type /Pages -/Count 49 -/Kids [1348 0 R 1349 0 R] +/Count 45 +/Kids [1271 0 R 1272 0 R] >> endobj -1351 0 obj << +1274 0 obj << /Type /Outlines /First 3 0 R -/Last 327 0 R -/Count 8 ->> endobj -415 0 obj << -/Title 416 0 R -/A 413 0 R -/Parent 411 0 R ->> endobj -411 0 obj << -/Title 412 0 R -/A 409 0 R -/Parent 403 0 R -/Prev 407 0 R -/First 415 0 R -/Last 415 0 R -/Count -1 ->> endobj -407 0 obj << -/Title 408 0 R -/A 405 0 R -/Parent 403 0 R -/Next 411 0 R ->> endobj -403 0 obj << -/Title 404 0 R -/A 401 0 R -/Parent 327 0 R -/Prev 331 0 R -/First 407 0 R -/Last 411 0 R -/Count -2 ->> endobj -399 0 obj << -/Title 400 0 R -/A 397 0 R -/Parent 371 0 R -/Prev 395 0 R ->> endobj -395 0 obj << -/Title 396 0 R -/A 393 0 R -/Parent 371 0 R -/Prev 391 0 R -/Next 399 0 R +/Last 319 0 R +/Count 7 >> endobj 391 0 obj << /Title 392 0 R /A 389 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 387 0 R -/Next 395 0 R >> endobj 387 0 obj << /Title 388 0 R /A 385 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 383 0 R /Next 391 0 R >> endobj 383 0 obj << /Title 384 0 R /A 381 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 379 0 R /Next 387 0 R >> endobj 379 0 obj << /Title 380 0 R /A 377 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 375 0 R /Next 383 0 R >> endobj 375 0 obj << /Title 376 0 R /A 373 0 R -/Parent 371 0 R +/Parent 363 0 R +/Prev 371 0 R /Next 379 0 R >> endobj 371 0 obj << /Title 372 0 R /A 369 0 R -/Parent 331 0 R -/Prev 347 0 R -/First 375 0 R -/Last 399 0 R -/Count -7 +/Parent 363 0 R +/Prev 367 0 R +/Next 375 0 R >> endobj 367 0 obj << /Title 368 0 R /A 365 0 R -/Parent 347 0 R -/Prev 363 0 R +/Parent 363 0 R +/Next 371 0 R >> endobj 363 0 obj << /Title 364 0 R /A 361 0 R -/Parent 347 0 R -/Prev 359 0 R -/Next 367 0 R +/Parent 323 0 R +/Prev 339 0 R +/First 367 0 R +/Last 391 0 R +/Count -7 >> endobj 359 0 obj << /Title 360 0 R /A 357 0 R -/Parent 347 0 R +/Parent 339 0 R /Prev 355 0 R -/Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 353 0 R -/Parent 347 0 R +/Parent 339 0 R /Prev 351 0 R /Next 359 0 R >> endobj 351 0 obj << /Title 352 0 R /A 349 0 R -/Parent 347 0 R +/Parent 339 0 R +/Prev 347 0 R /Next 355 0 R >> endobj 347 0 obj << /Title 348 0 R /A 345 0 R -/Parent 331 0 R -/Prev 339 0 R -/Next 371 0 R -/First 351 0 R -/Last 367 0 R -/Count -5 +/Parent 339 0 R +/Prev 343 0 R +/Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R /Parent 339 0 R +/Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R -/Parent 331 0 R -/Prev 335 0 R -/Next 347 0 R +/Parent 323 0 R +/Prev 331 0 R +/Next 363 0 R /First 343 0 R -/Last 343 0 R -/Count -1 +/Last 359 0 R +/Count -5 >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R /Parent 331 0 R -/Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R -/Parent 327 0 R -/Next 403 0 R +/Parent 323 0 R +/Prev 327 0 R +/Next 339 0 R /First 335 0 R -/Last 371 0 R -/Count -4 +/Last 335 0 R +/Count -1 >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R -/Parent 1351 0 R -/Prev 147 0 R -/First 331 0 R -/Last 403 0 R -/Count -2 +/Parent 323 0 R +/Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R -/Parent 311 0 R -/Prev 319 0 R +/Parent 319 0 R +/First 327 0 R +/Last 363 0 R +/Count -4 >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R -/Parent 311 0 R -/Prev 315 0 R -/Next 323 0 R +/Parent 1274 0 R +/Prev 139 0 R +/First 323 0 R +/Last 323 0 R +/Count -1 >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R -/Parent 311 0 R -/Next 319 0 R +/Parent 303 0 R +/Prev 311 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R /Parent 303 0 R /Prev 307 0 R -/First 315 0 R -/Last 323 0 R -/Count -3 +/Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R @@ -8177,85 +7643,87 @@ endobj 303 0 obj << /Title 304 0 R /A 301 0 R -/Parent 147 0 R -/Prev 247 0 R +/Parent 295 0 R +/Prev 299 0 R /First 307 0 R -/Last 311 0 R -/Count -2 +/Last 315 0 R +/Count -3 >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R -/Parent 255 0 R -/Prev 295 0 R +/Parent 295 0 R +/Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R -/Parent 255 0 R -/Prev 291 0 R -/Next 299 0 R +/Parent 139 0 R +/Prev 239 0 R +/First 299 0 R +/Last 303 0 R +/Count -2 >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 287 0 R -/Next 295 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 283 0 R /Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R -/Parent 255 0 R +/Parent 247 0 R +/Prev 255 0 R /Next 263 0 R >> endobj 255 0 obj << @@ -8263,9 +7731,7 @@ endobj /A 253 0 R /Parent 247 0 R /Prev 251 0 R -/First 259 0 R -/Last 299 0 R -/Count -11 +/Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R @@ -8276,65 +7742,67 @@ endobj 247 0 obj << /Title 248 0 R /A 245 0 R -/Parent 147 0 R -/Prev 203 0 R -/Next 303 0 R +/Parent 239 0 R +/Prev 243 0 R /First 251 0 R -/Last 255 0 R -/Count -2 +/Last 291 0 R +/Count -11 >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R -/Parent 211 0 R -/Prev 239 0 R +/Parent 239 0 R +/Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R -/Parent 211 0 R -/Prev 235 0 R -/Next 243 0 R +/Parent 139 0 R +/Prev 195 0 R +/Next 295 0 R +/First 243 0 R +/Last 247 0 R +/Count -2 >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 231 0 R -/Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 223 0 R /Next 231 0 R >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 219 0 R /Next 227 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 215 0 R /Next 223 0 R >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R -/Parent 211 0 R +/Parent 203 0 R +/Prev 211 0 R /Next 219 0 R >> endobj 211 0 obj << @@ -8342,9 +7810,7 @@ endobj /A 209 0 R /Parent 203 0 R /Prev 207 0 R -/First 215 0 R -/Last 243 0 R -/Count -8 +/Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R @@ -8355,33 +7821,33 @@ endobj 203 0 obj << /Title 204 0 R /A 201 0 R -/Parent 147 0 R -/Prev 183 0 R -/Next 247 0 R +/Parent 195 0 R +/Prev 199 0 R /First 207 0 R -/Last 211 0 R -/Count -2 +/Last 235 0 R +/Count -8 >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R -/Parent 191 0 R -/Prev 195 0 R +/Parent 195 0 R +/Next 203 0 R >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R -/Parent 191 0 R -/Next 199 0 R +/Parent 139 0 R +/Prev 175 0 R +/Next 239 0 R +/First 199 0 R +/Last 203 0 R +/Count -2 >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 183 0 R /Prev 187 0 R -/First 195 0 R -/Last 199 0 R -/Count -2 >> endobj 187 0 obj << /Title 188 0 R @@ -8392,9 +7858,8 @@ endobj 183 0 obj << /Title 184 0 R /A 181 0 R -/Parent 147 0 R -/Prev 151 0 R -/Next 203 0 R +/Parent 175 0 R +/Prev 179 0 R /First 187 0 R /Last 191 0 R /Count -2 @@ -8402,34 +7867,37 @@ endobj 179 0 obj << /Title 180 0 R /A 177 0 R -/Parent 159 0 R -/Prev 175 0 R +/Parent 175 0 R +/Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R -/Parent 159 0 R -/Prev 171 0 R -/Next 179 0 R +/Parent 139 0 R +/Prev 143 0 R +/Next 195 0 R +/First 179 0 R +/Last 183 0 R +/Count -2 >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R -/Parent 159 0 R +/Parent 151 0 R /Prev 167 0 R -/Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R -/Parent 159 0 R +/Parent 151 0 R /Prev 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R -/Parent 159 0 R +/Parent 151 0 R +/Prev 159 0 R /Next 167 0 R >> endobj 159 0 obj << @@ -8437,9 +7905,7 @@ endobj /A 157 0 R /Parent 151 0 R /Prev 155 0 R -/First 163 0 R -/Last 179 0 R -/Count -5 +/Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R @@ -8450,36 +7916,36 @@ endobj 151 0 obj << /Title 152 0 R /A 149 0 R -/Parent 147 0 R -/Next 183 0 R +/Parent 143 0 R +/Prev 147 0 R /First 155 0 R -/Last 159 0 R -/Count -2 +/Last 171 0 R +/Count -5 >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R -/Parent 1351 0 R -/Prev 139 0 R -/Next 327 0 R -/First 151 0 R -/Last 303 0 R -/Count -5 +/Parent 143 0 R +/Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 139 0 R +/Next 175 0 R +/First 147 0 R +/Last 151 0 R +/Count -2 >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R -/Parent 1351 0 R +/Parent 1274 0 R /Prev 131 0 R -/Next 147 0 R +/Next 319 0 R /First 143 0 R -/Last 143 0 R -/Count -1 +/Last 295 0 R +/Count -5 >> endobj 135 0 obj << /Title 136 0 R @@ -8489,8 +7955,8 @@ endobj 131 0 obj << /Title 132 0 R /A 129 0 R -/Parent 1351 0 R -/Prev 115 0 R +/Parent 1274 0 R +/Prev 123 0 R /Next 139 0 R /First 135 0 R /Last 135 0 R @@ -8499,110 +7965,109 @@ endobj 127 0 obj << /Title 128 0 R /A 125 0 R -/Parent 119 0 R -/Prev 123 0 R +/Parent 123 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R -/Parent 119 0 R -/Next 127 0 R +/Parent 1274 0 R +/Prev 103 0 R +/Next 131 0 R +/First 127 0 R +/Last 127 0 R +/Count -1 >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R -/Parent 115 0 R -/First 123 0 R -/Last 127 0 R -/Count -2 +/Parent 103 0 R +/Prev 111 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R -/Parent 1351 0 R -/Prev 95 0 R -/Next 131 0 R -/First 119 0 R -/Last 119 0 R -/Count -1 +/Parent 111 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R -/Parent 95 0 R -/Prev 103 0 R +/Parent 103 0 R +/Prev 107 0 R +/Next 119 0 R +/First 115 0 R +/Last 115 0 R +/Count -1 >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 103 0 R +/Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R -/Parent 95 0 R -/Prev 99 0 R -/Next 111 0 R +/Parent 1274 0 R +/Prev 15 0 R +/Next 123 0 R /First 107 0 R -/Last 107 0 R -/Count -1 +/Last 119 0 R +/Count -3 >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R -/Parent 95 0 R -/Next 103 0 R +/Parent 87 0 R +/Prev 95 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R -/Parent 1351 0 R -/Prev 15 0 R -/Next 115 0 R -/First 99 0 R -/Last 111 0 R -/Count -3 +/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 83 0 R -/Prev 87 0 R +/Parent 87 0 R +/Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R -/Parent 83 0 R -/Next 91 0 R +/Parent 15 0 R +/Prev 83 0 R +/First 91 0 R +/Last 99 0 R +/Count -3 >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 15 0 R /Prev 79 0 R -/First 87 0 R -/Last 91 0 R -/Count -2 +/Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 15 0 R -/Prev 75 0 R +/Prev 59 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R -/Parent 15 0 R -/Prev 59 0 R -/Next 79 0 R +/Parent 59 0 R +/Prev 71 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 59 0 R /Prev 67 0 R +/Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R @@ -8622,10 +8087,10 @@ endobj /A 57 0 R /Parent 15 0 R /Prev 55 0 R -/Next 75 0 R +/Next 79 0 R /First 63 0 R -/Last 71 0 R -/Count -3 +/Last 75 0 R +/Count -4 >> endobj 55 0 obj << /Title 56 0 R @@ -8700,11 +8165,11 @@ endobj 15 0 obj << /Title 16 0 R /A 13 0 R -/Parent 1351 0 R +/Parent 1274 0 R /Prev 3 0 R -/Next 95 0 R +/Next 103 0 R /First 19 0 R -/Last 83 0 R +/Last 87 0 R /Count -12 >> endobj 11 0 obj << @@ -8722,1702 +8187,1605 @@ endobj 3 0 obj << /Title 4 0 R /A 1 0 R -/Parent 1351 0 R +/Parent 1274 0 R /Next 15 0 R /First 7 0 R /Last 11 0 R /Count -2 >> endobj -1352 0 obj << -/Names [(CommandLineUsage) 701 0 R (CommandLineUsage_ARGS) 716 0 R (CommandLineUsage_MANARGS) 717 0 R (CommandLineUsage_OPTARGS) 718 0 R (Doc-Start) 423 0 R (ENCODERBEHAVIOUR) 696 0 R] -/Limits [(CommandLineUsage) (ENCODERBEHAVIOUR)] +1275 0 obj << +/Names [(Doc-Start) 399 0 R (ENCODERBEHAVIOUR) 671 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) 672 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_ESTIM_AVG_FRAMESIZES) 681 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_TOOLS) 638 0 R (ENCODERBEHAVIOUR_FRAMESIZES_AND_BIT_RESERVOIR) 674 0 R] +/Limits [(Doc-Start) (ENCODERBEHAVIOUR_FRAMESIZES_AND_BIT_RESERVOIR)] >> endobj -1353 0 obj << -/Names [(ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) 697 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_ESTIM_AVG_FRAMESIZES) 706 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_TOOLS) 667 0 R (ENCODERBEHAVIOUR_FRAMESIZES_AND_BIT_RESERVOIR) 699 0 R (Item.1) 576 0 R (Item.2) 578 0 R] -/Limits [(ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) (Item.2)] +1276 0 obj << +/Names [(Item.1) 545 0 R (Item.2) 547 0 R (Item.3) 548 0 R (Item.4) 549 0 R (Item.5) 568 0 R (Item.6) 569 0 R] +/Limits [(Item.1) (Item.6)] >> endobj -1354 0 obj << -/Names [(Item.3) 579 0 R (Item.4) 580 0 R (Item.5) 600 0 R (Item.6) 601 0 R (LIBUSE) 573 0 R (LIBUSE_CallingSequence) 575 0 R] -/Limits [(Item.3) (LIBUSE_CallingSequence)] +1277 0 obj << +/Names [(LIBUSE) 542 0 R (LIBUSE_CallingSequence) 544 0 R (LIBUSE_InterfaceDescription) 543 0 R (LIBUSE_allocIOBufs) 580 0 R (LIBUSE_argLists) 588 0 R (LIBUSE_audiochCfg) 647 0 R] +/Limits [(LIBUSE) (LIBUSE_audiochCfg)] >> endobj -1355 0 obj << -/Names [(LIBUSE_InterfaceDescription) 574 0 R (LIBUSE_allocIOBufs) 612 0 R (LIBUSE_argLists) 620 0 R (LIBUSE_audiochCfg) 664 0 R (LIBUSE_bufDes) 603 0 R (LIBUSE_cfgMetaData) 640 0 R] -/Limits [(LIBUSE_InterfaceDescription) (LIBUSE_cfgMetaData)] +1278 0 obj << +/Names [(LIBUSE_bufDes) 571 0 R (LIBUSE_cfgMetaData) 608 0 R (LIBUSE_channelMode) 631 0 R (LIBUSE_encELD) 634 0 R (LIBUSE_encMandatory) 610 0 R (LIBUSE_encOpen) 552 0 R] +/Limits [(LIBUSE_bufDes) (LIBUSE_encOpen)] >> endobj -1356 0 obj << -/Names [(LIBUSE_channelMode) 661 0 R (LIBUSE_encMandatory) 642 0 R (LIBUSE_encOpen) 584 0 R (LIBUSE_encParams) 586 0 R (LIBUSE_encQual) 663 0 R (LIBUSE_encReconf) 588 0 R] -/Limits [(LIBUSE_channelMode) (LIBUSE_encReconf)] +1279 0 obj << +/Names [(LIBUSE_encParams) 554 0 R (LIBUSE_encQual) 633 0 R (LIBUSE_encReconf) 556 0 R (LIBUSE_feedInBuf) 570 0 R (LIBUSE_reommendedConfig) 654 0 R (LIBUSE_reommendedConfigELD) 665 0 R] +/Limits [(LIBUSE_encParams) (LIBUSE_reommendedConfigELD)] >> endobj -1357 0 obj << -/Names [(LIBUSE_feedInBuf) 602 0 R (LIBUSE_reommendedConfig) 680 0 R (LIBUSE_reommendedConfigLC) 681 0 R (LIBUSE_reommendedConfigLD) 686 0 R (LIBUSE_suppBitrates) 674 0 R (LIBUSE_writeOutData) 604 0 R] -/Limits [(LIBUSE_feedInBuf) (LIBUSE_writeOutData)] +1280 0 obj << +/Names [(LIBUSE_reommendedConfigLC) 659 0 R (LIBUSE_reommendedConfigLD) 660 0 R (LIBUSE_suppBitrates) 653 0 R (LIBUSE_writeOutData) 572 0 R (aacenc__lib_8h) 550 0 R (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) 551 0 R] +/Limits [(LIBUSE_reommendedConfigLC) (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea)] >> endobj -1358 0 obj << -/Names [(aacenc__lib_8h) 581 0 R (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) 583 0 R (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) 923 0 R (aacenc__lib_8h_a28cbc417258c73ad55d613526df8fad5) 1046 0 R (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) 605 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) 992 0 R] -/Limits [(aacenc__lib_8h) (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846)] +1281 0 obj << +/Names [(aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) 841 0 R (aacenc__lib_8h_a28cbc417258c73ad55d613526df8fad5) 976 0 R (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) 573 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) 912 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) 918 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf) 916 0 R] +/Limits [(aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf)] >> endobj -1359 0 obj << -/Names [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) 998 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf) 996 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) 994 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846ab97edc65b5ed3be8c11f3ba9bcca22f3) 993 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846abcbfac74b1bcd90099e3cf6b1fcd19f3) 997 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33) 995 0 R] -/Limits [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33)] +1282 0 obj << +/Names [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) 914 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846ab97edc65b5ed3be8c11f3ba9bcca22f3) 913 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846abcbfac74b1bcd90099e3cf6b1fcd19f3) 917 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33) 915 0 R (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) 553 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) 733 0 R] +/Limits [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47)] >> endobj -1360 0 obj << -/Names [(aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) 585 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) 784 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) 646 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a51cb08659a6af422761d58090766faa8) 985 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a6a362853fb508e259718dabe65c7a57e) 984 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181) 983 0 R] -/Limits [(aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181)] +1283 0 obj << +/Names [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) 614 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a51cb08659a6af422761d58090766faa8) 905 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a6a362853fb508e259718dabe65c7a57e) 904 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181) 903 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) 902 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) 889 0 R] +/Limits [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e)] >> endobj -1361 0 obj << -/Names [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) 982 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) 924 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) 926 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea189c4a7532530a89ab214aba35b1e982) 930 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea1a79b7f1cefc5f89ba7c10cfa020116f) 928 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3) 936 0 R] -/Limits [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3)] +1284 0 obj << +/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) 891 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea189c4a7532530a89ab214aba35b1e982) 895 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea1a79b7f1cefc5f89ba7c10cfa020116f) 893 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3) 901 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) 894 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2) 898 0 R] +/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2)] >> endobj -1362 0 obj << -/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) 929 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2) 933 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) 935 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5af1b153eb8f1a28a543419d10562cbf) 931 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea8e8c0fd770036a2bc58fc062f5044454) 934 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281) 925 0 R] -/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281)] +1285 0 obj << +/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) 900 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5af1b153eb8f1a28a543419d10562cbf) 896 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea8e8c0fd770036a2bc58fc062f5044454) 899 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281) 890 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) 897 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347) 892 0 R] +/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347)] >> endobj -1363 0 obj << -/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) 932 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347) 927 0 R (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) 587 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) 651 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a017e2a6349d3ae944338a6f0ba892947) 1006 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) 665 0 R] -/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5)] +1286 0 obj << +/Names [(aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) 555 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) 619 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a017e2a6349d3ae944338a6f0ba892947) 969 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) 636 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) 612 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243) 922 0 R] +/Limits [(aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243)] >> endobj -1364 0 obj << -/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) 644 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243) 1003 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) 1009 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3923cb84146e101030271772fe33ea5a) 1010 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a39b30031d8438b4018173388aead5bdf) 1007 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) 668 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b)] +1287 0 obj << +/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) 972 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3923cb84146e101030271772fe33ea5a) 973 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a39b30031d8438b4018173388aead5bdf) 970 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) 639 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) 919 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) 640 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d)] >> endobj -1365 0 obj << -/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) 999 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) 1002 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) 1000 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a87c7912a645d479132465e6d8e694b36) 1008 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a8a8be3fdebec2693c86e3e63f35ee228) 1001 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c) 1005 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c)] +1288 0 obj << +/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) 920 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a87c7912a645d479132465e6d8e694b36) 971 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a8a8be3fdebec2693c86e3e63f35ee228) 921 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c) 968 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) 676 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1) 975 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1)] >> endobj -1366 0 obj << -/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) 1004 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1) 1012 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) 675 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) 1011 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) 666 0 R (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) 589 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94)] +1289 0 obj << +/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) 641 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) 648 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) 974 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) 637 0 R (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) 557 0 R (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) 618 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c)] >> endobj -1367 0 obj << -/Names [(aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) 650 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) 647 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a7560bc907e827954b0b55f87751fdbeb) 986 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a95efe9f7b6df0a6628ec7e2c61646fe9) 988 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa0dc03a5dc38b25ac1ea9d8ddf892fb5) 991 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7) 990 0 R] -/Limits [(aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7)] +1290 0 obj << +/Names [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) 615 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a7560bc907e827954b0b55f87751fdbeb) 906 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a95efe9f7b6df0a6628ec7e2c61646fe9) 908 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa0dc03a5dc38b25ac1ea9d8ddf892fb5) 911 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7) 910 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) 909 0 R] +/Limits [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2)] >> endobj -1368 0 obj << -/Names [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) 989 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) 987 0 R (chapter*.1) 462 0 R (chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 94 0 R] -/Limits [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) (chapter.3)] +1291 0 obj << +/Names [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) 907 0 R (chapter*.1) 438 0 R (chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 102 0 R (chapter.4) 122 0 R] +/Limits [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) (chapter.4)] >> endobj -1369 0 obj << -/Names [(chapter.4) 114 0 R (chapter.5) 130 0 R (chapter.6) 138 0 R (chapter.7) 146 0 R (chapter.8) 326 0 R (index) 552 0 R] -/Limits [(chapter.4) (index)] +1292 0 obj << +/Names [(chapter.5) 130 0 R (chapter.6) 138 0 R (chapter.7) 318 0 R (index) 522 0 R (index_Scope) 523 0 R (index_encBasics) 524 0 R] +/Limits [(chapter.5) (index_encBasics)] >> endobj -1370 0 obj << -/Names [(index_Scope) 553 0 R (index_encBasics) 554 0 R (main_8cpp) 582 0 R (main_8cpp_adacbe0175a79dff748855d8c9839f82b) 719 0 R (page.1) 551 0 R (page.10) 679 0 R] -/Limits [(index_Scope) (page.10)] +1293 0 obj << +/Names [(page.1) 521 0 R (page.10) 652 0 R (page.11) 658 0 R (page.12) 664 0 R (page.13) 670 0 R (page.14) 680 0 R] +/Limits [(page.1) (page.14)] >> endobj -1371 0 obj << -/Names [(page.11) 685 0 R (page.12) 690 0 R (page.13) 695 0 R (page.14) 705 0 R (page.15) 715 0 R (page.16) 723 0 R] -/Limits [(page.11) (page.16)] +1294 0 obj << +/Names [(page.15) 696 0 R (page.16) 703 0 R (page.17) 709 0 R (page.18) 713 0 R (page.19) 724 0 R (page.2) 529 0 R] +/Limits [(page.15) (page.2)] >> endobj -1372 0 obj << -/Names [(page.17) 727 0 R (page.18) 731 0 R (page.19) 745 0 R (page.2) 559 0 R (page.20) 753 0 R (page.21) 761 0 R] -/Limits [(page.17) (page.21)] +1295 0 obj << +/Names [(page.20) 746 0 R (page.21) 757 0 R (page.22) 785 0 R (page.23) 803 0 R (page.24) 812 0 R (page.25) 829 0 R] +/Limits [(page.20) (page.25)] >> endobj -1373 0 obj << -/Names [(page.22) 765 0 R (page.23) 776 0 R (page.24) 793 0 R (page.25) 808 0 R (page.26) 837 0 R (page.27) 853 0 R] -/Limits [(page.22) (page.27)] +1296 0 obj << +/Names [(page.26) 887 0 R (page.27) 963 0 R (page.28) 982 0 R (page.29) 993 0 R (page.3) 541 0 R (page.30) 999 0 R] +/Limits [(page.26) (page.30)] >> endobj -1374 0 obj << -/Names [(page.28) 864 0 R (page.29) 876 0 R (page.3) 572 0 R (page.30) 911 0 R (page.31) 979 0 R (page.32) 1040 0 R] -/Limits [(page.28) (page.32)] +1297 0 obj << +/Names [(page.31) 1003 0 R (page.32) 1011 0 R (page.33) 1020 0 R (page.34) 1029 0 R (page.35) 1037 0 R (page.36) 1041 0 R] +/Limits [(page.31) (page.36)] >> endobj -1375 0 obj << -/Names [(page.33) 1051 0 R (page.34) 1061 0 R (page.35) 1066 0 R (page.36) 1073 0 R (page.37) 1082 0 R (page.38) 1094 0 R] -/Limits [(page.33) (page.38)] +1298 0 obj << +/Names [(page.37) 1106 0 R (page.38) 1194 0 R (page.39) 1242 0 R (page.4) 567 0 R (page.5) 579 0 R (page.6) 587 0 R] +/Limits [(page.37) (page.6)] >> endobj -1376 0 obj << -/Names [(page.39) 1100 0 R (page.4) 599 0 R (page.40) 1108 0 R (page.41) 1182 0 R (page.42) 1269 0 R (page.43) 1318 0 R] -/Limits [(page.39) (page.43)] +1299 0 obj << +/Names [(page.7) 607 0 R (page.8) 630 0 R (page.9) 646 0 R (section*.10) 965 0 R (section*.2) 725 0 R (section*.3) 747 0 R] +/Limits [(page.7) (section*.3)] >> endobj -1377 0 obj << -/Names [(page.5) 611 0 R (page.6) 619 0 R (page.7) 639 0 R (page.8) 660 0 R (page.9) 673 0 R (section*.10) 1041 0 R] -/Limits [(page.5) (section*.10)] +1300 0 obj << +/Names [(section*.4) 758 0 R (section*.5) 786 0 R (section*.6) 813 0 R (section*.7) 830 0 R (section*.8) 831 0 R (section*.9) 888 0 R] +/Limits [(section*.4) (section*.9)] >> endobj -1378 0 obj << -/Names [(section*.11) 1109 0 R (section*.2) 777 0 R (section*.3) 794 0 R (section*.4) 809 0 R (section*.5) 838 0 R (section*.6) 865 0 R] -/Limits [(section*.11) (section*.6)] +1301 0 obj << +/Names [(section.1.1) 6 0 R (section.1.2) 10 0 R (section.2.1) 18 0 R (section.2.10) 78 0 R (section.2.11) 82 0 R (section.2.12) 86 0 R] +/Limits [(section.1.1) (section.2.12)] >> endobj -1379 0 obj << -/Names [(section*.7) 912 0 R (section*.8) 913 0 R (section*.9) 914 0 R (section.1.1) 6 0 R (section.1.2) 10 0 R (section.2.1) 18 0 R] -/Limits [(section*.7) (section.2.1)] +1302 0 obj << +/Names [(section.2.2) 22 0 R (section.2.3) 26 0 R (section.2.4) 30 0 R (section.2.5) 42 0 R (section.2.6) 46 0 R (section.2.7) 50 0 R] +/Limits [(section.2.2) (section.2.7)] >> endobj -1380 0 obj << -/Names [(section.2.10) 74 0 R (section.2.11) 78 0 R (section.2.12) 82 0 R (section.2.2) 22 0 R (section.2.3) 26 0 R (section.2.4) 30 0 R] -/Limits [(section.2.10) (section.2.4)] +1303 0 obj << +/Names [(section.2.8) 54 0 R (section.2.9) 58 0 R (section.3.1) 106 0 R (section.3.2) 110 0 R (section.3.3) 118 0 R (section.4.1) 126 0 R] +/Limits [(section.2.8) (section.4.1)] >> endobj -1381 0 obj << -/Names [(section.2.5) 42 0 R (section.2.6) 46 0 R (section.2.7) 50 0 R (section.2.8) 54 0 R (section.2.9) 58 0 R (section.3.1) 98 0 R] -/Limits [(section.2.5) (section.3.1)] +1304 0 obj << +/Names [(section.5.1) 134 0 R (section.6.1) 142 0 R (section.6.2) 174 0 R (section.6.3) 194 0 R (section.6.4) 238 0 R (section.6.5) 294 0 R] +/Limits [(section.5.1) (section.6.5)] >> endobj -1382 0 obj << -/Names [(section.3.2) 102 0 R (section.3.3) 110 0 R (section.4.1) 118 0 R (section.5.1) 134 0 R (section.6.1) 142 0 R (section.7.1) 150 0 R] -/Limits [(section.3.2) (section.7.1)] +1305 0 obj << +/Names [(section.7.1) 322 0 R (structAACENC__BufDesc) 581 0 R (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) 728 0 R (structAACENC__BufDesc_a324387bb8e5f44650c6e17c209bb05a9) 732 0 R (structAACENC__BufDesc_ab13b6a5c10505c3defd8bb1c19eac81d) 729 0 R (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1) 727 0 R] +/Limits [(section.7.1) (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1)] >> endobj -1383 0 obj << -/Names [(section.7.2) 182 0 R (section.7.3) 202 0 R (section.7.4) 246 0 R (section.7.5) 302 0 R (section.8.1) 330 0 R (section.8.2) 402 0 R] -/Limits [(section.7.2) (section.8.2)] +1306 0 obj << +/Names [(structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) 730 0 R (structAACENC__InArgs) 697 0 R (structAACENC__InArgs_aa33d59e07bbd49bfe4dd6793763c6d48) 748 0 R (structAACENC__InArgs_aefc45c133d4f9775d8d0aadf56302ae4) 749 0 R (structAACENC__InfoStruct) 698 0 R (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c) 766 0 R] +/Limits [(structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c)] >> endobj -1384 0 obj << -/Names [(structAACENC__BufDesc) 613 0 R (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) 780 0 R (structAACENC__BufDesc_a324387bb8e5f44650c6e17c209bb05a9) 782 0 R (structAACENC__BufDesc_ab13b6a5c10505c3defd8bb1c19eac81d) 781 0 R (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1) 779 0 R (structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) 783 0 R] -/Limits [(structAACENC__BufDesc) (structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f)] +1307 0 obj << +/Names [(structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) 760 0 R (structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) 765 0 R (structAACENC__InfoStruct_a5bb3228c5af5584f97c54bdf8ed946e3) 759 0 R (structAACENC__InfoStruct_a993149bc5985d79c40d6e96a2d90a228) 762 0 R (structAACENC__InfoStruct_ab5c902598267b09b625e440b53937c76) 761 0 R (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047) 763 0 R] +/Limits [(structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047)] >> endobj -1385 0 obj << -/Names [(structAACENC__InArgs) 747 0 R (structAACENC__InArgs_aa33d59e07bbd49bfe4dd6793763c6d48) 795 0 R (structAACENC__InArgs_aefc45c133d4f9775d8d0aadf56302ae4) 796 0 R (structAACENC__InfoStruct) 748 0 R (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c) 817 0 R (structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) 811 0 R] -/Limits [(structAACENC__InArgs) (structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6)] +1308 0 obj << +/Names [(structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) 764 0 R (structAACENC__MetaData) 613 0 R (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) 616 0 R (structAACENC__MetaData_a0ad6337da83fa3a43a22f87d4ee8b192) 790 0 R (structAACENC__MetaData_a1e67ac741a9080f11325d0c02223f046) 787 0 R (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24) 794 0 R] +/Limits [(structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24)] >> endobj -1386 0 obj << -/Names [(structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) 818 0 R (structAACENC__InfoStruct_a5bb3228c5af5584f97c54bdf8ed946e3) 810 0 R (structAACENC__InfoStruct_a993149bc5985d79c40d6e96a2d90a228) 813 0 R (structAACENC__InfoStruct_ab5c902598267b09b625e440b53937c76) 812 0 R (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047) 814 0 R (structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) 815 0 R] -/Limits [(structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) (structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8)] +1309 0 obj << +/Names [(structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) 791 0 R (structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) 617 0 R (structAACENC__MetaData_aa2fbd6a3c66ac05e69e42782807e7ba4) 793 0 R (structAACENC__MetaData_ace0f370c1026d179ea122c0820e1d17c) 795 0 R (structAACENC__MetaData_ad2646dc407b31f38dbf71178b6780916) 796 0 R (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61) 792 0 R] +/Limits [(structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61)] >> endobj -1387 0 obj << -/Names [(structAACENC__MetaData) 645 0 R (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) 648 0 R (structAACENC__MetaData_a0ad6337da83fa3a43a22f87d4ee8b192) 847 0 R (structAACENC__MetaData_a1e67ac741a9080f11325d0c02223f046) 839 0 R (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24) 844 0 R (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) 840 0 R] -/Limits [(structAACENC__MetaData) (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f)] +1310 0 obj << +/Names [(structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) 788 0 R (structAACENC__OutArgs) 699 0 R (structAACENC__OutArgs_a7d481a0e52142dcdbdfa34677b111d7e) 814 0 R (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) 816 0 R (structAACENC__OutArgs_ad4d8784f4d5504a5f87ef44af1e7b6db) 815 0 R (subsection.2.12.1) 90 0 R] +/Limits [(structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) (subsection.2.12.1)] >> endobj -1388 0 obj << -/Names [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) 649 0 R (structAACENC__MetaData_aa2fbd6a3c66ac05e69e42782807e7ba4) 843 0 R (structAACENC__MetaData_ace0f370c1026d179ea122c0820e1d17c) 845 0 R (structAACENC__MetaData_ad2646dc407b31f38dbf71178b6780916) 846 0 R (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61) 842 0 R (structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) 841 0 R] -/Limits [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) (structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd)] +1311 0 obj << +/Names [(subsection.2.12.2) 94 0 R (subsection.2.12.3) 98 0 R (subsection.2.4.1) 34 0 R (subsection.2.4.2) 38 0 R (subsection.2.9.1) 62 0 R (subsection.2.9.2) 66 0 R] +/Limits [(subsection.2.12.2) (subsection.2.9.2)] >> endobj -1389 0 obj << -/Names [(structAACENC__OutArgs) 749 0 R (structAACENC__OutArgs_a7d481a0e52142dcdbdfa34677b111d7e) 866 0 R (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) 868 0 R (structAACENC__OutArgs_ad4d8784f4d5504a5f87ef44af1e7b6db) 867 0 R (subsection.2.12.1) 86 0 R (subsection.2.12.2) 90 0 R] -/Limits [(structAACENC__OutArgs) (subsection.2.12.2)] +1312 0 obj << +/Names [(subsection.2.9.3) 70 0 R (subsection.2.9.4) 74 0 R (subsection.3.2.1) 114 0 R (subsection.6.1.1) 146 0 R (subsection.6.1.2) 150 0 R (subsection.6.2.1) 178 0 R] +/Limits [(subsection.2.9.3) (subsection.6.2.1)] >> endobj -1390 0 obj << -/Names [(subsection.2.4.1) 34 0 R (subsection.2.4.2) 38 0 R (subsection.2.9.1) 62 0 R (subsection.2.9.2) 66 0 R (subsection.2.9.3) 70 0 R (subsection.3.2.1) 106 0 R] -/Limits [(subsection.2.4.1) (subsection.3.2.1)] +1313 0 obj << +/Names [(subsection.6.2.2) 182 0 R (subsection.6.3.1) 198 0 R (subsection.6.3.2) 202 0 R (subsection.6.4.1) 242 0 R (subsection.6.4.2) 246 0 R (subsection.6.5.1) 298 0 R] +/Limits [(subsection.6.2.2) (subsection.6.5.1)] >> endobj -1391 0 obj << -/Names [(subsection.4.1.1) 122 0 R (subsection.4.1.2) 126 0 R (subsection.7.1.1) 154 0 R (subsection.7.1.2) 158 0 R (subsection.7.2.1) 186 0 R (subsection.7.2.2) 190 0 R] -/Limits [(subsection.4.1.1) (subsection.7.2.2)] +1314 0 obj << +/Names [(subsection.6.5.2) 302 0 R (subsection.7.1.1) 326 0 R (subsection.7.1.2) 330 0 R (subsection.7.1.3) 338 0 R (subsection.7.1.4) 362 0 R (subsubsection.6.1.2.1) 154 0 R] +/Limits [(subsection.6.5.2) (subsubsection.6.1.2.1)] >> endobj -1392 0 obj << -/Names [(subsection.7.3.1) 206 0 R (subsection.7.3.2) 210 0 R (subsection.7.4.1) 250 0 R (subsection.7.4.2) 254 0 R (subsection.7.5.1) 306 0 R (subsection.7.5.2) 310 0 R] -/Limits [(subsection.7.3.1) (subsection.7.5.2)] +1315 0 obj << +/Names [(subsubsection.6.1.2.2) 158 0 R (subsubsection.6.1.2.3) 162 0 R (subsubsection.6.1.2.4) 166 0 R (subsubsection.6.1.2.5) 170 0 R (subsubsection.6.2.2.1) 186 0 R (subsubsection.6.2.2.2) 190 0 R] +/Limits [(subsubsection.6.1.2.2) (subsubsection.6.2.2.2)] >> endobj -1393 0 obj << -/Names [(subsection.8.1.1) 334 0 R (subsection.8.1.2) 338 0 R (subsection.8.1.3) 346 0 R (subsection.8.1.4) 370 0 R (subsection.8.2.1) 406 0 R (subsection.8.2.2) 410 0 R] -/Limits [(subsection.8.1.1) (subsection.8.2.2)] +1316 0 obj << +/Names [(subsubsection.6.3.2.1) 206 0 R (subsubsection.6.3.2.2) 210 0 R (subsubsection.6.3.2.3) 214 0 R (subsubsection.6.3.2.4) 218 0 R (subsubsection.6.3.2.5) 222 0 R (subsubsection.6.3.2.6) 226 0 R] +/Limits [(subsubsection.6.3.2.1) (subsubsection.6.3.2.6)] >> endobj -1394 0 obj << -/Names [(subsubsection.7.1.2.1) 162 0 R (subsubsection.7.1.2.2) 166 0 R (subsubsection.7.1.2.3) 170 0 R (subsubsection.7.1.2.4) 174 0 R (subsubsection.7.1.2.5) 178 0 R (subsubsection.7.2.2.1) 194 0 R] -/Limits [(subsubsection.7.1.2.1) (subsubsection.7.2.2.1)] +1317 0 obj << +/Names [(subsubsection.6.3.2.7) 230 0 R (subsubsection.6.3.2.8) 234 0 R (subsubsection.6.4.2.1) 250 0 R (subsubsection.6.4.2.10) 286 0 R (subsubsection.6.4.2.11) 290 0 R (subsubsection.6.4.2.2) 254 0 R] +/Limits [(subsubsection.6.3.2.7) (subsubsection.6.4.2.2)] >> endobj -1395 0 obj << -/Names [(subsubsection.7.2.2.2) 198 0 R (subsubsection.7.3.2.1) 214 0 R (subsubsection.7.3.2.2) 218 0 R (subsubsection.7.3.2.3) 222 0 R (subsubsection.7.3.2.4) 226 0 R (subsubsection.7.3.2.5) 230 0 R] -/Limits [(subsubsection.7.2.2.2) (subsubsection.7.3.2.5)] +1318 0 obj << +/Names [(subsubsection.6.4.2.3) 258 0 R (subsubsection.6.4.2.4) 262 0 R (subsubsection.6.4.2.5) 266 0 R (subsubsection.6.4.2.6) 270 0 R (subsubsection.6.4.2.7) 274 0 R (subsubsection.6.4.2.8) 278 0 R] +/Limits [(subsubsection.6.4.2.3) (subsubsection.6.4.2.8)] >> endobj -1396 0 obj << -/Names [(subsubsection.7.3.2.6) 234 0 R (subsubsection.7.3.2.7) 238 0 R (subsubsection.7.3.2.8) 242 0 R (subsubsection.7.4.2.1) 258 0 R (subsubsection.7.4.2.10) 294 0 R (subsubsection.7.4.2.11) 298 0 R] -/Limits [(subsubsection.7.3.2.6) (subsubsection.7.4.2.11)] +1319 0 obj << +/Names [(subsubsection.6.4.2.9) 282 0 R (subsubsection.6.5.2.1) 306 0 R (subsubsection.6.5.2.2) 310 0 R (subsubsection.6.5.2.3) 314 0 R (subsubsection.7.1.2.1) 334 0 R (subsubsection.7.1.3.1) 342 0 R] +/Limits [(subsubsection.6.4.2.9) (subsubsection.7.1.3.1)] >> endobj -1397 0 obj << -/Names [(subsubsection.7.4.2.2) 262 0 R (subsubsection.7.4.2.3) 266 0 R (subsubsection.7.4.2.4) 270 0 R (subsubsection.7.4.2.5) 274 0 R (subsubsection.7.4.2.6) 278 0 R (subsubsection.7.4.2.7) 282 0 R] -/Limits [(subsubsection.7.4.2.2) (subsubsection.7.4.2.7)] +1320 0 obj << +/Names [(subsubsection.7.1.3.2) 346 0 R (subsubsection.7.1.3.3) 350 0 R (subsubsection.7.1.3.4) 354 0 R (subsubsection.7.1.3.5) 358 0 R (subsubsection.7.1.4.1) 366 0 R (subsubsection.7.1.4.2) 370 0 R] +/Limits [(subsubsection.7.1.3.2) (subsubsection.7.1.4.2)] >> endobj -1398 0 obj << -/Names [(subsubsection.7.4.2.8) 286 0 R (subsubsection.7.4.2.9) 290 0 R (subsubsection.7.5.2.1) 314 0 R (subsubsection.7.5.2.2) 318 0 R (subsubsection.7.5.2.3) 322 0 R (subsubsection.8.1.2.1) 342 0 R] -/Limits [(subsubsection.7.4.2.8) (subsubsection.8.1.2.1)] +1321 0 obj << +/Names [(subsubsection.7.1.4.3) 374 0 R (subsubsection.7.1.4.4) 378 0 R (subsubsection.7.1.4.5) 382 0 R (subsubsection.7.1.4.6) 386 0 R (subsubsection.7.1.4.7) 390 0 R] +/Limits [(subsubsection.7.1.4.3) (subsubsection.7.1.4.7)] >> endobj -1399 0 obj << -/Names [(subsubsection.8.1.3.1) 350 0 R (subsubsection.8.1.3.2) 354 0 R (subsubsection.8.1.3.3) 358 0 R (subsubsection.8.1.3.4) 362 0 R (subsubsection.8.1.3.5) 366 0 R (subsubsection.8.1.4.1) 374 0 R] -/Limits [(subsubsection.8.1.3.1) (subsubsection.8.1.4.1)] +1322 0 obj << +/Kids [1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R] +/Limits [(Doc-Start) (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea)] >> endobj -1400 0 obj << -/Names [(subsubsection.8.1.4.2) 378 0 R (subsubsection.8.1.4.3) 382 0 R (subsubsection.8.1.4.4) 386 0 R (subsubsection.8.1.4.5) 390 0 R (subsubsection.8.1.4.6) 394 0 R (subsubsection.8.1.4.7) 398 0 R] -/Limits [(subsubsection.8.1.4.2) (subsubsection.8.1.4.7)] +1323 0 obj << +/Kids [1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R] +/Limits [(aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243)] >> endobj -1401 0 obj << -/Names [(subsubsection.8.2.2.1) 414 0 R] -/Limits [(subsubsection.8.2.2.1) (subsubsection.8.2.2.1)] +1324 0 obj << +/Kids [1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) (index_encBasics)] >> endobj -1402 0 obj << -/Kids [1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R] -/Limits [(CommandLineUsage) (LIBUSE_writeOutData)] +1325 0 obj << +/Kids [1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R] +/Limits [(page.1) (page.6)] >> endobj -1403 0 obj << -/Kids [1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R 1363 0 R] -/Limits [(aacenc__lib_8h) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5)] +1326 0 obj << +/Kids [1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R] +/Limits [(page.7) (section.6.5)] >> endobj -1404 0 obj << -/Kids [1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) (index)] +1327 0 obj << +/Kids [1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R] +/Limits [(section.7.1) (subsection.2.12.1)] >> endobj -1405 0 obj << -/Kids [1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R 1375 0 R] -/Limits [(index_Scope) (page.38)] +1328 0 obj << +/Kids [1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R] +/Limits [(subsection.2.12.2) (subsubsection.6.3.2.6)] >> endobj -1406 0 obj << -/Kids [1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R] -/Limits [(page.39) (section.3.1)] +1329 0 obj << +/Kids [1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R] +/Limits [(subsubsection.6.3.2.7) (subsubsection.7.1.4.7)] >> endobj -1407 0 obj << -/Kids [1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R] -/Limits [(section.3.2) (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f)] +1330 0 obj << +/Kids [1322 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R] +/Limits [(Doc-Start) (subsection.2.12.1)] >> endobj -1408 0 obj << -/Kids [1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R] -/Limits [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) (subsection.8.2.2)] +1331 0 obj << +/Kids [1328 0 R 1329 0 R] +/Limits [(subsection.2.12.2) (subsubsection.7.1.4.7)] >> endobj -1409 0 obj << -/Kids [1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R] -/Limits [(subsubsection.7.1.2.1) (subsubsection.8.1.4.1)] +1332 0 obj << +/Kids [1330 0 R 1331 0 R] +/Limits [(Doc-Start) (subsubsection.7.1.4.7)] >> endobj -1410 0 obj << -/Kids [1400 0 R 1401 0 R] -/Limits [(subsubsection.8.1.4.2) (subsubsection.8.2.2.1)] +1333 0 obj << +/Dests 1332 0 R >> endobj -1411 0 obj << -/Kids [1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 1407 0 R] -/Limits [(CommandLineUsage) (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f)] ->> endobj -1412 0 obj << -/Kids [1408 0 R 1409 0 R 1410 0 R] -/Limits [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) (subsubsection.8.2.2.1)] ->> endobj -1413 0 obj << -/Kids [1411 0 R 1412 0 R] -/Limits [(CommandLineUsage) (subsubsection.8.2.2.1)] ->> endobj -1414 0 obj << -/Dests 1413 0 R ->> endobj -1415 0 obj << +1334 0 obj << /Type /Catalog -/Pages 1350 0 R -/Outlines 1351 0 R -/Names 1414 0 R +/Pages 1273 0 R +/Outlines 1274 0 R +/Names 1333 0 R /PageMode/UseOutlines/PageLabels<>2<>6<>]>> -/OpenAction 417 0 R +/OpenAction 393 0 R >> endobj -1416 0 obj << +1335 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() -/CreationDate (D:20120927164403+02'00') -/ModDate (D:20120927164403+02'00') +/CreationDate (D:20130902144953+02'00') +/ModDate (D:20130902144953+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 1417 +0 1336 0000000000 65535 f 0000000015 00000 n -0000187333 00000 n -0000488698 00000 n +0000185384 00000 n +0000472226 00000 n 0000000060 00000 n 0000000146 00000 n -0000187502 00000 n -0000488628 00000 n +0000185553 00000 n +0000472156 00000 n 0000000193 00000 n 0000000244 00000 n -0000187619 00000 n -0000488557 00000 n +0000185670 00000 n +0000472085 00000 n 0000000291 00000 n 0000000391 00000 n -0000191743 00000 n -0000488431 00000 n +0000189632 00000 n +0000471958 00000 n 0000000437 00000 n 0000000532 00000 n -0000191913 00000 n -0000488357 00000 n +0000189802 00000 n +0000471884 00000 n 0000000580 00000 n 0000000655 00000 n -0000192031 00000 n -0000488270 00000 n +0000189920 00000 n +0000471797 00000 n 0000000703 00000 n 0000000813 00000 n -0000195683 00000 n -0000488183 00000 n +0000193572 00000 n +0000471710 00000 n 0000000861 00000 n 0000001029 00000 n -0000198534 00000 n -0000488059 00000 n +0000196426 00000 n +0000471586 00000 n 0000001077 00000 n 0000001217 00000 n -0000198647 00000 n -0000487985 00000 n +0000196539 00000 n +0000471512 00000 n 0000001270 00000 n 0000001433 00000 n -0000201120 00000 n -0000487911 00000 n +0000199022 00000 n +0000471438 00000 n 0000001486 00000 n 0000001697 00000 n -0000201233 00000 n -0000487824 00000 n +0000199135 00000 n +0000471351 00000 n 0000001745 00000 n 0000001863 00000 n -0000201345 00000 n -0000487737 00000 n +0000199247 00000 n +0000471264 00000 n 0000001911 00000 n 0000002049 00000 n -0000207101 00000 n -0000487650 00000 n +0000205003 00000 n +0000471177 00000 n 0000002097 00000 n 0000002245 00000 n -0000207214 00000 n -0000487563 00000 n +0000205116 00000 n +0000471090 00000 n 0000002293 00000 n 0000002438 00000 n -0000207326 00000 n -0000487439 00000 n +0000205228 00000 n +0000470966 00000 n 0000002486 00000 n 0000002631 00000 n -0000210824 00000 n -0000487365 00000 n +0000209491 00000 n +0000470892 00000 n 0000002684 00000 n 0000002857 00000 n -0000210937 00000 n -0000487278 00000 n +0000209604 00000 n +0000470805 00000 n 0000002910 00000 n 0000003073 00000 n -0000211050 00000 n -0000487204 00000 n +0000209717 00000 n +0000470718 00000 n 0000003126 00000 n 0000003299 00000 n -0000211163 00000 n -0000487117 00000 n -0000003348 00000 n -0000003516 00000 n -0000216282 00000 n -0000487030 00000 n -0000003565 00000 n -0000003685 00000 n -0000216400 00000 n -0000486919 00000 n -0000003734 00000 n -0000004026 00000 n -0000216518 00000 n -0000486845 00000 n -0000004080 00000 n -0000004238 00000 n -0000218066 00000 n -0000486771 00000 n -0000004292 00000 n -0000004501 00000 n -0000221444 00000 n -0000486643 00000 n -0000004547 00000 n -0000004662 00000 n -0000221614 00000 n -0000486567 00000 n -0000004710 00000 n -0000004783 00000 n -0000221731 00000 n -0000486437 00000 n -0000004832 00000 n -0000005010 00000 n -0000224678 00000 n -0000486372 00000 n -0000005064 00000 n -0000005251 00000 n -0000224795 00000 n -0000486294 00000 n -0000005300 00000 n -0000005396 00000 n -0000227320 00000 n -0000486162 00000 n -0000005443 00000 n -0000005564 00000 n -0000227496 00000 n -0000486058 00000 n -0000005613 00000 n -0000005686 00000 n -0000227610 00000 n -0000485979 00000 n -0000005740 00000 n -0000005866 00000 n -0000227724 00000 n -0000485900 00000 n -0000005920 00000 n -0000006041 00000 n -0000233537 00000 n -0000485767 00000 n -0000006088 00000 n -0000006174 00000 n -0000233594 00000 n -0000485702 00000 n -0000006223 00000 n -0000006304 00000 n -0000235481 00000 n -0000485569 00000 n -0000006351 00000 n -0000006432 00000 n -0000235538 00000 n -0000485504 00000 n -0000006481 00000 n -0000006557 00000 n -0000238595 00000 n -0000485371 00000 n -0000006604 00000 n -0000006730 00000 n -0000238709 00000 n -0000485253 00000 n -0000006779 00000 n -0000006971 00000 n -0000238823 00000 n -0000485174 00000 n -0000007025 00000 n -0000007156 00000 n -0000238880 00000 n -0000485056 00000 n -0000007210 00000 n -0000007369 00000 n -0000238994 00000 n -0000484977 00000 n -0000007428 00000 n -0000007506 00000 n -0000239108 00000 n -0000484884 00000 n -0000007565 00000 n -0000007678 00000 n -0000239222 00000 n -0000484791 00000 n -0000007737 00000 n -0000007785 00000 n -0000241506 00000 n -0000484698 00000 n -0000007844 00000 n -0000007912 00000 n -0000241620 00000 n -0000484619 00000 n -0000007971 00000 n -0000008034 00000 n -0000241734 00000 n -0000484487 00000 n -0000008083 00000 n -0000008270 00000 n -0000241848 00000 n -0000484408 00000 n -0000008324 00000 n -0000008455 00000 n -0000241905 00000 n -0000484290 00000 n -0000008509 00000 n -0000008668 00000 n -0000242019 00000 n -0000484211 00000 n -0000008727 00000 n -0000008810 00000 n -0000242133 00000 n -0000484132 00000 n -0000008869 00000 n -0000008957 00000 n -0000245417 00000 n -0000484000 00000 n -0000009006 00000 n -0000009213 00000 n -0000245531 00000 n -0000483921 00000 n -0000009267 00000 n -0000009398 00000 n -0000245588 00000 n -0000483803 00000 n -0000009452 00000 n -0000009611 00000 n -0000245702 00000 n -0000483724 00000 n -0000009670 00000 n -0000009733 00000 n -0000245816 00000 n -0000483631 00000 n -0000009792 00000 n -0000009860 00000 n -0000245930 00000 n -0000483538 00000 n -0000009919 00000 n -0000010007 00000 n -0000246048 00000 n -0000483445 00000 n -0000010066 00000 n -0000010149 00000 n -0000246162 00000 n -0000483352 00000 n -0000010208 00000 n -0000010306 00000 n -0000250664 00000 n -0000483259 00000 n -0000010365 00000 n -0000010458 00000 n -0000250778 00000 n -0000483166 00000 n -0000010517 00000 n -0000010600 00000 n -0000250897 00000 n -0000483087 00000 n -0000010659 00000 n -0000010757 00000 n -0000251011 00000 n -0000482955 00000 n -0000010806 00000 n -0000011003 00000 n -0000251125 00000 n -0000482876 00000 n -0000011057 00000 n -0000011188 00000 n -0000251182 00000 n -0000482757 00000 n -0000011242 00000 n -0000011401 00000 n -0000251296 00000 n -0000482678 00000 n -0000011460 00000 n -0000011558 00000 n -0000253185 00000 n -0000482585 00000 n -0000011617 00000 n -0000011708 00000 n -0000253304 00000 n -0000482492 00000 n -0000011767 00000 n -0000011893 00000 n -0000253423 00000 n -0000482399 00000 n -0000011952 00000 n -0000012065 00000 n -0000253537 00000 n -0000482306 00000 n -0000012124 00000 n -0000012210 00000 n -0000253655 00000 n -0000482213 00000 n -0000012269 00000 n +0000209830 00000 n +0000470644 00000 n +0000003352 00000 n +0000003523 00000 n +0000212481 00000 n +0000470557 00000 n +0000003572 00000 n +0000003740 00000 n +0000215144 00000 n +0000470470 00000 n +0000003789 00000 n +0000003909 00000 n +0000216751 00000 n +0000470359 00000 n +0000003958 00000 n +0000004250 00000 n +0000216869 00000 n +0000470285 00000 n +0000004304 00000 n +0000004579 00000 n +0000216982 00000 n +0000470198 00000 n +0000004633 00000 n +0000004959 00000 n +0000218364 00000 n +0000470123 00000 n +0000005013 00000 n +0000005264 00000 n +0000221258 00000 n +0000469991 00000 n +0000005311 00000 n +0000005427 00000 n +0000221429 00000 n +0000469912 00000 n +0000005476 00000 n +0000005549 00000 n +0000221547 00000 n +0000469780 00000 n +0000005598 00000 n +0000005776 00000 n +0000224654 00000 n +0000469715 00000 n +0000005830 00000 n +0000006017 00000 n +0000224773 00000 n +0000469636 00000 n +0000006066 00000 n +0000006162 00000 n +0000227260 00000 n +0000469503 00000 n +0000006209 00000 n +0000006295 00000 n +0000227317 00000 n +0000469438 00000 n +0000006344 00000 n +0000006425 00000 n +0000228843 00000 n +0000469305 00000 n +0000006472 00000 n +0000006553 00000 n +0000228900 00000 n +0000469240 00000 n +0000006602 00000 n +0000006678 00000 n +0000231931 00000 n +0000469107 00000 n +0000006725 00000 n +0000006851 00000 n +0000232045 00000 n +0000468989 00000 n +0000006900 00000 n +0000007092 00000 n +0000232159 00000 n +0000468910 00000 n +0000007146 00000 n +0000007277 00000 n +0000232216 00000 n +0000468792 00000 n +0000007331 00000 n +0000007490 00000 n +0000232330 00000 n +0000468713 00000 n +0000007549 00000 n +0000007627 00000 n +0000232448 00000 n +0000468620 00000 n +0000007686 00000 n +0000007799 00000 n +0000232567 00000 n +0000468527 00000 n +0000007858 00000 n +0000007906 00000 n +0000234839 00000 n +0000468434 00000 n +0000007965 00000 n +0000008033 00000 n +0000234957 00000 n +0000468355 00000 n +0000008092 00000 n +0000008155 00000 n +0000235071 00000 n +0000468223 00000 n +0000008204 00000 n +0000008391 00000 n +0000235185 00000 n +0000468144 00000 n +0000008445 00000 n +0000008576 00000 n +0000235242 00000 n +0000468026 00000 n +0000008630 00000 n +0000008789 00000 n +0000235356 00000 n +0000467947 00000 n +0000008848 00000 n +0000008931 00000 n +0000235475 00000 n +0000467868 00000 n +0000008990 00000 n +0000009078 00000 n +0000235589 00000 n +0000467736 00000 n +0000009127 00000 n +0000009334 00000 n +0000238873 00000 n +0000467657 00000 n +0000009388 00000 n +0000009519 00000 n +0000238930 00000 n +0000467539 00000 n +0000009573 00000 n +0000009732 00000 n +0000239044 00000 n +0000467460 00000 n +0000009791 00000 n +0000009854 00000 n +0000239163 00000 n +0000467367 00000 n +0000009913 00000 n +0000009981 00000 n +0000239281 00000 n +0000467274 00000 n +0000010040 00000 n +0000010128 00000 n +0000239398 00000 n +0000467181 00000 n +0000010187 00000 n +0000010270 00000 n +0000239517 00000 n +0000467088 00000 n +0000010329 00000 n +0000010427 00000 n +0000239636 00000 n +0000466995 00000 n +0000010486 00000 n +0000010579 00000 n +0000239754 00000 n +0000466902 00000 n +0000010638 00000 n +0000010721 00000 n +0000244504 00000 n +0000466823 00000 n +0000010780 00000 n +0000010878 00000 n +0000244618 00000 n +0000466691 00000 n +0000010927 00000 n +0000011124 00000 n +0000244732 00000 n +0000466612 00000 n +0000011178 00000 n +0000011309 00000 n +0000244789 00000 n +0000466493 00000 n +0000011363 00000 n +0000011522 00000 n +0000244903 00000 n +0000466414 00000 n +0000011581 00000 n +0000011679 00000 n +0000245022 00000 n +0000466321 00000 n +0000011738 00000 n +0000011829 00000 n +0000245140 00000 n +0000466228 00000 n +0000011888 00000 n +0000012014 00000 n +0000247148 00000 n +0000466135 00000 n +0000012073 00000 n +0000012186 00000 n +0000247262 00000 n +0000466042 00000 n +0000012245 00000 n +0000012331 00000 n +0000247381 00000 n +0000465949 00000 n 0000012390 00000 n -0000253774 00000 n -0000482120 00000 n -0000012449 00000 n -0000012578 00000 n -0000253893 00000 n -0000482027 00000 n -0000012637 00000 n -0000012789 00000 n -0000254011 00000 n -0000481934 00000 n -0000012848 00000 n -0000012952 00000 n -0000254130 00000 n -0000481841 00000 n -0000013012 00000 n -0000013159 00000 n -0000256827 00000 n -0000481762 00000 n -0000013219 00000 n -0000013327 00000 n -0000256941 00000 n -0000481644 00000 n -0000013376 00000 n -0000013568 00000 n -0000257054 00000 n -0000481565 00000 n -0000013622 00000 n -0000013753 00000 n -0000257111 00000 n -0000481447 00000 n -0000013807 00000 n -0000013966 00000 n -0000257225 00000 n -0000481368 00000 n -0000014025 00000 n -0000014108 00000 n -0000257339 00000 n -0000481275 00000 n -0000014167 00000 n -0000014255 00000 n -0000257453 00000 n -0000481196 00000 n -0000014314 00000 n -0000014397 00000 n -0000262220 00000 n -0000481077 00000 n -0000014444 00000 n +0000012511 00000 n +0000247498 00000 n +0000465856 00000 n +0000012570 00000 n +0000012699 00000 n +0000247617 00000 n +0000465763 00000 n +0000012758 00000 n +0000012910 00000 n +0000247736 00000 n +0000465670 00000 n +0000012969 00000 n +0000013073 00000 n +0000247855 00000 n +0000465577 00000 n +0000013133 00000 n +0000013280 00000 n +0000247974 00000 n +0000465498 00000 n +0000013340 00000 n +0000013448 00000 n +0000248088 00000 n +0000465380 00000 n +0000013497 00000 n +0000013689 00000 n +0000250415 00000 n +0000465301 00000 n +0000013743 00000 n +0000013874 00000 n +0000250472 00000 n +0000465183 00000 n +0000013928 00000 n +0000014087 00000 n +0000250586 00000 n +0000465104 00000 n +0000014146 00000 n +0000014229 00000 n +0000250705 00000 n +0000465011 00000 n +0000014288 00000 n +0000014376 00000 n +0000250824 00000 n +0000464932 00000 n +0000014435 00000 n +0000014518 00000 n +0000256838 00000 n +0000464813 00000 n 0000014565 00000 n -0000262334 00000 n -0000480959 00000 n -0000014614 00000 n -0000014786 00000 n -0000288956 00000 n -0000480880 00000 n -0000014840 00000 n -0000014971 00000 n -0000289013 00000 n -0000480748 00000 n -0000015025 00000 n -0000015161 00000 n -0000289129 00000 n -0000480683 00000 n -0000015220 00000 n -0000015336 00000 n -0000289187 00000 n -0000480551 00000 n -0000015390 00000 n -0000015574 00000 n -0000289303 00000 n -0000480472 00000 n -0000015633 00000 n -0000015779 00000 n -0000291916 00000 n -0000480379 00000 n -0000015838 00000 n -0000015949 00000 n -0000292409 00000 n -0000480286 00000 n -0000016008 00000 n -0000016099 00000 n -0000296785 00000 n -0000480193 00000 n -0000016158 00000 n -0000016330 00000 n -0000297279 00000 n -0000480114 00000 n -0000016389 00000 n -0000016480 00000 n -0000304162 00000 n -0000479996 00000 n -0000016534 00000 n -0000016675 00000 n -0000304277 00000 n -0000479917 00000 n -0000016734 00000 n -0000016817 00000 n -0000304393 00000 n -0000479824 00000 n -0000016876 00000 n -0000016964 00000 n -0000307766 00000 n -0000479731 00000 n -0000017023 00000 n -0000017131 00000 n -0000310763 00000 n -0000479638 00000 n -0000017190 00000 n -0000017268 00000 n -0000310878 00000 n -0000479545 00000 n -0000017327 00000 n -0000017453 00000 n -0000310994 00000 n -0000479452 00000 n -0000017512 00000 n -0000017638 00000 n -0000314195 00000 n -0000479373 00000 n -0000017697 00000 n -0000017775 00000 n -0000321606 00000 n -0000479255 00000 n -0000017824 00000 n -0000017973 00000 n -0000321723 00000 n -0000479176 00000 n -0000018027 00000 n -0000018158 00000 n -0000321781 00000 n -0000479058 00000 n -0000018212 00000 n -0000018353 00000 n -0000321897 00000 n -0000478993 00000 n -0000018412 00000 n -0000018460 00000 n -0000019522 00000 n -0000019656 00000 n -0000162979 00000 n -0000163107 00000 n -0000018512 00000 n -0000163050 00000 n -0000476875 00000 n -0000477233 00000 n -0000477590 00000 n -0000131382 00000 n -0000163447 00000 n -0000163328 00000 n -0000163228 00000 n -0000164904 00000 n -0000165055 00000 n -0000165209 00000 n -0000165363 00000 n -0000165514 00000 n -0000165668 00000 n -0000165822 00000 n -0000165976 00000 n -0000166130 00000 n -0000166288 00000 n -0000166447 00000 n -0000166600 00000 n -0000166754 00000 n -0000166907 00000 n -0000167061 00000 n -0000167215 00000 n -0000167374 00000 n -0000167533 00000 n -0000167692 00000 n -0000167846 00000 n -0000168001 00000 n -0000168156 00000 n -0000168315 00000 n -0000168475 00000 n -0000168624 00000 n -0000168777 00000 n -0000168931 00000 n -0000170697 00000 n -0000169146 00000 n -0000164557 00000 n -0000163488 00000 n -0000169089 00000 n -0000170851 00000 n -0000171002 00000 n -0000171156 00000 n -0000171315 00000 n -0000171474 00000 n -0000171625 00000 n -0000171779 00000 n -0000171930 00000 n -0000172084 00000 n -0000172234 00000 n -0000172388 00000 n -0000172547 00000 n -0000172706 00000 n -0000172869 00000 n -0000173032 00000 n -0000173196 00000 n -0000173360 00000 n -0000173524 00000 n -0000173676 00000 n -0000173835 00000 n -0000173994 00000 n -0000174158 00000 n -0000174322 00000 n -0000174476 00000 n -0000174635 00000 n -0000174794 00000 n -0000174958 00000 n -0000175121 00000 n -0000175285 00000 n -0000175448 00000 n -0000175610 00000 n -0000175773 00000 n -0000175937 00000 n -0000177764 00000 n -0000176100 00000 n -0000170294 00000 n -0000169231 00000 n -0000177918 00000 n -0000178076 00000 n -0000178235 00000 n -0000178399 00000 n -0000178563 00000 n -0000178727 00000 n -0000178889 00000 n -0000179052 00000 n -0000179216 00000 n -0000179379 00000 n -0000179542 00000 n -0000179706 00000 n -0000179871 00000 n -0000180035 00000 n -0000180189 00000 n -0000180348 00000 n -0000180506 00000 n -0000180670 00000 n -0000180834 00000 n -0000180998 00000 n -0000181149 00000 n -0000181303 00000 n -0000181462 00000 n -0000181621 00000 n -0000181784 00000 n -0000181943 00000 n -0000182107 00000 n -0000182270 00000 n -0000182434 00000 n -0000182598 00000 n -0000182762 00000 n -0000182921 00000 n -0000183085 00000 n -0000183248 00000 n -0000183412 00000 n -0000184347 00000 n -0000183575 00000 n -0000177345 00000 n -0000176185 00000 n -0000184511 00000 n -0000184675 00000 n -0000184838 00000 n -0000184991 00000 n -0000185150 00000 n -0000185309 00000 n -0000185472 00000 n -0000184160 00000 n -0000183660 00000 n -0000187674 00000 n -0000187158 00000 n -0000185557 00000 n -0000187277 00000 n -0000187388 00000 n -0000187445 00000 n -0000187557 00000 n -0000477708 00000 n -0000188161 00000 n -0000187986 00000 n -0000187759 00000 n -0000188105 00000 n +0000014686 00000 n +0000256952 00000 n +0000464709 00000 n +0000014735 00000 n +0000014907 00000 n +0000280174 00000 n +0000464630 00000 n +0000014961 00000 n +0000015092 00000 n +0000280231 00000 n +0000464498 00000 n +0000015146 00000 n +0000015282 00000 n +0000280344 00000 n +0000464433 00000 n +0000015341 00000 n +0000015457 00000 n +0000280401 00000 n +0000464301 00000 n +0000015511 00000 n +0000015695 00000 n +0000280515 00000 n +0000464222 00000 n +0000015754 00000 n +0000015900 00000 n +0000280938 00000 n +0000464129 00000 n +0000015959 00000 n +0000016070 00000 n +0000281423 00000 n +0000464036 00000 n +0000016129 00000 n +0000016220 00000 n +0000284893 00000 n +0000463943 00000 n +0000016279 00000 n +0000016451 00000 n +0000285378 00000 n +0000463864 00000 n +0000016510 00000 n +0000016601 00000 n +0000296126 00000 n +0000463746 00000 n +0000016655 00000 n +0000016796 00000 n +0000296242 00000 n +0000463667 00000 n +0000016855 00000 n +0000016938 00000 n +0000299721 00000 n +0000463574 00000 n +0000016997 00000 n +0000017085 00000 n +0000302731 00000 n +0000463481 00000 n +0000017144 00000 n +0000017252 00000 n +0000302847 00000 n +0000463388 00000 n +0000017311 00000 n +0000017389 00000 n +0000302962 00000 n +0000463295 00000 n +0000017448 00000 n +0000017574 00000 n +0000306214 00000 n +0000463202 00000 n +0000017633 00000 n +0000017759 00000 n +0000306330 00000 n +0000463123 00000 n +0000017818 00000 n +0000017896 00000 n +0000018960 00000 n +0000019094 00000 n +0000162417 00000 n +0000162545 00000 n +0000017948 00000 n +0000162488 00000 n +0000461120 00000 n +0000461477 00000 n +0000461834 00000 n +0000130820 00000 n +0000162885 00000 n +0000162766 00000 n +0000162666 00000 n +0000164345 00000 n +0000164496 00000 n +0000164650 00000 n +0000164804 00000 n +0000164955 00000 n +0000165109 00000 n +0000165263 00000 n +0000165417 00000 n +0000165571 00000 n +0000165729 00000 n +0000165888 00000 n +0000166041 00000 n +0000166195 00000 n +0000166348 00000 n +0000166502 00000 n +0000166656 00000 n +0000166815 00000 n +0000166974 00000 n +0000167133 00000 n +0000167291 00000 n +0000167446 00000 n +0000167601 00000 n +0000167756 00000 n +0000167916 00000 n +0000168076 00000 n +0000168236 00000 n +0000168386 00000 n +0000170168 00000 n +0000168595 00000 n +0000163998 00000 n +0000162926 00000 n +0000168538 00000 n +0000170322 00000 n +0000170477 00000 n +0000170631 00000 n +0000170782 00000 n +0000170936 00000 n +0000171087 00000 n +0000171241 00000 n +0000171391 00000 n +0000171544 00000 n +0000171703 00000 n +0000171862 00000 n +0000172025 00000 n +0000172188 00000 n +0000172352 00000 n +0000172516 00000 n +0000172680 00000 n +0000172833 00000 n +0000172992 00000 n +0000173150 00000 n +0000173313 00000 n +0000173477 00000 n +0000173630 00000 n +0000173789 00000 n +0000173948 00000 n +0000174112 00000 n +0000174273 00000 n +0000174437 00000 n +0000174601 00000 n +0000174764 00000 n +0000174928 00000 n +0000175092 00000 n +0000175256 00000 n +0000175410 00000 n +0000175569 00000 n +0000177433 00000 n +0000175727 00000 n +0000169757 00000 n +0000168680 00000 n +0000177597 00000 n +0000177761 00000 n +0000177924 00000 n +0000178085 00000 n +0000178249 00000 n +0000178413 00000 n +0000178576 00000 n +0000178739 00000 n +0000178903 00000 n +0000179066 00000 n +0000179231 00000 n +0000179385 00000 n +0000179543 00000 n +0000179702 00000 n +0000179866 00000 n +0000180030 00000 n +0000180194 00000 n +0000180345 00000 n +0000180499 00000 n +0000180658 00000 n +0000180817 00000 n +0000180981 00000 n +0000181139 00000 n +0000181301 00000 n +0000181465 00000 n +0000181629 00000 n +0000181793 00000 n +0000181957 00000 n +0000182116 00000 n +0000182280 00000 n +0000182444 00000 n +0000182608 00000 n +0000182771 00000 n +0000182935 00000 n +0000183099 00000 n +0000183263 00000 n +0000177014 00000 n +0000175812 00000 n +0000183567 00000 n +0000183448 00000 n +0000183348 00000 n +0000185725 00000 n +0000185209 00000 n +0000183608 00000 n +0000185328 00000 n +0000185439 00000 n +0000185496 00000 n +0000185608 00000 n +0000461952 00000 n +0000186212 00000 n +0000186037 00000 n +0000185810 00000 n +0000186156 00000 n +0000188185 00000 n +0000188341 00000 n +0000188532 00000 n +0000188688 00000 n +0000188879 00000 n +0000189037 00000 n +0000189227 00000 n +0000189386 00000 n +0000190202 00000 n +0000187990 00000 n +0000186284 00000 n +0000189576 00000 n +0000189688 00000 n +0000189745 00000 n +0000189858 00000 n +0000189974 00000 n +0000460946 00000 n +0000190031 00000 n +0000190088 00000 n 0000190145 00000 n -0000190301 00000 n -0000190452 00000 n -0000190643 00000 n -0000190799 00000 n -0000190990 00000 n -0000191148 00000 n -0000191338 00000 n -0000191497 00000 n -0000192313 00000 n -0000189942 00000 n -0000188233 00000 n -0000191687 00000 n -0000191799 00000 n -0000191856 00000 n -0000191969 00000 n -0000192085 00000 n -0000476701 00000 n -0000192142 00000 n -0000192199 00000 n -0000192256 00000 n -0000262277 00000 n -0000314253 00000 n -0000314137 00000 n -0000195626 00000 n -0000310936 00000 n -0000207269 00000 n -0000304335 00000 n -0000207157 00000 n -0000310705 00000 n -0000194413 00000 n -0000194571 00000 n -0000194725 00000 n -0000194913 00000 n -0000195075 00000 n -0000195265 00000 n -0000195738 00000 n -0000194234 00000 n -0000192411 00000 n -0000195456 00000 n -0000195512 00000 n -0000195569 00000 n -0000201176 00000 n -0000198477 00000 n -0000201289 00000 n -0000304219 00000 n -0000198067 00000 n -0000198231 00000 n -0000198703 00000 n -0000197920 00000 n -0000195836 00000 n -0000198421 00000 n -0000198590 00000 n -0000238652 00000 n -0000200626 00000 n -0000200817 00000 n -0000201401 00000 n -0000200479 00000 n -0000198801 00000 n -0000201007 00000 n -0000201063 00000 n -0000203944 00000 n -0000204101 00000 n -0000204325 00000 n -0000204706 00000 n -0000204871 00000 n -0000205035 00000 n -0000205258 00000 n -0000205449 00000 n -0000205648 00000 n -0000205846 00000 n -0000206037 00000 n -0000206227 00000 n -0000206418 00000 n -0000206608 00000 n -0000206798 00000 n -0000207443 00000 n -0000203685 00000 n -0000201499 00000 n -0000206988 00000 n -0000207044 00000 n -0000204516 00000 n -0000207382 00000 n -0000477826 00000 n -0000303971 00000 n -0000250954 00000 n -0000291669 00000 n -0000293222 00000 n -0000253480 00000 n -0000251353 00000 n -0000310820 00000 n -0000297221 00000 n -0000209540 00000 n -0000209764 00000 n -0000209988 00000 n -0000210369 00000 n -0000210544 00000 n -0000211218 00000 n -0000209361 00000 n -0000207541 00000 n -0000210768 00000 n -0000210880 00000 n -0000210179 00000 n -0000210993 00000 n -0000211106 00000 n -0000297400 00000 n -0000300380 00000 n -0000224734 00000 n -0000300505 00000 n -0000213595 00000 n -0000213930 00000 n -0000213456 00000 n -0000211316 00000 n -0000213818 00000 n -0000213874 00000 n -0000300443 00000 n -0000216574 00000 n -0000216107 00000 n -0000214028 00000 n -0000216226 00000 n -0000216338 00000 n -0000216456 00000 n -0000218122 00000 n -0000217834 00000 n -0000216672 00000 n -0000217953 00000 n -0000218009 00000 n -0000218613 00000 n -0000218438 00000 n -0000218207 00000 n -0000218557 00000 n -0000221231 00000 n -0000221788 00000 n -0000221092 00000 n -0000218685 00000 n -0000221388 00000 n -0000221500 00000 n -0000221557 00000 n -0000476123 00000 n -0000221670 00000 n -0000477944 00000 n -0000227377 00000 n -0000224852 00000 n -0000224441 00000 n -0000221886 00000 n -0000224560 00000 n -0000224616 00000 n -0000476268 00000 n -0000226584 00000 n -0000226736 00000 n -0000226921 00000 n -0000227073 00000 n -0000227781 00000 n -0000226421 00000 n -0000224962 00000 n -0000227264 00000 n -0000227434 00000 n -0000227553 00000 n -0000227667 00000 n -0000321839 00000 n -0000229369 00000 n -0000229194 00000 n -0000227879 00000 n -0000229313 00000 n -0000230639 00000 n -0000230464 00000 n -0000229454 00000 n -0000230583 00000 n -0000231142 00000 n -0000230967 00000 n -0000230737 00000 n -0000231086 00000 n -0000231890 00000 n -0000232054 00000 n -0000232208 00000 n -0000232370 00000 n -0000232524 00000 n -0000232691 00000 n -0000232845 00000 n -0000233010 00000 n -0000233164 00000 n -0000233327 00000 n -0000233651 00000 n -0000231679 00000 n -0000231214 00000 n -0000233481 00000 n -0000478062 00000 n -0000241677 00000 n -0000242190 00000 n -0000256884 00000 n -0000234139 00000 n -0000233964 00000 n -0000233736 00000 n -0000234083 00000 n -0000234809 00000 n -0000234966 00000 n -0000235120 00000 n -0000235271 00000 n -0000235595 00000 n -0000234646 00000 n -0000234211 00000 n -0000235425 00000 n -0000236080 00000 n -0000235905 00000 n -0000235680 00000 n -0000236024 00000 n -0000237170 00000 n -0000237368 00000 n -0000237565 00000 n -0000237763 00000 n -0000237961 00000 n -0000238158 00000 n -0000238348 00000 n -0000239279 00000 n -0000236983 00000 n -0000236152 00000 n -0000238539 00000 n -0000238766 00000 n -0000476412 00000 n -0000238937 00000 n -0000239051 00000 n -0000239165 00000 n -0000241563 00000 n -0000241449 00000 n -0000289245 00000 n -0000240498 00000 n -0000240654 00000 n -0000240850 00000 n -0000241047 00000 n -0000241238 00000 n -0000242246 00000 n -0000240327 00000 n -0000239403 00000 n -0000241393 00000 n -0000241791 00000 n -0000241962 00000 n -0000242076 00000 n -0000243756 00000 n -0000243957 00000 n -0000244158 00000 n -0000244359 00000 n -0000244560 00000 n -0000244761 00000 n -0000244962 00000 n -0000245161 00000 n -0000246279 00000 n -0000243561 00000 n -0000242370 00000 n -0000245361 00000 n -0000245474 00000 n -0000245645 00000 n -0000245759 00000 n -0000245873 00000 n -0000245987 00000 n -0000246105 00000 n -0000246218 00000 n -0000478180 00000 n -0000250835 00000 n -0000250721 00000 n -0000247892 00000 n -0000248047 00000 n -0000248236 00000 n -0000248435 00000 n -0000248624 00000 n -0000248823 00000 n -0000249022 00000 n -0000249220 00000 n -0000249418 00000 n -0000249617 00000 n -0000249815 00000 n -0000250013 00000 n -0000250212 00000 n -0000250410 00000 n -0000252747 00000 n -0000251414 00000 n -0000247649 00000 n -0000246390 00000 n -0000250608 00000 n -0000251068 00000 n -0000251239 00000 n -0000253594 00000 n -0000253242 00000 n -0000254068 00000 n -0000253949 00000 n -0000253831 00000 n -0000253712 00000 n -0000254186 00000 n -0000253361 00000 n -0000252938 00000 n -0000255485 00000 n -0000254247 00000 n -0000252600 00000 n -0000251525 00000 n -0000253129 00000 n -0000476557 00000 n -0000255641 00000 n -0000255838 00000 n -0000256036 00000 n -0000256234 00000 n -0000256425 00000 n -0000256616 00000 n -0000257510 00000 n -0000255298 00000 n -0000254358 00000 n -0000256771 00000 n -0000256998 00000 n -0000257168 00000 n -0000257282 00000 n -0000257396 00000 n -0000258195 00000 n -0000262097 00000 n -0000263599 00000 n -0000266824 00000 n -0000262391 00000 n -0000258061 00000 n -0000257623 00000 n -0000262164 00000 n -0000259007 00000 n -0000259137 00000 n -0000259277 00000 n -0000259548 00000 n -0000259934 00000 n -0000260138 00000 n -0000260159 00000 n -0000262075 00000 n -0000266891 00000 n -0000267058 00000 n -0000267222 00000 n -0000267385 00000 n -0000267548 00000 n -0000267712 00000 n -0000267903 00000 n -0000268094 00000 n -0000268317 00000 n -0000268540 00000 n -0000268763 00000 n -0000268986 00000 n -0000269209 00000 n -0000269432 00000 n -0000269654 00000 n -0000269877 00000 n -0000270100 00000 n -0000270323 00000 n -0000270545 00000 n -0000272497 00000 n -0000272688 00000 n -0000272910 00000 n -0000273133 00000 n -0000270994 00000 n -0000263301 00000 n -0000262517 00000 n -0000270767 00000 n -0000270823 00000 n -0000270880 00000 n -0000270937 00000 n -0000264250 00000 n -0000264380 00000 n -0000264520 00000 n -0000264759 00000 n -0000265113 00000 n -0000265317 00000 n -0000265338 00000 n -0000266802 00000 n -0000289071 00000 n -0000292351 00000 n -0000292467 00000 n -0000292530 00000 n -0000292593 00000 n -0000292655 00000 n -0000292718 00000 n -0000292781 00000 n -0000292844 00000 n -0000292907 00000 n -0000292970 00000 n -0000293033 00000 n -0000293096 00000 n -0000293159 00000 n -0000273356 00000 n -0000273578 00000 n -0000273801 00000 n -0000273992 00000 n -0000274215 00000 n -0000274438 00000 n -0000274660 00000 n -0000274883 00000 n -0000275105 00000 n -0000275328 00000 n -0000275519 00000 n -0000275742 00000 n -0000275965 00000 n -0000276188 00000 n -0000276411 00000 n -0000276634 00000 n -0000276857 00000 n -0000277047 00000 n -0000277269 00000 n -0000277492 00000 n -0000277715 00000 n -0000277938 00000 n -0000278160 00000 n -0000278383 00000 n -0000278606 00000 n -0000278828 00000 n -0000279051 00000 n -0000279274 00000 n -0000279497 00000 n -0000279718 00000 n -0000279941 00000 n -0000280164 00000 n -0000280386 00000 n -0000280609 00000 n -0000280832 00000 n -0000281055 00000 n -0000283253 00000 n -0000283441 00000 n -0000283630 00000 n -0000281334 00000 n -0000272046 00000 n -0000271120 00000 n -0000281278 00000 n -0000477409 00000 n -0000478298 00000 n -0000289361 00000 n -0000291606 00000 n -0000291732 00000 n -0000291795 00000 n -0000296843 00000 n -0000296906 00000 n -0000296969 00000 n -0000297032 00000 n -0000297095 00000 n -0000297158 00000 n -0000291858 00000 n -0000291974 00000 n -0000292037 00000 n -0000292100 00000 n -0000292163 00000 n -0000292225 00000 n -0000292288 00000 n -0000297337 00000 n -0000297463 00000 n -0000297527 00000 n -0000297591 00000 n -0000300317 00000 n -0000300568 00000 n -0000300631 00000 n -0000300695 00000 n -0000300759 00000 n -0000303780 00000 n -0000303843 00000 n -0000303907 00000 n -0000304034 00000 n -0000304098 00000 n -0000283818 00000 n -0000284008 00000 n -0000284199 00000 n -0000284390 00000 n -0000284581 00000 n -0000284773 00000 n -0000284965 00000 n -0000285128 00000 n -0000285292 00000 n -0000285455 00000 n -0000285620 00000 n -0000285811 00000 n -0000286003 00000 n -0000286194 00000 n -0000286529 00000 n -0000286720 00000 n -0000286912 00000 n -0000287102 00000 n -0000287293 00000 n -0000287485 00000 n -0000287676 00000 n -0000288059 00000 n -0000288250 00000 n -0000288442 00000 n -0000289423 00000 n -0000282852 00000 n -0000281432 00000 n -0000288839 00000 n -0000288897 00000 n -0000286362 00000 n -0000287868 00000 n -0000288641 00000 n -0000477051 00000 n -0000307707 00000 n -0000291325 00000 n -0000293279 00000 n -0000291182 00000 n -0000289549 00000 n -0000291548 00000 n -0000295507 00000 n -0000295699 00000 n -0000295891 00000 n -0000296114 00000 n -0000296339 00000 n -0000296502 00000 n -0000297655 00000 n -0000295319 00000 n -0000293379 00000 n -0000296727 00000 n -0000300079 00000 n -0000300823 00000 n -0000299936 00000 n -0000297755 00000 n -0000300259 00000 n -0000303200 00000 n -0000303364 00000 n -0000303530 00000 n -0000304451 00000 n -0000303039 00000 n -0000300923 00000 n -0000303722 00000 n -0000306796 00000 n -0000306993 00000 n -0000307157 00000 n -0000307322 00000 n -0000307486 00000 n -0000307824 00000 n -0000306616 00000 n -0000304564 00000 n -0000307649 00000 n -0000478421 00000 n -0000309711 00000 n -0000309879 00000 n -0000310071 00000 n -0000310263 00000 n -0000310455 00000 n -0000313314 00000 n -0000313506 00000 n -0000311051 00000 n -0000309531 00000 n -0000307937 00000 n -0000310647 00000 n -0000313698 00000 n -0000313887 00000 n -0000314310 00000 n -0000313143 00000 n -0000311164 00000 n -0000314079 00000 n -0000315940 00000 n -0000321128 00000 n -0000321196 00000 n -0000321383 00000 n -0000321955 00000 n -0000315771 00000 n -0000314437 00000 n -0000321548 00000 n -0000321664 00000 n -0000317417 00000 n -0000317548 00000 n -0000317691 00000 n -0000317996 00000 n -0000318420 00000 n -0000318626 00000 n -0000318648 00000 n -0000321105 00000 n -0000323556 00000 n -0000323707 00000 n -0000323857 00000 n -0000324008 00000 n -0000324159 00000 n -0000324310 00000 n -0000324461 00000 n -0000324612 00000 n -0000324763 00000 n -0000324913 00000 n -0000325064 00000 n -0000325215 00000 n -0000325366 00000 n -0000325517 00000 n -0000325668 00000 n -0000325818 00000 n -0000325969 00000 n -0000326120 00000 n -0000326271 00000 n -0000326422 00000 n -0000326573 00000 n -0000326724 00000 n -0000326874 00000 n -0000327024 00000 n -0000327174 00000 n -0000327324 00000 n -0000327475 00000 n -0000327623 00000 n -0000327774 00000 n -0000327925 00000 n -0000328076 00000 n -0000328227 00000 n -0000328378 00000 n -0000328528 00000 n -0000328678 00000 n -0000328827 00000 n -0000328978 00000 n -0000329129 00000 n -0000329278 00000 n -0000329429 00000 n -0000329579 00000 n -0000329730 00000 n -0000329881 00000 n -0000330032 00000 n -0000330183 00000 n -0000330333 00000 n -0000330482 00000 n -0000330633 00000 n -0000330784 00000 n -0000330934 00000 n -0000331085 00000 n -0000331236 00000 n -0000331387 00000 n -0000331538 00000 n -0000331689 00000 n -0000331839 00000 n -0000331990 00000 n -0000332136 00000 n -0000332285 00000 n -0000332436 00000 n -0000334840 00000 n -0000332644 00000 n -0000322881 00000 n -0000322110 00000 n -0000332586 00000 n -0000334990 00000 n -0000335141 00000 n -0000335292 00000 n -0000335442 00000 n -0000335593 00000 n -0000335743 00000 n -0000335894 00000 n -0000336045 00000 n -0000336195 00000 n -0000336346 00000 n -0000336497 00000 n -0000336647 00000 n -0000336798 00000 n -0000336949 00000 n -0000337100 00000 n -0000337251 00000 n -0000337402 00000 n -0000337553 00000 n -0000337704 00000 n -0000337855 00000 n -0000338006 00000 n -0000338157 00000 n -0000338307 00000 n -0000338457 00000 n -0000338607 00000 n -0000338758 00000 n -0000338909 00000 n -0000339060 00000 n -0000339211 00000 n -0000339362 00000 n -0000339513 00000 n -0000339664 00000 n -0000339815 00000 n -0000339965 00000 n -0000340116 00000 n -0000340267 00000 n -0000340418 00000 n -0000340568 00000 n -0000340718 00000 n -0000340868 00000 n -0000341019 00000 n -0000341170 00000 n -0000341321 00000 n -0000341472 00000 n -0000341623 00000 n -0000341773 00000 n -0000341924 00000 n -0000342074 00000 n -0000342224 00000 n -0000342373 00000 n -0000342524 00000 n -0000342675 00000 n -0000342825 00000 n -0000342976 00000 n -0000343127 00000 n -0000343278 00000 n -0000343429 00000 n -0000343580 00000 n +0000256895 00000 n +0000306272 00000 n +0000193515 00000 n +0000303020 00000 n +0000205171 00000 n +0000299663 00000 n +0000205059 00000 n +0000302789 00000 n +0000192302 00000 n +0000192460 00000 n +0000192614 00000 n +0000192802 00000 n +0000192964 00000 n +0000193154 00000 n +0000193627 00000 n +0000192123 00000 n +0000190300 00000 n +0000193345 00000 n +0000193401 00000 n +0000193458 00000 n +0000199078 00000 n +0000196369 00000 n +0000199191 00000 n +0000296184 00000 n +0000195959 00000 n +0000196123 00000 n +0000196595 00000 n +0000195812 00000 n +0000193725 00000 n +0000196313 00000 n +0000196482 00000 n +0000231988 00000 n +0000198528 00000 n +0000198719 00000 n +0000199303 00000 n +0000198381 00000 n +0000196693 00000 n +0000198909 00000 n +0000198965 00000 n +0000201846 00000 n +0000202003 00000 n +0000202227 00000 n +0000202608 00000 n +0000202773 00000 n +0000202937 00000 n +0000203160 00000 n +0000203351 00000 n +0000203550 00000 n +0000203748 00000 n +0000203939 00000 n +0000204129 00000 n +0000204320 00000 n +0000204510 00000 n +0000204700 00000 n +0000205345 00000 n +0000201587 00000 n +0000199401 00000 n +0000204890 00000 n +0000204946 00000 n +0000202418 00000 n +0000205284 00000 n +0000462070 00000 n +0000295938 00000 n +0000244561 00000 n +0000280696 00000 n +0000284836 00000 n +0000247205 00000 n +0000244960 00000 n +0000302904 00000 n +0000285322 00000 n +0000207540 00000 n +0000207764 00000 n +0000207988 00000 n +0000208369 00000 n +0000208543 00000 n +0000208767 00000 n +0000208990 00000 n +0000209886 00000 n +0000207337 00000 n +0000205443 00000 n +0000209435 00000 n +0000209547 00000 n +0000208179 00000 n +0000209660 00000 n +0000209773 00000 n +0000209213 00000 n +0000289118 00000 n +0000289428 00000 n +0000224711 00000 n +0000289613 00000 n +0000289304 00000 n +0000289551 00000 n +0000212146 00000 n +0000212537 00000 n +0000212007 00000 n +0000209984 00000 n +0000212368 00000 n +0000212424 00000 n +0000289490 00000 n +0000215260 00000 n +0000214912 00000 n +0000212635 00000 n +0000215031 00000 n +0000215087 00000 n +0000215199 00000 n +0000217038 00000 n +0000216576 00000 n +0000215358 00000 n +0000216695 00000 n +0000216807 00000 n +0000216925 00000 n +0000218420 00000 n +0000218132 00000 n +0000217136 00000 n +0000218251 00000 n +0000218307 00000 n +0000220978 00000 n +0000221604 00000 n +0000220839 00000 n +0000218505 00000 n +0000221202 00000 n +0000221315 00000 n +0000221372 00000 n +0000460368 00000 n +0000221486 00000 n +0000462188 00000 n +0000289675 00000 n +0000224829 00000 n +0000224417 00000 n +0000221715 00000 n +0000224536 00000 n +0000224592 00000 n +0000460513 00000 n +0000225613 00000 n +0000225777 00000 n +0000225931 00000 n +0000226093 00000 n +0000226247 00000 n +0000226414 00000 n +0000226568 00000 n +0000226733 00000 n +0000226887 00000 n +0000227050 00000 n +0000227374 00000 n +0000225402 00000 n +0000224939 00000 n +0000227204 00000 n +0000235014 00000 n +0000235532 00000 n +0000248031 00000 n +0000227862 00000 n +0000227687 00000 n +0000227459 00000 n +0000227806 00000 n +0000228476 00000 n +0000228633 00000 n +0000228957 00000 n +0000228329 00000 n +0000227934 00000 n +0000228787 00000 n +0000229443 00000 n +0000229268 00000 n +0000229042 00000 n +0000229387 00000 n +0000230506 00000 n +0000230703 00000 n +0000230901 00000 n +0000231099 00000 n +0000231296 00000 n +0000231494 00000 n +0000231684 00000 n +0000232684 00000 n +0000230319 00000 n +0000229515 00000 n +0000231875 00000 n +0000232102 00000 n +0000460657 00000 n +0000232273 00000 n +0000232387 00000 n +0000232505 00000 n +0000232624 00000 n +0000462306 00000 n +0000234896 00000 n +0000280458 00000 n +0000233887 00000 n +0000234042 00000 n +0000234239 00000 n +0000234436 00000 n +0000234627 00000 n +0000237156 00000 n +0000237357 00000 n +0000237558 00000 n +0000237759 00000 n +0000235646 00000 n +0000233716 00000 n +0000232808 00000 n +0000234783 00000 n +0000235128 00000 n +0000235299 00000 n +0000235413 00000 n +0000237960 00000 n +0000238161 00000 n +0000238361 00000 n +0000238560 00000 n +0000239872 00000 n +0000236961 00000 n +0000235770 00000 n +0000238760 00000 n +0000238816 00000 n +0000238987 00000 n +0000239101 00000 n +0000239219 00000 n +0000239338 00000 n +0000239455 00000 n +0000239574 00000 n +0000239693 00000 n +0000239811 00000 n +0000241538 00000 n +0000241694 00000 n +0000241883 00000 n +0000242082 00000 n +0000242271 00000 n +0000242470 00000 n +0000242669 00000 n +0000242868 00000 n +0000243067 00000 n +0000243266 00000 n +0000243464 00000 n +0000243662 00000 n +0000243861 00000 n +0000244059 00000 n +0000244257 00000 n +0000245258 00000 n +0000241287 00000 n +0000239957 00000 n +0000244448 00000 n +0000244675 00000 n +0000244846 00000 n +0000245079 00000 n +0000460802 00000 n +0000245197 00000 n +0000247319 00000 n +0000247793 00000 n +0000247674 00000 n +0000247555 00000 n +0000247437 00000 n +0000247912 00000 n +0000246746 00000 n +0000246937 00000 n +0000249170 00000 n +0000248145 00000 n +0000246599 00000 n +0000245395 00000 n +0000247092 00000 n +0000249368 00000 n +0000249566 00000 n +0000249764 00000 n +0000249955 00000 n +0000250146 00000 n +0000250881 00000 n +0000248991 00000 n +0000248282 00000 n +0000250302 00000 n +0000250358 00000 n +0000250529 00000 n +0000250643 00000 n +0000250762 00000 n +0000251800 00000 n +0000255702 00000 n +0000255769 00000 n +0000255936 00000 n +0000256100 00000 n +0000256263 00000 n +0000256427 00000 n +0000256592 00000 n +0000258549 00000 n +0000257123 00000 n +0000251606 00000 n +0000250967 00000 n +0000256782 00000 n +0000257009 00000 n +0000257066 00000 n +0000462424 00000 n +0000252612 00000 n +0000252742 00000 n +0000252882 00000 n +0000253153 00000 n +0000253539 00000 n +0000253743 00000 n +0000253764 00000 n +0000255680 00000 n +0000280287 00000 n +0000258740 00000 n +0000258963 00000 n +0000259186 00000 n +0000259407 00000 n +0000259630 00000 n +0000259853 00000 n +0000260072 00000 n +0000260295 00000 n +0000260518 00000 n +0000260741 00000 n +0000260964 00000 n +0000261187 00000 n +0000261410 00000 n +0000261601 00000 n +0000261824 00000 n +0000262046 00000 n +0000262269 00000 n +0000262492 00000 n +0000262715 00000 n +0000262906 00000 n +0000263129 00000 n +0000263350 00000 n +0000263573 00000 n +0000263796 00000 n +0000264016 00000 n +0000264239 00000 n +0000264430 00000 n +0000264653 00000 n +0000264876 00000 n +0000265098 00000 n +0000265321 00000 n +0000265544 00000 n +0000265767 00000 n +0000265957 00000 n +0000266180 00000 n +0000266403 00000 n +0000266626 00000 n +0000266849 00000 n +0000267071 00000 n +0000269295 00000 n +0000269518 00000 n +0000269741 00000 n +0000267405 00000 n +0000258098 00000 n +0000257262 00000 n +0000267293 00000 n +0000267349 00000 n +0000281366 00000 n +0000281480 00000 n +0000284155 00000 n +0000284217 00000 n +0000284279 00000 n +0000284341 00000 n +0000284403 00000 n +0000284465 00000 n +0000284527 00000 n +0000284589 00000 n +0000284651 00000 n +0000284713 00000 n +0000284774 00000 n +0000280572 00000 n +0000280634 00000 n +0000280758 00000 n +0000280820 00000 n +0000284950 00000 n +0000285012 00000 n +0000285074 00000 n +0000285136 00000 n +0000285198 00000 n +0000285260 00000 n +0000280882 00000 n +0000280995 00000 n +0000281057 00000 n +0000281119 00000 n +0000281181 00000 n +0000281243 00000 n +0000281305 00000 n +0000285435 00000 n +0000289180 00000 n +0000289242 00000 n +0000289366 00000 n +0000269964 00000 n +0000270187 00000 n +0000270410 00000 n +0000270633 00000 n +0000270856 00000 n +0000271079 00000 n +0000271302 00000 n +0000271525 00000 n +0000271748 00000 n +0000271971 00000 n +0000272194 00000 n +0000272417 00000 n +0000272607 00000 n +0000272798 00000 n +0000272988 00000 n +0000273178 00000 n +0000273369 00000 n +0000273560 00000 n +0000273750 00000 n +0000273941 00000 n +0000274132 00000 n +0000274295 00000 n +0000274459 00000 n +0000274622 00000 n +0000274786 00000 n +0000274976 00000 n +0000275167 00000 n +0000275357 00000 n +0000275690 00000 n +0000275880 00000 n +0000276071 00000 n +0000276260 00000 n +0000276449 00000 n +0000276638 00000 n +0000276826 00000 n +0000277205 00000 n +0000277395 00000 n +0000277699 00000 n +0000268828 00000 n +0000267490 00000 n +0000277586 00000 n +0000461653 00000 n +0000277642 00000 n +0000275524 00000 n +0000277015 00000 n +0000292266 00000 n +0000292329 00000 n +0000292391 00000 n +0000295751 00000 n +0000295814 00000 n +0000295876 00000 n +0000296001 00000 n +0000296063 00000 n +0000299779 00000 n +0000279501 00000 n +0000279896 00000 n +0000281541 00000 n +0000279346 00000 n +0000277810 00000 n +0000280118 00000 n +0000279699 00000 n +0000461296 00000 n +0000283493 00000 n +0000283684 00000 n +0000283875 00000 n +0000288274 00000 n +0000288497 00000 n +0000285497 00000 n +0000283338 00000 n +0000281652 00000 n +0000284099 00000 n +0000288659 00000 n +0000288883 00000 n +0000289737 00000 n +0000288111 00000 n +0000285595 00000 n +0000289062 00000 n +0000292454 00000 n +0000292085 00000 n +0000289835 00000 n +0000292208 00000 n +0000462542 00000 n +0000295172 00000 n +0000295336 00000 n +0000295502 00000 n +0000296300 00000 n +0000295010 00000 n +0000292553 00000 n +0000295693 00000 n +0000298750 00000 n +0000298947 00000 n +0000299112 00000 n +0000299276 00000 n +0000299440 00000 n +0000299836 00000 n +0000298570 00000 n +0000296412 00000 n +0000299605 00000 n +0000301738 00000 n +0000301906 00000 n +0000302097 00000 n +0000302289 00000 n +0000302481 00000 n +0000303077 00000 n +0000301558 00000 n +0000299948 00000 n +0000302673 00000 n +0000305391 00000 n +0000305582 00000 n +0000305774 00000 n +0000305964 00000 n +0000306388 00000 n +0000305220 00000 n +0000303189 00000 n +0000306156 00000 n +0000307052 00000 n +0000306871 00000 n +0000306513 00000 n +0000306994 00000 n +0000308597 00000 n +0000308748 00000 n +0000308898 00000 n +0000309049 00000 n +0000309200 00000 n +0000309351 00000 n +0000309502 00000 n +0000309653 00000 n +0000309804 00000 n +0000309954 00000 n +0000310105 00000 n +0000310256 00000 n +0000310407 00000 n +0000310558 00000 n +0000310709 00000 n +0000310859 00000 n +0000311010 00000 n +0000311161 00000 n +0000311312 00000 n +0000311463 00000 n +0000311614 00000 n +0000311765 00000 n +0000311915 00000 n +0000312065 00000 n +0000312215 00000 n +0000312365 00000 n +0000312516 00000 n +0000312664 00000 n +0000312815 00000 n +0000312966 00000 n +0000313117 00000 n +0000313268 00000 n +0000313419 00000 n +0000313569 00000 n +0000313719 00000 n +0000313868 00000 n +0000314019 00000 n +0000314170 00000 n +0000314319 00000 n +0000314470 00000 n +0000314620 00000 n +0000314771 00000 n +0000314922 00000 n +0000315073 00000 n +0000315224 00000 n +0000315374 00000 n +0000315523 00000 n +0000315674 00000 n +0000315825 00000 n +0000315975 00000 n +0000316126 00000 n +0000316277 00000 n +0000316428 00000 n +0000316579 00000 n +0000316730 00000 n +0000316880 00000 n +0000317031 00000 n +0000317177 00000 n +0000317326 00000 n +0000317477 00000 n +0000319882 00000 n +0000317685 00000 n +0000307922 00000 n +0000307138 00000 n +0000317627 00000 n +0000462667 00000 n +0000320032 00000 n +0000320183 00000 n +0000320334 00000 n +0000320484 00000 n +0000320634 00000 n +0000320784 00000 n +0000320935 00000 n +0000321085 00000 n +0000321235 00000 n +0000321386 00000 n +0000321537 00000 n +0000321688 00000 n +0000321838 00000 n +0000321988 00000 n +0000322138 00000 n +0000322288 00000 n +0000322439 00000 n +0000322590 00000 n +0000322741 00000 n +0000322892 00000 n +0000323043 00000 n +0000323194 00000 n +0000323345 00000 n +0000323496 00000 n +0000323647 00000 n +0000323798 00000 n +0000323949 00000 n +0000324100 00000 n +0000324250 00000 n +0000324400 00000 n +0000324550 00000 n +0000324701 00000 n +0000324851 00000 n +0000325002 00000 n +0000325152 00000 n +0000325302 00000 n +0000325453 00000 n +0000325604 00000 n +0000325754 00000 n +0000325903 00000 n +0000326052 00000 n +0000326202 00000 n +0000326353 00000 n +0000326504 00000 n +0000326654 00000 n +0000326805 00000 n +0000326955 00000 n +0000327106 00000 n +0000327256 00000 n +0000327407 00000 n +0000327557 00000 n +0000327706 00000 n +0000327857 00000 n +0000328007 00000 n +0000328157 00000 n +0000328308 00000 n +0000328459 00000 n +0000328610 00000 n +0000328761 00000 n +0000328912 00000 n +0000329063 00000 n +0000329214 00000 n +0000329364 00000 n +0000329515 00000 n +0000329665 00000 n +0000329815 00000 n +0000329966 00000 n +0000330116 00000 n +0000330266 00000 n +0000330417 00000 n +0000330568 00000 n +0000330719 00000 n +0000330869 00000 n +0000331020 00000 n +0000331171 00000 n +0000331320 00000 n +0000331469 00000 n +0000331619 00000 n +0000331770 00000 n +0000331920 00000 n +0000332070 00000 n +0000332220 00000 n +0000334003 00000 n +0000332428 00000 n +0000319000 00000 n +0000317771 00000 n +0000332370 00000 n +0000334154 00000 n +0000334305 00000 n +0000334456 00000 n +0000334606 00000 n +0000334756 00000 n +0000334906 00000 n +0000335057 00000 n +0000335208 00000 n +0000335359 00000 n +0000335510 00000 n +0000335661 00000 n +0000335812 00000 n +0000335963 00000 n +0000336114 00000 n +0000336265 00000 n +0000336416 00000 n +0000336567 00000 n +0000336717 00000 n +0000336867 00000 n +0000337018 00000 n +0000337169 00000 n +0000337320 00000 n +0000337469 00000 n +0000337619 00000 n +0000337769 00000 n +0000337919 00000 n +0000338068 00000 n +0000338218 00000 n +0000338368 00000 n +0000338519 00000 n +0000338670 00000 n +0000338821 00000 n +0000338972 00000 n +0000339123 00000 n +0000339274 00000 n +0000339422 00000 n +0000339573 00000 n +0000339724 00000 n +0000339875 00000 n +0000340025 00000 n +0000340175 00000 n +0000340326 00000 n +0000340477 00000 n +0000340628 00000 n +0000340837 00000 n +0000333463 00000 n +0000332514 00000 n +0000340779 00000 n +0000459888 00000 n +0000340923 00000 n +0000341251 00000 n +0000341575 00000 n +0000341601 00000 n +0000342202 00000 n +0000342286 00000 n +0000342460 00000 n +0000342852 00000 n 0000343731 00000 n -0000343882 00000 n -0000344032 00000 n -0000344183 00000 n -0000344334 00000 n -0000344484 00000 n -0000344635 00000 n -0000344784 00000 n -0000344935 00000 n -0000345085 00000 n -0000345236 00000 n -0000345387 00000 n -0000345537 00000 n -0000345688 00000 n -0000345839 00000 n -0000345989 00000 n -0000346138 00000 n -0000346289 00000 n -0000346439 00000 n -0000346590 00000 n -0000346740 00000 n -0000346890 00000 n -0000347040 00000 n -0000347191 00000 n -0000348995 00000 n -0000347399 00000 n -0000333958 00000 n -0000332730 00000 n -0000347341 00000 n -0000349146 00000 n -0000349297 00000 n -0000349448 00000 n -0000349599 00000 n -0000349750 00000 n -0000349901 00000 n -0000350052 00000 n -0000350202 00000 n -0000350352 00000 n -0000350503 00000 n -0000350653 00000 n -0000350804 00000 n -0000350955 00000 n -0000351106 00000 n -0000351257 00000 n -0000351408 00000 n -0000351558 00000 n -0000351708 00000 n -0000351859 00000 n -0000352010 00000 n -0000352160 00000 n -0000352311 00000 n -0000352462 00000 n -0000352613 00000 n -0000352763 00000 n -0000352913 00000 n -0000353063 00000 n -0000353214 00000 n -0000353365 00000 n -0000353516 00000 n -0000353667 00000 n -0000353818 00000 n -0000353969 00000 n -0000354120 00000 n -0000354271 00000 n -0000354422 00000 n -0000354572 00000 n -0000354723 00000 n -0000354873 00000 n -0000355024 00000 n -0000355173 00000 n -0000355322 00000 n -0000355472 00000 n -0000355622 00000 n -0000355771 00000 n -0000355980 00000 n -0000348446 00000 n -0000347485 00000 n -0000355922 00000 n -0000478546 00000 n -0000475636 00000 n -0000356066 00000 n -0000356394 00000 n -0000356718 00000 n -0000356744 00000 n -0000357345 00000 n -0000357429 00000 n -0000357603 00000 n -0000357995 00000 n -0000358874 00000 n -0000359449 00000 n -0000369659 00000 n -0000369929 00000 n -0000379312 00000 n -0000379582 00000 n -0000386776 00000 n -0000387015 00000 n -0000394044 00000 n -0000394276 00000 n -0000413394 00000 n -0000413984 00000 n -0000430608 00000 n -0000431089 00000 n -0000444064 00000 n -0000444431 00000 n -0000464691 00000 n -0000465270 00000 n -0000475338 00000 n -0000478626 00000 n -0000478746 00000 n -0000478844 00000 n -0000478917 00000 n -0000488807 00000 n -0000489064 00000 n -0000489393 00000 n -0000489588 00000 n -0000489856 00000 n -0000490102 00000 n +0000344306 00000 n +0000354516 00000 n +0000354786 00000 n +0000364169 00000 n +0000364439 00000 n +0000371633 00000 n +0000371872 00000 n +0000378901 00000 n +0000379133 00000 n +0000397867 00000 n +0000398437 00000 n +0000415061 00000 n +0000415542 00000 n +0000428341 00000 n +0000428683 00000 n +0000448943 00000 n +0000449522 00000 n +0000459590 00000 n +0000462765 00000 n +0000462885 00000 n +0000462974 00000 n +0000463047 00000 n +0000472335 00000 n +0000472689 00000 n +0000472852 00000 n +0000473095 00000 n +0000473332 00000 n +0000473600 00000 n +0000473938 00000 n +0000474536 00000 n +0000475200 00000 n +0000475897 00000 n +0000476660 00000 n +0000477423 00000 n +0000478087 00000 n +0000478850 00000 n +0000479613 00000 n +0000480277 00000 n +0000480974 00000 n +0000481303 00000 n +0000481500 00000 n +0000481669 00000 n +0000481838 00000 n +0000482009 00000 n +0000482179 00000 n +0000482356 00000 n +0000482526 00000 n +0000482706 00000 n +0000482901 00000 n +0000483101 00000 n +0000483298 00000 n +0000483499 00000 n +0000483702 00000 n +0000484135 00000 n +0000484628 00000 n +0000485207 00000 n +0000485740 00000 n +0000486303 00000 n +0000486749 00000 n +0000486989 00000 n +0000487230 00000 n +0000487473 00000 n +0000487726 00000 n +0000488009 00000 n +0000488292 00000 n +0000488577 00000 n +0000488860 00000 n +0000489143 00000 n +0000489426 00000 n +0000489677 00000 n +0000489836 00000 n +0000490067 00000 n +0000490265 00000 n 0000490379 00000 n -0000490811 00000 n -0000491574 00000 n -0000492238 00000 n -0000492968 00000 n -0000493731 00000 n -0000494429 00000 n -0000495196 00000 n -0000495964 00000 n -0000496664 00000 n -0000497328 00000 n -0000497728 00000 n -0000497907 00000 n -0000498131 00000 n -0000498302 00000 n -0000498472 00000 n -0000498643 00000 n -0000498814 00000 n -0000498991 00000 n -0000499166 00000 n -0000499340 00000 n -0000499538 00000 n -0000499733 00000 n -0000499934 00000 n -0000500131 00000 n -0000500334 00000 n -0000500537 00000 n -0000501024 00000 n -0000501485 00000 n -0000502064 00000 n -0000502559 00000 n -0000503122 00000 n -0000503493 00000 n -0000503731 00000 n -0000503974 00000 n -0000504217 00000 n -0000504460 00000 n -0000504743 00000 n -0000505026 00000 n -0000505312 00000 n -0000505595 00000 n -0000505878 00000 n -0000506161 00000 n -0000506444 00000 n -0000506567 00000 n -0000506704 00000 n -0000506901 00000 n -0000507089 00000 n -0000507209 00000 n -0000507329 00000 n -0000507498 00000 n -0000507672 00000 n -0000507816 00000 n -0000507924 00000 n -0000508098 00000 n -0000508250 00000 n -0000508353 00000 n -0000508393 00000 n -0000508574 00000 n +0000490498 00000 n +0000490628 00000 n +0000490768 00000 n +0000490903 00000 n +0000491031 00000 n +0000491135 00000 n +0000491231 00000 n +0000491271 00000 n +0000491452 00000 n trailer -<< /Size 1417 -/Root 1415 0 R -/Info 1416 0 R -/ID [<6568D5E6D3D414DEC0C8E7A6930872CF> <6568D5E6D3D414DEC0C8E7A6930872CF>] >> +<< /Size 1336 +/Root 1334 0 R +/Info 1335 0 R +/ID [ ] >> startxref -508901 +491779 %%EOF diff --git a/libAACdec/include/aacdecoder_lib.h b/libAACdec/include/aacdecoder_lib.h index 79b4ba1..60efe8d 100644 --- a/libAACdec/include/aacdecoder_lib.h +++ b/libAACdec/include/aacdecoder_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -504,7 +504,8 @@ typedef struct INT aacSamplesPerFrame; /*!< Samples per frame for the AAC core (from ASC). \n 1024 or 960 for AAC-LC \n 512 or 480 for AAC-LD and AAC-ELD */ - + INT aacNumChannels; /*!< The number of audio channels after AAC core processing (before PS or MPS processing). + CAUTION: This are not the final number of output channels! */ AUDIO_OBJECT_TYPE extAot; /*!< Extension Audio Object Type (from ASC) */ INT extSamplingRate; /*!< Extension sampling rate in Hz (from ASC) */ diff --git a/libAACdec/src/aac_ram.cpp b/libAACdec/src/aac_ram.cpp index 75c9a94..a38f57c 100644 --- a/libAACdec/src/aac_ram.cpp +++ b/libAACdec/src/aac_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aac_ram.h b/libAACdec/src/aac_ram.h index 2130ca1..4527e27 100644 --- a/libAACdec/src/aac_ram.h +++ b/libAACdec/src/aac_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aac_rom.cpp b/libAACdec/src/aac_rom.cpp index dd51919..fa04c42 100644 --- a/libAACdec/src/aac_rom.cpp +++ b/libAACdec/src/aac_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aac_rom.h b/libAACdec/src/aac_rom.h index beec2ee..536d184 100644 --- a/libAACdec/src/aac_rom.h +++ b/libAACdec/src/aac_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_drc.cpp b/libAACdec/src/aacdec_drc.cpp index ebc6975..2666454 100644 --- a/libAACdec/src/aacdec_drc.cpp +++ b/libAACdec/src/aacdec_drc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -135,10 +135,13 @@ void aacDecoder_drcInit ( /* init params */ pParams = &self->params; pParams->bsDelayEnable = 0; - pParams->cut = FL2FXCONST_DBL(0.0f); - pParams->boost = FL2FXCONST_DBL(0.0f); + pParams->cut = FL2FXCONST_DBL(0.0f); + 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->expiryFrame = AACDEC_DRC_DFLT_EXPIRY_FRAMES; + pParams->applyHeavyCompression = 0; /* initial program ref level = target ref level */ self->progRefLevel = pParams->targetRefLevel; @@ -193,7 +196,9 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } - self->params.cut = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + self->params.usrCut = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + if (self->params.applyHeavyCompression == 0) + self->params.cut = self->params.usrCut; break; case DRC_BOOST_SCALE: /* set boost factor */ @@ -204,7 +209,9 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } - self->params.boost = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + self->params.usrBoost = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + if (self->params.applyHeavyCompression == 0) + self->params.boost = self->params.usrBoost; break; case TARGET_REF_LEVEL: if ( value > MAX_REFERENCE_LEVEL @@ -220,9 +227,11 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( else { /* ref_level must be between 0 and MAX_REFERENCE_LEVEL, inclusive */ self->digitalNorm = 1; - self->params.targetRefLevel = value; - self->progRefLevel = (SCHAR)value; /* Set the program reference level equal to the target - level according to 4.5.2.7.3 of ISO/IEC 14496-3. */ + if (self->params.targetRefLevel != (SCHAR)value) { + self->params.targetRefLevel = (SCHAR)value; + self->progRefLevel = (SCHAR)value; /* Always set the program reference level equal to the + target level according to 4.5.2.7.3 of ISO/IEC 14496-3. */ + } } break; case APPLY_HEAVY_COMPRESSION: @@ -232,7 +241,19 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } - self->params.applyHeavyCompression = (UCHAR)value; + if (self->params.applyHeavyCompression != (UCHAR)value) { + if (value == 1) { + /* Disable scaling of DRC values by setting the max values */ + self->params.boost = FL2FXCONST_DBL(1.0f/(float)(1<params.cut = FL2FXCONST_DBL(1.0f/(float)(1<params.boost = self->params.usrBoost; + self->params.cut = self->params.usrCut; + } + /* Store new parameter value */ + self->params.applyHeavyCompression = (UCHAR)value; + } break; case DRC_BS_DELAY: if (value < 0 || value > 1) { @@ -473,7 +494,7 @@ static int aacDecoder_drcParse ( } } else { - pDrcBs->channelData.bandTop[0] = 255; + pDrcBs->channelData.bandTop[0] = (1024 >> 2) - 1; /* ... comprising the whole spectrum. */; } pDrcBs->channelData.numBands = numBands; @@ -627,10 +648,17 @@ static int aacDecoder_drcExtractAndMap ( { CDrcPayload threadBs[MAX_DRC_THREADS]; CDrcPayload *validThreadBs[MAX_DRC_THREADS]; + CDrcParams *pParams; UINT backupBsPosition; int i, thread, validThreads = 0; int numExcludedChns[MAX_DRC_THREADS]; + FDK_ASSERT(self != NULL); + FDK_ASSERT(hBs != NULL); + FDK_ASSERT(pAacDecoderStaticChannelInfo != NULL); + + pParams = &self->params; + self->numThreads = 0; backupBsPosition = FDKgetValidBits(hBs); @@ -752,6 +780,7 @@ static int aacDecoder_drcExtractAndMap ( */ if (pThreadBs->progRefLevel >= 0) { self->progRefLevel = pThreadBs->progRefLevel; + self->prlExpiryCount = 0; /* Got a new value -> Reset counter */ } /* SCE, CPE and LFE */ @@ -769,6 +798,14 @@ static int aacDecoder_drcExtractAndMap ( /* CCEs not supported by now */ } + /* Increment and check expiry counter for the program reference level: */ + if ( (pParams->expiryFrame > 0) + && (self->prlExpiryCount++ > pParams->expiryFrame) ) + { /* The program reference level is too old, so set it back to the target level. */ + self->progRefLevel = pParams->targetRefLevel; + self->prlExpiryCount = 0; + } + return 0; } diff --git a/libAACdec/src/aacdec_drc.h b/libAACdec/src/aacdec_drc.h index 9c90e32..2ebae2c 100644 --- a/libAACdec/src/aacdec_drc.h +++ b/libAACdec/src/aacdec_drc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -143,6 +143,16 @@ int aacDecoder_drcProlog ( UCHAR channelMapping[], int numChannels ); +/** + * \brief Apply DRC. If SBR is present, DRC data is handed over to the SBR decoder. + * \param self AAC decoder instance + * \param pSbrDec pointer to SBR decoder instance + * \param pAacDecoderChannelInfo AAC decoder channel instance to be processed + * \param pDrcDat DRC channel data + * \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 + */ void aacDecoder_drcApply ( HANDLE_AAC_DRC self, void *pSbrDec, diff --git a/libAACdec/src/aacdec_drc_types.h b/libAACdec/src/aacdec_drc_types.h index 3871b4b..1b5cd76 100644 --- a/libAACdec/src/aacdec_drc_types.h +++ b/libAACdec/src/aacdec_drc_types.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -132,8 +132,10 @@ typedef struct typedef struct { - FIXP_DBL cut; - FIXP_DBL boost; + FIXP_DBL cut; /* The attenuation scale factor currently used. */ + FIXP_DBL usrCut; /* The latest attenuation scale factor set by user. */ + FIXP_DBL boost; /* The boost scale factor currently used. */ + FIXP_DBL usrBoost; /* The latest boost scale factor set by user. */ UINT expiryFrame; SCHAR targetRefLevel; @@ -154,6 +156,8 @@ typedef struct USHORT numThreads; /* The number of DRC data threads extracted from the found payload elements */ SCHAR progRefLevel; /* Program reference level for all channels */ + UINT prlExpiryCount; /* Counter that can be used to monitor the life time of the program reference level. */ + 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/aacdec_hcr.cpp b/libAACdec/src/aacdec_hcr.cpp index 5b86833..e314e27 100644 --- a/libAACdec/src/aacdec_hcr.cpp +++ b/libAACdec/src/aacdec_hcr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr.h b/libAACdec/src/aacdec_hcr.h index f8f3abf..6fc527b 100644 --- a/libAACdec/src/aacdec_hcr.h +++ b/libAACdec/src/aacdec_hcr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr_bit.cpp b/libAACdec/src/aacdec_hcr_bit.cpp index ab82ca3..df2685b 100644 --- a/libAACdec/src/aacdec_hcr_bit.cpp +++ b/libAACdec/src/aacdec_hcr_bit.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr_bit.h b/libAACdec/src/aacdec_hcr_bit.h index c191b1d..8994ff1 100644 --- a/libAACdec/src/aacdec_hcr_bit.h +++ b/libAACdec/src/aacdec_hcr_bit.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr_types.h b/libAACdec/src/aacdec_hcr_types.h index 54b3dbd..323ec4e 100644 --- a/libAACdec/src/aacdec_hcr_types.h +++ b/libAACdec/src/aacdec_hcr_types.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcrs.cpp b/libAACdec/src/aacdec_hcrs.cpp index 74ecb65..c0b2173 100644 --- a/libAACdec/src/aacdec_hcrs.cpp +++ b/libAACdec/src/aacdec_hcrs.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcrs.h b/libAACdec/src/aacdec_hcrs.h index 7a004c4..678ba26 100644 --- a/libAACdec/src/aacdec_hcrs.h +++ b/libAACdec/src/aacdec_hcrs.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_pns.cpp b/libAACdec/src/aacdec_pns.cpp index a3f7a78..541ef07 100644 --- a/libAACdec/src/aacdec_pns.cpp +++ b/libAACdec/src/aacdec_pns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_pns.h b/libAACdec/src/aacdec_pns.h index c07656c..fc9bdcb 100644 --- a/libAACdec/src/aacdec_pns.h +++ b/libAACdec/src/aacdec_pns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_tns.cpp b/libAACdec/src/aacdec_tns.cpp index 702196f..352f04a 100644 --- a/libAACdec/src/aacdec_tns.cpp +++ b/libAACdec/src/aacdec_tns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_tns.h b/libAACdec/src/aacdec_tns.h index 499f763..f029d96 100644 --- a/libAACdec/src/aacdec_tns.h +++ b/libAACdec/src/aacdec_tns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp index 8d3c18d..3a2a561 100644 --- a/libAACdec/src/aacdecoder.cpp +++ b/libAACdec/src/aacdecoder.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -183,7 +183,7 @@ void CAacDecoder_SyncQmfMode(HANDLE_AACDECODER self) if ( self->qmfModeCurr == NOT_DEFINED ) { if ( (IS_LOWDELAY(self->streamInfo.aot) && (self->flags & AC_MPS_PRESENT)) - || ( (self->ascChannels == 1) + || ( (self->streamInfo.aacNumChannels == 1) && ( (CAN_DO_PS(self->streamInfo.aot) && !(self->flags & AC_MPS_PRESENT)) || ( IS_USAC(self->streamInfo.aot) && (self->flags & AC_MPS_PRESENT)) ) ) ) { @@ -196,7 +196,7 @@ void CAacDecoder_SyncQmfMode(HANDLE_AACDECODER self) /* Set SBR to current QMF mode. Error does not matter. */ sbrDecoder_SetParam(self->hSbrDecoder, SBR_QMF_MODE, (self->qmfModeCurr == MODE_LP)); - self->psPossible = ((CAN_DO_PS(self->streamInfo.aot) && self->aacChannels == 1 && ! (self->flags & AC_MPS_PRESENT))) && self->qmfModeCurr == MODE_HQ ; + self->psPossible = ((CAN_DO_PS(self->streamInfo.aot) && self->streamInfo.aacNumChannels == 1 && ! (self->flags & AC_MPS_PRESENT))) && self->qmfModeCurr == MODE_HQ ; FDK_ASSERT( ! ( (self->flags & AC_MPS_PRESENT) && self->psPossible ) ); } @@ -373,7 +373,7 @@ static AAC_DECODER_ERROR CDataStreamElement_Read ( { INT readBits, dataBits = count<<3; - + /* Move to the beginning of the data junk */ FDKpushBack(bs, dataStart-FDKgetValidBits(bs)); @@ -394,23 +394,26 @@ static AAC_DECODER_ERROR CDataStreamElement_Read ( \brief Read Program Config Element \bs Bitstream Handle - \count Pointer to program config element. + \pTp Transport decoder handle for CRC handling + \pce Pointer to PCE buffer + \channelConfig Current channel configuration + \alignAnchor Anchor for byte alignment - \return Error code + \return PCE status (-1: fail, 0: no new PCE, 1: PCE updated, 2: PCE updated need re-config). */ -static AAC_DECODER_ERROR CProgramConfigElement_Read ( +static int CProgramConfigElement_Read ( HANDLE_FDK_BITSTREAM bs, HANDLE_TRANSPORTDEC pTp, CProgramConfig *pce, - UINT channelConfig, - UINT alignAnchor ) + const UINT channelConfig, + const UINT alignAnchor ) { - AAC_DECODER_ERROR error = AAC_DEC_OK; + int pceStatus = 0; int crcReg; /* read PCE to temporal buffer first */ C_ALLOC_SCRATCH_START(tmpPce, CProgramConfig, 1); - + CProgramConfig_Init(tmpPce); CProgramConfig_Reset(tmpPce); @@ -421,22 +424,43 @@ static AAC_DECODER_ERROR CProgramConfigElement_Read ( transportDec_CrcEndReg(pTp, crcReg); if ( CProgramConfig_IsValid(tmpPce) - && ( (channelConfig == 6 && (tmpPce->NumChannels == 6)) - || (channelConfig == 5 && (tmpPce->NumChannels == 5)) - || (channelConfig == 0 && (tmpPce->NumChannels == pce->NumChannels)) ) - && (tmpPce->NumFrontChannelElements == 2) - && (tmpPce->NumSideChannelElements == 0) - && (tmpPce->NumBackChannelElements == 1) && (tmpPce->Profile == 1) ) - { /* Copy the complete PCE including metadata. */ - FDKmemcpy(pce, tmpPce, sizeof(CProgramConfig)); + { + if ( !pce->isValid && (channelConfig > 0) ) { + /* Create a standard channel config PCE to compare with */ + CProgramConfig_GetDefault( pce, channelConfig ); + } + + if (pce->isValid) { + /* Compare the new and the old PCE (tags ignored) */ + switch ( CProgramConfig_Compare( pce, tmpPce ) ) + { + case 1: /* Channel configuration not changed. Just new metadata. */ + FDKmemcpy(pce, tmpPce, sizeof(CProgramConfig)); /* Store the complete PCE */ + pceStatus = 1; /* New PCE but no change of config */ + break; + case 2: /* The number of channels are identical but not the config */ + if (channelConfig == 0) { + FDKmemcpy(pce, tmpPce, sizeof(CProgramConfig)); /* Store the complete PCE */ + pceStatus = 2; /* Decoder needs re-configuration */ + } + break; + case -1: /* The channel configuration is completely different */ + pceStatus = -1; /* Not supported! */ + break; + case 0: /* Nothing to do because PCE matches the old one exactly. */ + default: + /* pceStatus = 0; */ + break; + } + } } C_ALLOC_SCRATCH_END(tmpPce, CProgramConfig, 1); - return error; + return pceStatus; } -#endif +#endif /* TP_PCE_ENABLE */ /*! \brief Parse Extension Payload @@ -591,7 +615,7 @@ AAC_DECODER_ERROR CAacDecoder_ExtPayloadParse (HANDLE_AACDECODER self, { /* ... created to circumvent the missing length in ER-Syntax. */ int bitCnt, len = FDKreadBits(hBs, 4); *count -= 4; - + if (len == 15) { int add_len = FDKreadBits(hBs, 8); *count -= 8; @@ -609,9 +633,7 @@ AAC_DECODER_ERROR CAacDecoder_ExtPayloadParse (HANDLE_AACDECODER self, /* Check NOTE 2: The extension_payload() included here must not have extension_type == EXT_DATA_LENGTH. */ error = AAC_DEC_PARSE_ERROR; - goto bail; - } - else { + } else { /* rewind and call myself again. */ FDKpushBack(hBs, 4); @@ -622,7 +644,7 @@ AAC_DECODER_ERROR CAacDecoder_ExtPayloadParse (HANDLE_AACDECODER self, &bitCnt, previous_element, elIndex, - 1 ); /* Treat same as fill element */ + 0 ); *count -= len - bitCnt; } @@ -754,8 +776,12 @@ LINKSPEC_CPP void CAacDecoder_Close(HANDLE_AACDECODER self) for (ch=0; ch<(6); ch++) { if (self->pAacDecoderStaticChannelInfo[ch] != NULL) { - FreeOverlapBuffer (&self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer); - FreeAacDecoderStaticChannelInfo (&self->pAacDecoderStaticChannelInfo[ch]); + if (self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer != NULL) { + FreeOverlapBuffer (&self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer); + } + if (self->pAacDecoderStaticChannelInfo[ch] != NULL) { + FreeAacDecoderStaticChannelInfo (&self->pAacDecoderStaticChannelInfo[ch]); + } } if (self->pAacDecoderChannelInfo[ch] != NULL) { FreeAacDecoderChannelInfo (&self->pAacDecoderChannelInfo[ch]); @@ -768,8 +794,12 @@ LINKSPEC_CPP void CAacDecoder_Close(HANDLE_AACDECODER self) FreeDrcInfo(&self->hDrcInfo); } - FreeWorkBufferCore1 (&self->aacCommonData.workBufferCore1); - FreeWorkBufferCore2 (&self->aacCommonData.workBufferCore2); + if (self->aacCommonData.workBufferCore1 != NULL) { + FreeWorkBufferCore1 (&self->aacCommonData.workBufferCore1); + } + if (self->aacCommonData.workBufferCore2 != NULL) { + FreeWorkBufferCore2 (&self->aacCommonData.workBufferCore2); + } FreeAacDecoder ( &self); } @@ -994,12 +1024,14 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS CPns_InitPns(&self->pAacDecoderChannelInfo[ch]->data.aac.PnsData, &self->aacCommonData.pnsInterChannelData, &self->aacCommonData.pnsCurrentSeed, self->aacCommonData.pnsRandomSeed); } + if (ascChannels > self->aacChannels) + { + /* Make allocated channel count persistent in decoder context. */ + self->aacChannels = ascChannels; + } HcrInitRom(&self->aacCommonData.overlay.aac.erHcrInfo); setHcrType(&self->aacCommonData.overlay.aac.erHcrInfo, ID_SCE); - - /* Make allocated channel count persistent in decoder context. */ - self->aacChannels = ascChannels; } /* Make amount of signalled channels persistent in decoder context. */ @@ -1009,8 +1041,10 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS /* Update structures */ if (ascChanged) { - /* Things to be done for each channel, which do not involved allocating memory. */ - for (ch = 0; ch < ascChannels; ch++) { + /* Things to be done for each channel, which do not involve allocating memory. + Doing these things only on the channels needed for the current configuration + (ascChannels) could lead to memory access violation later (error concealment). */ + for (ch = 0; ch < self->aacChannels; ch++) { switch (self->streamInfo.aot) { case AOT_ER_AAC_ELD: case AOT_ER_AAC_LD: @@ -1241,10 +1275,10 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( else { self->frameOK = 0; } - /* Create SBR element for SBR for upsampling. */ - if ( (type == ID_LFE) - && ( (self->flags & AC_SBR_PRESENT) - || (self->sbrEnabled == 1) ) ) + /* Create SBR element for SBR for upsampling for LFE elements, + and if SBR was explicitly signaled, because the first frame(s) + may not contain SBR payload (broken encoder, bit errors). */ + if ( (self->flags & AC_SBR_PRESENT) || (self->sbrEnabled == 1) ) { SBR_ERROR sbrError; @@ -1254,7 +1288,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( self->streamInfo.extSamplingRate, self->streamInfo.aacSamplesPerFrame, self->streamInfo.aot, - ID_LFE, + type, previous_element_index ); if (sbrError != SBRDEC_OK) { @@ -1394,26 +1428,34 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( #ifdef TP_PCE_ENABLE case ID_PCE: - - if ( CProgramConfigElement_Read( bs, + { + int result = CProgramConfigElement_Read( + bs, self->hInput, pce, self->streamInfo.channelConfig, - auStartAnchor ) ) - { /* Built element table */ - int elIdx = CProgramConfig_GetElementTable(pce, self->elements, 7); - /* Reset the remaining tabs */ - for ( ; elIdx<7; elIdx++) { - self->elements[elIdx] = ID_NONE; - } - /* Make new number of channel persistant */ - self->ascChannels = pce->NumChannels; - /* If PCE is not first element conceal this frame to avoid inconsistencies */ - if ( element_count != 0 ) { + auStartAnchor ); + if ( result < 0 ) { + /* Something went wrong */ + ErrorStatus = AAC_DEC_PARSE_ERROR; self->frameOK = 0; } + else if ( result > 1 ) { + /* Built element table */ + int elIdx = CProgramConfig_GetElementTable(pce, self->elements, 7); + /* Reset the remaining tabs */ + for ( ; elIdx<7; elIdx++) { + self->elements[elIdx] = ID_NONE; + } + /* Make new number of channel persistant */ + self->ascChannels = pce->NumChannels; + /* If PCE is not first element conceal this frame to avoid inconsistencies */ + if ( element_count != 0 ) { + self->frameOK = 0; + } + } + pceRead = (result>=0) ? 1 : 0; } - pceRead = 1; break; #endif /* TP_PCE_ENABLE */ @@ -1573,7 +1615,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( } /* Update number of output channels */ - self->streamInfo.numChannels = aacChannels; + self->streamInfo.aacNumChannels = aacChannels; #ifdef TP_PCE_ENABLE if (pceRead == 1 && CProgramConfig_IsValid(pce)) { diff --git a/libAACdec/src/aacdecoder.h b/libAACdec/src/aacdecoder.h index f153c84..16351e6 100644 --- a/libAACdec/src/aacdecoder.h +++ b/libAACdec/src/aacdecoder.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdecoder_lib.cpp b/libAACdec/src/aacdecoder_lib.cpp index a3db39e..ec8f41e 100644 --- a/libAACdec/src/aacdecoder_lib.cpp +++ b/libAACdec/src/aacdecoder_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -109,8 +109,8 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define AACDECODER_LIB_VL0 2 -#define AACDECODER_LIB_VL1 4 -#define AACDECODER_LIB_VL2 7 +#define AACDECODER_LIB_VL1 5 +#define AACDECODER_LIB_VL2 5 #define AACDECODER_LIB_TITLE "AAC Decoder Lib" #define AACDECODER_LIB_BUILD_DATE __DATE__ #define AACDECODER_LIB_BUILD_TIME __TIME__ @@ -261,7 +261,7 @@ setConcealMethod ( const HANDLE_AACDECODER self, /*!< Handle of the decoder i HANDLE_SBRDECODER hSbrDec = NULL; HANDLE_AAC_DRC hDrcInfo = NULL; HANDLE_PCM_DOWNMIX hPcmDmx = NULL; - CConcealmentMethod backupMethod; + CConcealmentMethod backupMethod = ConcealMethodNone; int backupDelay = 0; int bsDelay = 0; @@ -396,11 +396,15 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode AAC_DECODER_ERROR errorStatus = AAC_DEC_OK; CConcealParams *pConcealData = NULL; HANDLE_AAC_DRC hDrcInfo = NULL; + HANDLE_PCM_DOWNMIX hPcmDmx = NULL; /* check decoder handle */ if (self != NULL) { pConcealData = &self->concealCommonData; hDrcInfo = self->hDrcInfo; + hPcmDmx = self->hPcmUtils; + } else { + errorStatus = AAC_DEC_INVALID_HANDLE; } /* configure the subsystems */ @@ -417,11 +421,14 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode break; case AAC_PCM_OUTPUT_CHANNELS: + if (value < -1 || value > (6)) { + return AAC_DEC_SET_PARAM_FAIL; + } { PCMDMX_ERROR err; err = pcmDmx_SetParam ( - self->hPcmUtils, + hPcmDmx, NUMBER_OF_OUTPUT_CHANNELS, value ); @@ -441,7 +448,7 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode PCMDMX_ERROR err; err = pcmDmx_SetParam ( - self->hPcmUtils, + hPcmDmx, DUAL_CHANNEL_DOWNMIX_MODE, value ); @@ -459,10 +466,14 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode case AAC_PCM_OUTPUT_CHANNEL_MAPPING: switch (value) { case 0: - self->channelOutputMapping = channelMappingTablePassthrough; + if (self != NULL) { + self->channelOutputMapping = channelMappingTablePassthrough; + } break; case 1: - self->channelOutputMapping = channelMappingTableWAV; + if (self != NULL) { + self->channelOutputMapping = channelMappingTableWAV; + } break; default: errorStatus = AAC_DEC_SET_PARAM_FAIL; @@ -472,6 +483,9 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode case AAC_QMF_LOWPOWER: + if (value < -1 || value > 1) { + return AAC_DEC_SET_PARAM_FAIL; + } if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } @@ -794,8 +808,8 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame( /* Export data into streaminfo structure */ self->streamInfo.sampleRate = self->streamInfo.aacSampleRate; self->streamInfo.frameSize = self->streamInfo.aacSamplesPerFrame; - self->streamInfo.numChannels = self->aacChannels; } + self->streamInfo.numChannels = self->streamInfo.aacNumChannels; @@ -832,7 +846,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame( pTimeData, &self->streamInfo.numChannels, &self->streamInfo.sampleRate, - self->channelOutputMapping[self->aacChannels-1], + self->channelOutputMapping[self->streamInfo.numChannels-1], interleaved, self->frameOK, &self->psPossible); diff --git a/libAACdec/src/arm/block_arm.cpp b/libAACdec/src/arm/block_arm.cpp index 4c0fcdd..fbc1bf3 100644 --- a/libAACdec/src/arm/block_arm.cpp +++ b/libAACdec/src/arm/block_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/block.cpp b/libAACdec/src/block.cpp index 1f82780..9d703cc 100644 --- a/libAACdec/src/block.cpp +++ b/libAACdec/src/block.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -589,7 +589,6 @@ AAC_DECODER_ERROR CBlock_ReadSpectralData(HANDLE_FDK_BITSTREAM bs, { H_HCR_INFO hHcr = &pAacDecoderChannelInfo->pComData->overlay.aac.erHcrInfo; int hcrStatus = 0; - int hcrConcealWholeFrame = 0; /* advanced Huffman decoding starts here (HCR decoding :) */ if ( pAacDecoderChannelInfo->pDynData->specificTo.aac.lenOfReorderedSpectralData != 0 ) { @@ -598,24 +597,19 @@ AAC_DECODER_ERROR CBlock_ReadSpectralData(HANDLE_FDK_BITSTREAM bs, hcrStatus = HcrInit(hHcr, pAacDecoderChannelInfo, pSamplingRateInfo, bs); if (hcrStatus != 0) { -#if HCR_ERROR_CONCEALMENT - hcrConcealWholeFrame = 1; - return AAC_DEC_DECODE_FRAME_ERROR; /* concealment is muting in the first step, therefore return now */ - // hcr decoding is not skipped because of returning above -#else return AAC_DEC_DECODE_FRAME_ERROR; -#endif } /* HCR decoding short */ hcrStatus = HcrDecoder(hHcr, pAacDecoderChannelInfo, pSamplingRateInfo, bs); - + if (hcrStatus != 0) { #if HCR_ERROR_CONCEALMENT - HcrMuteErroneousLines(hHcr); + HcrMuteErroneousLines(hHcr); #else - return AAC_DEC_DECODE_FRAME_ERROR; + return AAC_DEC_DECODE_FRAME_ERROR; #endif /* HCR_ERROR_CONCEALMENT */ + } FDKpushFor (bs, pAacDecoderChannelInfo->pDynData->specificTo.aac.lenOfReorderedSpectralData); } diff --git a/libAACdec/src/block.h b/libAACdec/src/block.h index f97b85c..f9394f6 100644 --- a/libAACdec/src/block.h +++ b/libAACdec/src/block.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channel.cpp b/libAACdec/src/channel.cpp index 21517f5..5475079 100644 --- a/libAACdec/src/channel.cpp +++ b/libAACdec/src/channel.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channel.h b/libAACdec/src/channel.h index 4c428c8..1146998 100644 --- a/libAACdec/src/channel.h +++ b/libAACdec/src/channel.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channelinfo.cpp b/libAACdec/src/channelinfo.cpp index 6e520c0..76d5895 100644 --- a/libAACdec/src/channelinfo.cpp +++ b/libAACdec/src/channelinfo.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channelinfo.h b/libAACdec/src/channelinfo.h index 9be07da..e092ab3 100644 --- a/libAACdec/src/channelinfo.h +++ b/libAACdec/src/channelinfo.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/conceal.cpp b/libAACdec/src/conceal.cpp index dc5d99f..c26051c 100644 --- a/libAACdec/src/conceal.cpp +++ b/libAACdec/src/conceal.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -441,7 +441,7 @@ AAC_DECODER_ERROR /* set confort noise level which will be inserted while in state 'muting' */ if (comfNoiseLevel != AACDEC_CONCEAL_PARAM_NOT_SPECIFIED) { - if ( (comfNoiseLevel < 0) + if ( (comfNoiseLevel < -1) || (comfNoiseLevel > 127) ) { return AAC_DEC_SET_PARAM_FAIL; } @@ -1527,8 +1527,13 @@ static void { case ConcealState_Ok: if (!frameOk) { - /* change to state SINGLE-FRAME-LOSS */ - pConcealmentInfo->concealState = ConcealState_Single; + if (pConcealCommonData->numFadeOutFrames > 0) { + /* change to state SINGLE-FRAME-LOSS */ + pConcealmentInfo->concealState = ConcealState_Single; + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } pConcealmentInfo->cntFadeFrames = 0; pConcealmentInfo->cntValidFrames = 0; } @@ -1561,11 +1566,16 @@ static void case ConcealState_FadeOut: pConcealmentInfo->cntFadeFrames += 1; /* used to address the fade-out factors */ if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames-1, - 0 /* FadeOut -> FadeIn */); + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames-1, + 0 /* FadeOut -> FadeIn */); + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } else { if (pConcealmentInfo->cntFadeFrames >= pConcealCommonData->numFadeOutFrames) { /* change to state MUTE */ @@ -1576,9 +1586,14 @@ static void case ConcealState_Mute: if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } break; @@ -1590,11 +1605,16 @@ static void pConcealmentInfo->concealState = ConcealState_Ok; } } else { - /* change to state FADE-OUT */ - pConcealmentInfo->concealState = ConcealState_FadeOut; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames+1, - 1 /* FadeIn -> FadeOut */); + if (pConcealCommonData->numFadeOutFrames > 0) { + /* change to state FADE-OUT */ + pConcealmentInfo->concealState = ConcealState_FadeOut; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames+1, + 1 /* FadeIn -> FadeOut */); + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } } break; @@ -1625,8 +1645,13 @@ static void case ConcealState_Ok: if (!(pConcealmentInfo->prevFrameOk[1] || (pConcealmentInfo->prevFrameOk[0] && !pConcealmentInfo->prevFrameOk[1] && frameOk))) { - /* Fade out only if the energy interpolation algorithm can not be applied! */ - pConcealmentInfo->concealState = ConcealState_FadeOut; + if (pConcealCommonData->numFadeOutFrames > 0) { + /* Fade out only if the energy interpolation algorithm can not be applied! */ + pConcealmentInfo->concealState = ConcealState_FadeOut; + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } pConcealmentInfo->cntFadeFrames = 0; pConcealmentInfo->cntValidFrames = 0; } @@ -1640,11 +1665,16 @@ static void pConcealmentInfo->cntFadeFrames += 1; if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames-1, - 0 /* FadeOut -> FadeIn */); + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames-1, + 0 /* FadeOut -> FadeIn */); + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } else { if (pConcealmentInfo->cntFadeFrames >= pConcealCommonData->numFadeOutFrames) { /* change to state MUTE */ @@ -1655,9 +1685,14 @@ static void case ConcealState_Mute: if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } break; @@ -1670,11 +1705,16 @@ static void pConcealmentInfo->concealState = ConcealState_Ok; } } else { - /* change to state FADE-OUT */ - pConcealmentInfo->concealState = ConcealState_FadeOut; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames+1, - 1 /* FadeIn -> FadeOut */); + if (pConcealCommonData->numFadeOutFrames > 0) { + /* change to state FADE-OUT */ + pConcealmentInfo->concealState = ConcealState_FadeOut; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames+1, + 1 /* FadeIn -> FadeOut */); + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } } break; } /* End switch(pConcealmentInfo->concealState) */ diff --git a/libAACdec/src/conceal.h b/libAACdec/src/conceal.h index 2abc26a..20e674f 100644 --- a/libAACdec/src/conceal.h +++ b/libAACdec/src/conceal.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/conceal_types.h b/libAACdec/src/conceal_types.h index c1cc6f2..31bc645 100644 --- a/libAACdec/src/conceal_types.h +++ b/libAACdec/src/conceal_types.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/debug.h b/libAACdec/src/debug.h index 9486c66..e903291 100644 --- a/libAACdec/src/debug.h +++ b/libAACdec/src/debug.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/ldfiltbank.cpp b/libAACdec/src/ldfiltbank.cpp index 8f719c8..c08cc41 100644 --- a/libAACdec/src/ldfiltbank.cpp +++ b/libAACdec/src/ldfiltbank.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/ldfiltbank.h b/libAACdec/src/ldfiltbank.h index 97c71b3..d1f9402 100644 --- a/libAACdec/src/ldfiltbank.h +++ b/libAACdec/src/ldfiltbank.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/overlapadd.h b/libAACdec/src/overlapadd.h index 08bef69..1469be7 100644 --- a/libAACdec/src/overlapadd.h +++ b/libAACdec/src/overlapadd.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/pulsedata.cpp b/libAACdec/src/pulsedata.cpp index 4edfd39..0f2f0ec 100644 --- a/libAACdec/src/pulsedata.cpp +++ b/libAACdec/src/pulsedata.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/pulsedata.h b/libAACdec/src/pulsedata.h index 7b10666..fa97d99 100644 --- a/libAACdec/src/pulsedata.h +++ b/libAACdec/src/pulsedata.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlc.cpp b/libAACdec/src/rvlc.cpp index 7b533a5..16f0bf5 100644 --- a/libAACdec/src/rvlc.cpp +++ b/libAACdec/src/rvlc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlc.h b/libAACdec/src/rvlc.h index 7903659..18d5fa3 100644 --- a/libAACdec/src/rvlc.h +++ b/libAACdec/src/rvlc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlc_info.h b/libAACdec/src/rvlc_info.h index e245090..63934af 100644 --- a/libAACdec/src/rvlc_info.h +++ b/libAACdec/src/rvlc_info.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcbit.cpp b/libAACdec/src/rvlcbit.cpp index 9ddc5a6..6efbb93 100644 --- a/libAACdec/src/rvlcbit.cpp +++ b/libAACdec/src/rvlcbit.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcbit.h b/libAACdec/src/rvlcbit.h index 176e816..02fba88 100644 --- a/libAACdec/src/rvlcbit.h +++ b/libAACdec/src/rvlcbit.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcconceal.cpp b/libAACdec/src/rvlcconceal.cpp index 682e6eb..ae6b4da 100644 --- a/libAACdec/src/rvlcconceal.cpp +++ b/libAACdec/src/rvlcconceal.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcconceal.h b/libAACdec/src/rvlcconceal.h index fdc5795..750cbcd 100644 --- a/libAACdec/src/rvlcconceal.h +++ b/libAACdec/src/rvlcconceal.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/stereo.cpp b/libAACdec/src/stereo.cpp index 79ebc7d..4f28244 100644 --- a/libAACdec/src/stereo.cpp +++ b/libAACdec/src/stereo.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/stereo.h b/libAACdec/src/stereo.h index 1ed0d9d..899b485 100644 --- a/libAACdec/src/stereo.h +++ b/libAACdec/src/stereo.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/include/aacenc_lib.h b/libAACenc/include/aacenc_lib.h index 862dcb5..8c0e1cd 100644 --- a/libAACenc/include/aacenc_lib.h +++ b/libAACenc/include/aacenc_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -316,7 +316,8 @@ if the parameter was not set from extern. The bitrate depends on the number of e channels and sampling rate and is determined as follows. \code AAC-LC (AOT_AAC_LC): 1.5 bits per sample -HE-AAC (AOT_SBR): 0.625 bits per sample +HE-AAC (AOT_SBR): 0.625 bits per sample (dualrate sbr) +HE-AAC (AOT_SBR): 1.125 bits per sample (downsampled sbr) HE-AAC v2 (AOT_PS): 0.5 bits per sample \endcode @@ -341,6 +342,33 @@ increase which might be significant. If workload is not an issue in the applicat we recommended to activate this feature. \code aacEncoder_SetParam(hAacEncoder, AACENC_AFTERBURNER, 1); \endcode +\subsection encELD ELD Auto Configuration Mode +For ELD configuration a so called auto configurator is available which configures SBR and the SBR ratio by itself. +The configurator is used when the encoder parameter ::AACENC_SBR_MODE and ::AACENC_SBR_RATIO are not set explicitely. + +Based on sampling rate and chosen bitrate per channel a reasonable SBR configuration will be used. +\verbatim +------------------------------------------------------------ + Sampling Rate | Channel Bitrate | SBR | SBR Ratio +-----------------+-----------------+------+----------------- + ]min, 16] kHz | min - 27999 | on | downsampled SBR + | 28000 - max | off | --- +-----------------+-----------------+------+----------------- + ]16 - 24] kHz | min - 39999 | on | downsampled SBR + | 40000 - max | off | --- +-----------------+-----------------+------+----------------- + ]24 - 32] kHz | min - 27999 | on | dualrate SBR + | 28000 - 55999 | on | downsampled SBR + | 56000 - max | off | --- +-----------------+-----------------+------+----------------- + ]32 - 44.1] kHz | min - 63999 | on | dualrate SBR + | 64000 - max | off | --- +-----------------+-----------------+------+----------------- + ]44.1 - 48] kHz | min - 63999 | on | dualrate SBR + | 64000 - max | off | --- +------------------------------------------------------------ +\endverbatim + \section audiochCfg Audio Channel Configuration The MPEG standard refers often to the so-called Channel Configuration. This Channel Configuration is used for a fixed Channel @@ -349,16 +377,20 @@ For user defined Configurations the Channel Configuration is set to 0 and the Ch Program Config Element. The present Encoder implementation does not allow the user to configure this Channel Configuration from extern. The Encoder implementation supports fixed Channel Modes which are mapped to Channel Configuration as follow. \verbatim --------------------------------------------------------------------- - ChannelMode | ChCfg | front_El | side_El | back_El | lfe_El ------------------+--------+----------+----------+----------+-------- -MODE_1 | 1 | SCE | | | -MODE_2 | 2 | CPE | | | -MODE_1_2 | 3 | SCE, CPE | | | -MODE_1_2_1 | 4 | SCE, CPE | | SCE | -MODE_1_2_2 | 5 | SCE, CPE | | CPE | -MODE_1_2_2_1 | 6 | SCE, CPE | | CPE | LFE --------------------------------------------------------------------- +------------------------------------------------------------------------------- + ChannelMode | ChCfg | front_El | side_El | back_El | lfe_El +-----------------------+--------+---------------+----------+----------+-------- +MODE_1 | 1 | SCE | | | +MODE_2 | 2 | CPE | | | +MODE_1_2 | 3 | SCE, CPE | | | +MODE_1_2_1 | 4 | SCE, CPE | | SCE | +MODE_1_2_2 | 5 | SCE, CPE | | CPE | +MODE_1_2_2_1 | 6 | SCE, CPE | | CPE | LFE +MODE_1_2_2_2_1 | 7 | SCE, CPE, CPE | | CPE | LFE +-----------------------+--------+---------------+----------+----------+-------- +MODE_7_1_REAR_SURROUND | 0 | SCE, CPE | | CPE, CPE | LFE +MODE_7_1_FRONT_CENTER | 0 | SCE, CPE, CPE | | CPE | LFE +------------------------------------------------------------------------------- - SCE: Single Channel Element. - CPE: Channel Pair. - SCE: Low Frequency Element. @@ -374,16 +406,20 @@ Beside the Channel Element assignment the Channel Modes are resposible for audio of the audio data depends on the selected ::AACENC_CHANNELORDER which can be MPEG or WAV like order.\n Following Table describes the complete channel mapping for both Channel Order configurations. \verbatim ---------------------------------------------------------------------------------- -ChannelMode | MPEG-Channelorder | WAV-Channelorder ------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- -MODE_1 | 0 | | | | | | | | 0 | | | | | | | -MODE_2 | 0 | 1 | | | | | | | 0 | 1 | | | | | | -MODE_1_2 | 0 | 1 | 2 | | | | | | 2 | 0 | 1 | | | | | -MODE_1_2_1 | 0 | 1 | 2 | 3 | | | | | 2 | 0 | 1 | 3 | | | | -MODE_1_2_2 | 0 | 1 | 2 | 3 | 4 | | | | 2 | 0 | 1 | 3 | 4 | | | -MODE_1_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | | | 2 | 0 | 1 | 4 | 5 | 3 | | ---------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------- +ChannelMode | MPEG-Channelorder | WAV-Channelorder +-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- +MODE_1 | 0 | | | | | | | | 0 | | | | | | | +MODE_2 | 0 | 1 | | | | | | | 0 | 1 | | | | | | +MODE_1_2 | 0 | 1 | 2 | | | | | | 2 | 0 | 1 | | | | | +MODE_1_2_1 | 0 | 1 | 2 | 3 | | | | | 2 | 0 | 1 | 3 | | | | +MODE_1_2_2 | 0 | 1 | 2 | 3 | 4 | | | | 2 | 0 | 1 | 3 | 4 | | | +MODE_1_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | | | 2 | 0 | 1 | 4 | 5 | 3 | | +MODE_1_2_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3 +-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- +MODE_7_1_REAR_SURROUND | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 0 | 1 | 6 | 7 | 4 | 5 | 3 +MODE_7_1_FRONT_CENTER | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3 +--------------------------------------------------------------------------------------- \endverbatim The denoted mapping is important for correct audio channel assignment when using MPEG or WAV ordering. The incoming audio @@ -416,8 +452,9 @@ determines the maximum allowed bitrate for AAC-LC. For HE-AAC and HE-AAC v2 a li look-up table is used. A good working point in terms of audio quality, sampling rate and bitrate, is at 1 to 1.5 -bits/audio sample for AAC-LC, 0.625 bits/audio sample for HE-AAC and 0.5 bits/audio sample -for HE-AAC v2. For example for one channel with a sampling frequency of 48 kHz, the range from +bits/audio sample for AAC-LC, 0.625 bits/audio sample for dualrate HE-AAC, 1.125 bits/audio sample +for downsampled HE-AAC and 0.5 bits/audio sample for HE-AAC v2. +For example for one channel with a sampling frequency of 48 kHz, the range from 48 kbit/s to 72 kbit/s achieves reasonable audio quality for AAC-LC. For HE-AAC and HE-AAC v2 the lowest possible audio input sampling frequency is 16 kHz because then the @@ -434,7 +471,7 @@ quality at that bitrate than HE-AAC or HE-AAC v2. The following table provides an overview of recommended encoder configuration parameters which we determined by virtue of numerous listening tests. -\subsection reommendedConfigLC AAC-LC, HE-AAC, HE-AACv2. +\subsection reommendedConfigLC AAC-LC, HE-AAC, HE-AACv2 in Dualrate SBR mode. \verbatim ----------------------------------------------------------------------------------- Audio Object Type | Bit Rate Range | Supported | Preferred | No. of @@ -457,8 +494,8 @@ AAC LC + SBR | 64000 - 128000 | 32.00, 44.10, 48.00 | 48.00 | -------------------+------------------+-----------------------+------------+------- AAC LC + SBR | 64000 - 69999 | 32.00, 44.10, 48.00 | 32.00 | 5, 5.1 AAC LC + SBR | 70000 - 159999 | 32.00, 44.10, 48.00 | 44.10 | 5, 5.1 -AAC LC + SBR | 160000 - 319999 | 32.00, 44.10, 48.00 | 48.00 | 5, 5.1 -AAC LC + SBR | 320000 - 640000 | 64.00, 88.20, 96.00 | 96.00 | 5, 5.1 +AAC LC + SBR | 160000 - 245999 | 32.00, 44.10, 48.00 | 48.00 | 5 +AAC LC + SBR | 160000 - 265999 | 32.00, 44.10, 48.00 | 48.00 | 5.1 -------------------+------------------+-----------------------+------------+------- AAC LC | 8000 - 15999 | 11.025, 12.00, 16.00 | 12.00 | 1 AAC LC | 16000 - 23999 | 16.00 | 16.00 | 1 @@ -481,7 +518,7 @@ AAC LC | 280000 - 800000 | 32.00, 44.10, 48.00 | 44.10 | 5, ----------------------------------------------------------------------------------- \endverbatim \n -\subsection reommendedConfigLD AAC-LD, AAC-ELD, AAC-ELD with SBR. +\subsection reommendedConfigLD AAC-LD, AAC-ELD, AAC-ELD with SBR in Dualrate SBR mode. \verbatim ----------------------------------------------------------------------------------- Audio Object Type | Bit Rate Range | Supported | Preferred | No. of @@ -489,18 +526,20 @@ Audio Object Type | Bit Rate Range | Supported | Preferred | No. | | [kHz] | Rate | | | | [kHz] | -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 16000 - 24999 | 32.00 - 44.10 | 32.00 | 1 +ELD + SBR | 18000 - 24999 | 32.00 - 44.10 | 32.00 | 1 ELD + SBR | 25000 - 31999 | 32.00 - 48.00 | 32.00 | 1 ELD + SBR | 32000 - 64000 | 32.00 - 48.00 | 48.00 | 1 -------------------+------------------+-----------------------+------------+------- ELD + SBR | 32000 - 51999 | 32.00 - 48.00 | 44.10 | 2 ELD + SBR | 52000 - 128000 | 32.00 - 48.00 | 48.00 | 2 -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 72000 - 192000 | 44.10 - 48.00 | 48.00 | 3 +ELD + SBR | 72000 - 160000 | 44.10 - 48.00 | 48.00 | 3 -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 96000 - 256000 | 44.10 - 48.00 | 48.00 | 4 +ELD + SBR | 96000 - 212000 | 44.10 - 48.00 | 48.00 | 4 -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 120000 - 320000 | 44.10 - 48.00 | 48.00 | 5 +ELD + SBR | 120000 - 246000 | 44.10 - 48.00 | 48.00 | 5 +-------------------+------------------+-----------------------+------------+------- +ELD + SBR | 120000 - 266000 | 44.10 - 48.00 | 48.00 | 5.1 -------------------+------------------+-----------------------+------------+------- LD, ELD | 16000 - 19999 | 16.00 - 24.00 | 16.00 | 1 LD, ELD | 20000 - 39999 | 16.00 - 32.00 | 24.00 | 1 @@ -531,13 +570,33 @@ LD, ELD | 340000 - 960000 | 44.10 - 48.00 | 48.00 | ----------------------------------------------------------------------------------- \endverbatim \n +\subsection reommendedConfigELD AAC-ELD with SBR in Downsampled SBR mode. +\verbatim +----------------------------------------------------------------------------------- +Audio Object Type | Bit Rate Range | Supported | Preferred | No. of + | [bit/s] | Sampling Rates | Sampl. | Chan. + | | [kHz] | Rate | + | | | [kHz] | +-------------------+------------------+-----------------------+------------+------- +ELD + SBR | 18000 - 24999 | 16.00 - 22.05 | 22.05 | 1 +(downsampled SBR) | 25000 - 35999 | 22.05 - 32.00 | 24.00 | 1 + | 36000 - 64000 | 32.00 - 48.00 | 32.00 | 1 +----------------------------------------------------------------------------------- +\endverbatim \n + + \page ENCODERBEHAVIOUR Encoder Behaviour \section BEHAVIOUR_BANDWIDTH Bandwidth The FDK AAC encoder usually does not use the full frequency range of the input signal, but restricts the bandwidth according to certain library-internal settings. They can be changed in the table "bandWidthTable" in the -file bandwidth.cpp (if available), or via command-line argument "-w" (see chapter \ref CommandLineUsage). +file bandwidth.cpp (if available). + +The encoder API provides the ::AACENC_BANDWIDTH parameter to adjust the bandwidth explicitly. +\code +aacEncoder_SetParam(hAacEncoder, AACENC_BANDWIDTH, value); +\endcode However it is not recommended to change these settings, because they are based on numerious listening tests and careful tweaks to ensure the best overall encoding quality. @@ -638,7 +697,6 @@ an MPEG-2 AOT is choosen since PNS is an MPEG-4 AAC feature. If SBR is activated, the encoder automatically deactivates PNS internally. If TNS is disabled but PNS is allowed, the encoder deactivates PNS calculation internally. - */ #ifndef _AAC_ENC_LIB_H_ @@ -858,8 +916,9 @@ typedef enum AACENC_SAMPLERATE = 0x0103, /*!< Audio input data sampling rate. Encoder supports following sampling rates: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 */ - AACENC_SBR_MODE = 0x0104, /*!< Configure SBR independently of the chosen Audio Object Type ::AUDIO_OBJECT_TYPE:. - This parameter is only available for ELD. + AACENC_SBR_MODE = 0x0104, /*!< Configure SBR independently of the chosen Audio Object Type ::AUDIO_OBJECT_TYPE. + This parameter is for ELD audio object type only. + - -1: Use ELD SBR auto configurator (default). - 0: Disable Spectral Band Replication. - 1: Enable Spectral Band Replication. */ @@ -869,12 +928,21 @@ typedef enum - 480: Optional length in LD/ELD configuration. */ AACENC_CHANNELMODE = 0x0106, /*!< Set explicit channel mode. Channel mode must match with number of input channels. - - 1-6: MPEG channel modes supported, see ::CHANNEL_MODE in FDK_audio.h. */ + - 1-7 and 33,34: MPEG channel modes supported, see ::CHANNEL_MODE in FDK_audio.h. */ AACENC_CHANNELORDER = 0x0107, /*!< Input audio data channel ordering scheme: - 0: MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE). (default) - 1: WAVE file format channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR). */ + AACENC_SBR_RATIO = 0x0108, /*!< Controls activation of downsampled SBR. With downsampled SBR, the delay will be + shorter. On the other hand, for achieving the same quality level, downsampled SBR + needs more bits than dual-rate SBR. + With downsampled SBR, the AAC encoder will work at the same sampling rate as the + SBR encoder (single rate). + Downsampled SBR is supported for AAC-ELD and HE-AACv1. + - 1: Downsampled SBR (default for ELD). + - 2: Dual-rate SBR (default for HE-AAC). */ + AACENC_AFTERBURNER = 0x0200, /*!< This parameter controls the use of the afterburner feature. The afterburner is a type of analysis by synthesis algorithm which increases the audio quality but also the required processing power. It is recommended to always @@ -906,14 +974,50 @@ typedef enum - n: Frame count period. */ AACENC_SIGNALING_MODE = 0x0302, /*!< Signaling mode of the extension AOT: - - 0: Implicit backward compatible signaling. (default) - - 1: Explicit SBR and implicit PS signaling. - - 2: Explicit hierarchical signaling. + - 0: Implicit backward compatible signaling (default for non-MPEG-4 based + AOT's and for the transport formats ADIF and ADTS) + - A stream that uses implicit signaling can be decoded by every AAC decoder, even AAC-LC-only decoders + - An AAC-LC-only decoder will only decode the low-frequency part of the stream, resulting in a band-limited output + - This method works with all transport formats + - This method does not work with downsampled SBR + - 1: Explicit backward compatible signaling + - A stream that uses explicit backward compatible signaling can be decoded by every AAC decoder, even AAC-LC-only decoders + - An AAC-LC-only decoder will only decode the low-frequency part of the stream, resulting in a band-limited output + - A decoder not capable of decoding PS will only decode the AAC-LC+SBR part. + If the stream contained PS, the result will be a a decoded mono downmix + - This method does not work with ADIF or ADTS. For LOAS/LATM, it only works with AudioMuxVersion==1 + - This method does work with downsampled SBR + - 2: Explicit hierarchical signaling (default for MPEG-4 based AOT's and for all transport formats excluding ADIF and ADTS) + - A stream that uses explicit hierarchical signaling can be decoded only by HE-AAC decoders + - An AAC-LC-only decoder will not decode a stream that uses explicit hierarchical signaling + - A decoder not capable of decoding PS will not decode the stream at all if it contained PS + - This method does not work with ADIF or ADTS. It works with LOAS/LATM and the MPEG-4 File format + - This method does work with downsampled SBR - The use of backward-compatible implicit signaling is recommended if the user specically - aims at preserving compatibility with decoders only capable of decoding AAC-LC. Otherwise - use non-backward-compatible explicit signaling. - Bitstream formats ADTS and ADIF can only do implicit signaling. */ + For making sure that the listener always experiences the best audio quality, + explicit hierarchical signaling should be used. + This makes sure that only a full HE-AAC-capable decoder will decode those streams. + The audio is played at full bandwidth. + For best backwards compatibility, it is recommended to encode with implicit SBR signaling. + A decoder capable of AAC-LC only will then only decode the AAC part, which means the decoded + audio will sound band-limited. + + For MPEG-2 transport types (ADTS,ADIF), only implicit signaling is possible. + + For LOAS and LATM, explicit backwards compatible signaling only works together with AudioMuxVersion==1. + The reason is that, for explicit backwards compatible signaling, additional information will be appended to the ASC. + A decoder that is only capable of decoding AAC-LC will skip this part. + Nevertheless, for jumping to the end of the ASC, it needs to know the ASC length. + Transmitting the length of the ASC is a feature of AudioMuxVersion==1, it is not possible to transmit the + length of the ASC with AudioMuxVersion==0, therefore an AAC-LC-only decoder will not be able to parse a + LOAS/LATM stream that was being encoded with AudioMuxVersion==0. + + For downsampled SBR, explicit signaling is mandatory. The reason for this is that the + extension sampling frequency (which is in case of SBR the sampling frequqncy of the SBR part) + can only be signaled in explicit mode. + + For AAC-ELD, the SBR information is transmitted in the ELDSpecific Config, which is part of the + AudioSpecificConfig. Therefore, the settings here will have no effect on AAC-ELD.*/ AACENC_TPSUBFRAMES = 0x0303, /*!< Number of sub frames in a transport frame for LOAS/LATM or ADTS (default 1). - ADTS: Maximum number of sub frames restricted to 4. diff --git a/libAACenc/src/aacEnc_ram.cpp b/libAACenc/src/aacEnc_ram.cpp index 45bca93..be3eea2 100644 --- a/libAACenc/src/aacEnc_ram.cpp +++ b/libAACenc/src/aacEnc_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -89,7 +89,7 @@ amm-info@iis.fraunhofer.de ******************************************************************************/ /*! \file - \brief Memory layout + \brief Memory layout \author Markus Lohwasser */ @@ -119,12 +119,12 @@ C_ALLOC_MEM (Ram_aacEnc_AacEncoder, AAC_ENC, 1) PsyInputBuffer. */ -C_ALLOC_MEM2 (Ram_aacEnc_PsyElement, PSY_ELEMENT, 1, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyElement, PSY_ELEMENT, 1, (8)) C_ALLOC_MEM (Ram_aacEnc_PsyInternal, PSY_INTERNAL, 1) -C_ALLOC_MEM2 (Ram_aacEnc_PsyStatic, PSY_STATIC, 1, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyStatic, PSY_STATIC, 1, (8)) -C_ALLOC_MEM2 (Ram_aacEnc_PsyInputBuffer, INT_PCM, MAX_INPUT_BUFFER_SIZE, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyInputBuffer, INT_PCM, MAX_INPUT_BUFFER_SIZE, (8)) PSY_DYNAMIC *GetRam_aacEnc_PsyDynamic (int n, UCHAR* dynamic_RAM) { FDK_ASSERT(dynamic_RAM!=0); @@ -139,8 +139,8 @@ C_ALLOC_MEM2 (Ram_aacEnc_PsyInputBuffer, INT_PCM, MAX_INPUT_BUFFER_SIZE, (6)) */ C_ALLOC_MEM2 (Ram_aacEnc_PsyOut, PSY_OUT, 1, (1)) -C_ALLOC_MEM2 (Ram_aacEnc_PsyOutElements, PSY_OUT_ELEMENT, 1, (1)*(6)) -C_ALLOC_MEM2 (Ram_aacEnc_PsyOutChannel, PSY_OUT_CHANNEL, 1, (1)*(6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyOutElements, PSY_OUT_ELEMENT, 1, (1)*(8)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyOutChannel, PSY_OUT_CHANNEL, 1, (1)*(8)) /* @@ -155,8 +155,8 @@ C_ALLOC_MEM2 (Ram_aacEnc_PsyOutChannel, PSY_OUT_CHANNEL, 1, (1)*(6)) C_ALLOC_MEM (Ram_aacEnc_QCstate, QC_STATE, 1) C_ALLOC_MEM (Ram_aacEnc_AdjustThreshold, ADJ_THR_STATE, 1) -C_ALLOC_MEM2 (Ram_aacEnc_AdjThrStateElement, ATS_ELEMENT, 1, (6)) -C_ALLOC_MEM2 (Ram_aacEnc_ElementBits, ELEMENT_BITS, 1, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_AdjThrStateElement, ATS_ELEMENT, 1, (8)) +C_ALLOC_MEM2 (Ram_aacEnc_ElementBits, ELEMENT_BITS, 1, (8)) C_ALLOC_MEM (Ram_aacEnc_BitCntrState, BITCNTR_STATE, 1) INT *GetRam_aacEnc_BitLookUp(int n, UCHAR* dynamic_RAM) { @@ -175,7 +175,7 @@ C_ALLOC_MEM (Ram_aacEnc_BitCntrState, BITCNTR_STATE, 1) */ C_ALLOC_MEM2 (Ram_aacEnc_QCout, QC_OUT, 1, (1)) -C_ALLOC_MEM2 (Ram_aacEnc_QCelement, QC_OUT_ELEMENT, 1, (1)*(6)) +C_ALLOC_MEM2 (Ram_aacEnc_QCelement, QC_OUT_ELEMENT, (1), (8)) QC_OUT_CHANNEL *GetRam_aacEnc_QCchannel (int n, UCHAR* dynamic_RAM) { FDK_ASSERT(dynamic_RAM!=0); return ((QC_OUT_CHANNEL*) (dynamic_RAM + P_BUF_0 + n*sizeof(QC_OUT_CHANNEL))); diff --git a/libAACenc/src/aacEnc_ram.h b/libAACenc/src/aacEnc_ram.h index 918e279..cf7da7c 100644 --- a/libAACenc/src/aacEnc_ram.h +++ b/libAACenc/src/aacEnc_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -118,7 +118,7 @@ amm-info@iis.fraunhofer.de */ /* define hBitstream size: max AAC framelength is 6144 bits/channel */ -/*#define BUFFER_BITSTR_SIZE ((6400*(6)/bbWordSize) +((bbWordSize - 1) / bbWordSize))*/ +/*#define BUFFER_BITSTR_SIZE ((6400*(8)/bbWordSize) +((bbWordSize - 1) / bbWordSize))*/ struct AAC_ENC { @@ -173,7 +173,7 @@ struct AAC_ENC { ++++++++++++++++++++++++++++++++++++++++++++ */ -#define BUF_SIZE_0 ( ALIGN_SIZE(sizeof(QC_OUT_CHANNEL)*(6)) ) +#define BUF_SIZE_0 ( ALIGN_SIZE(sizeof(QC_OUT_CHANNEL)*(8)) ) #define BUF_SIZE_1 ( ALIGN_SIZE(maxSize(sizeof(PSY_DYNAMIC), \ (BIT_LOOK_UP_SIZE+MERGE_GAIN_LOOK_UP_SIZE))) ) diff --git a/libAACenc/src/aacEnc_rom.cpp b/libAACenc/src/aacEnc_rom.cpp index 48ba668..0cdf5fe 100644 --- a/libAACenc/src/aacEnc_rom.cpp +++ b/libAACenc/src/aacEnc_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacEnc_rom.h b/libAACenc/src/aacEnc_rom.h index f25d327..37e5012 100644 --- a/libAACenc/src/aacEnc_rom.h +++ b/libAACenc/src/aacEnc_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc.cpp b/libAACenc/src/aacenc.cpp index d3f36aa..569662b 100644 --- a/libAACenc/src/aacenc.cpp +++ b/libAACenc/src/aacenc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -393,7 +393,7 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc, /******************* sanity checks *******************/ /* check config structure */ - if (config->nChannels < 1 || config->nChannels > (6)) { + if (config->nChannels < 1 || config->nChannels > (8)) { return AAC_ENC_UNSUPPORTED_CHANNELCONFIG; } @@ -558,6 +558,13 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc, qcInit.channelMapping = &hAacEnc->channelMapping; qcInit.sceCpe = 0; + if ((config->bitrateMode>=1) && (config->bitrateMode<=5)) { + qcInit.averageBits = (averageBitsPerFrame+7)&~7; + qcInit.bitRes = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff; + qcInit.maxBits = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff; + qcInit.minBits = 0; + } + else { int maxBitres; qcInit.averageBits = (averageBitsPerFrame+7)&~7; @@ -571,6 +578,8 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc, qcInit.minBits = (config->minBitsPerFrame!=-1) ? fixMax(qcInit.minBits, config->minBitsPerFrame) : qcInit.minBits; } + qcInit.sampleRate = config->sampleRate; + qcInit.advancedBitsToPe = isLowDelay(config->audioObjectType) ? 1 : 0 ; qcInit.nSubFrames = config->nSubFrames; qcInit.padding.paddingRest = config->sampleRate; diff --git a/libAACenc/src/aacenc.h b/libAACenc/src/aacenc.h index 517b0dc..ed167c2 100644 --- a/libAACenc/src/aacenc.h +++ b/libAACenc/src/aacenc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -113,7 +113,7 @@ typedef enum { /* initialization errors */ aac_enc_init_error_start = 0x2000, AAC_ENC_INVALID_HANDLE = 0x2020, /*!< The handle passed to the function call was invalid (probably NULL). */ - AAC_ENC_INVALID_FRAME_LENGTH = 0x2080, /*!< Invalid frame length (must be 1024 or 960). */ + AAC_ENC_INVALID_FRAME_LENGTH = 0x2080, /*!< Invalid frame length. */ AAC_ENC_INVALID_N_CHANNELS = 0x20e0, /*!< Invalid amount of audio input channels. */ AAC_ENC_INVALID_SFB_TABLE = 0x2140, /*!< Internal encoder error. */ @@ -154,7 +154,7 @@ typedef enum { #define ANC_DATA_BUFFERSIZE 1024 /* ancBuffer size */ -#define MAX_TOTAL_EXT_PAYLOADS (((6) * (1)) + (2+2)) +#define MAX_TOTAL_EXT_PAYLOADS (((8) * (1)) + (2+2)) typedef enum { @@ -205,6 +205,8 @@ struct AACENC_CONFIG { INT maxBitsPerFrame; /* maximum number of bits in AU */ INT bitreservoir; /* size of bitreservoir */ + UINT sbrRatio; /* sbr sampling rate ratio: dual- or single-rate */ + UCHAR useTns; /* flag: use temporal noise shaping */ UCHAR usePns; /* flag: use perceptual noise substitution */ UCHAR useIS; /* flag: use intensity coding */ diff --git a/libAACenc/src/aacenc_hcr.cpp b/libAACenc/src/aacenc_hcr.cpp index 91c46a9..316623a 100644 --- a/libAACenc/src/aacenc_hcr.cpp +++ b/libAACenc/src/aacenc_hcr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_hcr.h b/libAACenc/src/aacenc_hcr.h index 257459c..934247a 100644 --- a/libAACenc/src/aacenc_hcr.h +++ b/libAACenc/src/aacenc_hcr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_lib.cpp b/libAACenc/src/aacenc_lib.cpp index a4291d5..95c08b3 100644 --- a/libAACenc/src/aacenc_lib.cpp +++ b/libAACenc/src/aacenc_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -97,8 +97,8 @@ amm-info@iis.fraunhofer.de /* Encoder library info */ #define AACENCODER_LIB_VL0 3 -#define AACENCODER_LIB_VL1 3 -#define AACENCODER_LIB_VL2 3 +#define AACENCODER_LIB_VL1 4 +#define AACENCODER_LIB_VL2 12 #define AACENCODER_LIB_TITLE "AAC Encoder" #define AACENCODER_LIB_BUILD_DATE __DATE__ #define AACENCODER_LIB_BUILD_TIME __TIME__ @@ -118,10 +118,12 @@ amm-info@iis.fraunhofer.de #define SBL(fl) (fl/8) /*!< Short block length (hardcoded to 8 short blocks per long block) */ #define BSLA(fl) (4*SBL(fl)+SBL(fl)/2) /*!< AAC block switching look-ahead */ #define DELAY_AAC(fl) (fl+BSLA(fl)) /*!< MDCT + blockswitching */ -#define DELAY_AACELD(fl) ( (fl) + ((fl)/2) ) /*!< ELD FB delay */ +#define DELAY_AACELD(fl) ((fl)/2) /*!< ELD FB delay (no framing delay included) */ #define INPUTBUFFER_SIZE (1537+100+2048) +#define DEFAULT_HEADER_PERIOD_REPETITION_RATE 10 /*!< Default header repetition rate used in transport library and for SBR header. */ + //////////////////////////////////////////////////////////////////////////////////// /** * Flags to characterize encoder modules to be supported in present instance. @@ -164,7 +166,8 @@ typedef struct { UCHAR userMetaDataMode; /*!< Meta data library configuration. */ - UCHAR userSbrEnabled; + UCHAR userSbrEnabled; /*!< Enable SBR for ELD. */ + UINT userSbrRatio; /*!< SBR sampling rate ratio. Dual- or single-rate. */ } USER_PARAM; @@ -212,8 +215,8 @@ struct AACENCODER AACENC_EXT_PAYLOAD extPayload [MAX_TOTAL_EXT_PAYLOADS]; /* Extension payload */ - UCHAR extPayloadData [(1)][(6)][MAX_PAYLOAD_SIZE]; - UINT extPayloadSize [(1)][(6)]; /* payload sizes in bits */ + UCHAR extPayloadData [(1)][(8)][MAX_PAYLOAD_SIZE]; + UINT extPayloadSize [(1)][(8)]; /* payload sizes in bits */ ULONG InitFlags; /* internal status to treggier re-initialization */ @@ -227,12 +230,92 @@ struct AACENCODER UINT encoder_modis; - /* Capabity flags */ + /* Capability flags */ UINT CAPF_tpEnc; } ; -//////////////////////////////////////////////////////////////////////////////////// +typedef struct +{ + ULONG samplingRate; /*!< Encoder output sampling rate. */ + ULONG bitrateRange; /*!< Lower bitrate range for config entry. */ + + UCHAR lowDelaySbr; /*!< 0: ELD sbr off, + 1: ELD sbr on */ + + UCHAR downsampledSbr; /*!< 0: ELD with dualrate sbr, + 1: ELD with downsampled sbr */ + +} ELD_SBR_CONFIGURATOR; + +/** + * \brief This table defines ELD/SBR default configurations. + */ +static const ELD_SBR_CONFIGURATOR eldSbrAutoConfigTab[] = +{ + { 48000, 0, 1, 0 }, + { 48000, 64001, 0, 0 }, + + { 44100, 0, 1, 0 }, + { 44100, 64001, 0, 0 }, + + { 32000, 0, 1, 0 }, + { 32000, 28000, 1, 1 }, + { 32000, 56000, 0, 0 }, + + { 24000, 0, 1, 1 }, + { 24000, 40000, 0, 0 }, + + { 16000, 0, 1, 1 }, + { 16000, 28000, 0, 0 } + +}; + +/* + * \brief Configure SBR for ELD configuration. + * + * This function finds default SBR configuration for ELD based on sampling rate and channel bitrate. + * Outputparameters are SBR on/off, and SBR ratio. + * + * \param samplingRate Audio signal sampling rate. + * \param channelMode Channel configuration to be used. + * \param totalBitrate Overall bitrate. + * \param eldSbr Pointer to eldSbr parameter, filled on return. + * \param eldSbrRatio Pointer to eldSbrRatio parameter, filled on return. + * + * \return - AACENC_OK, all fine. + * - AACENC_INVALID_CONFIG, on failure. + */ +static AACENC_ERROR eldSbrConfigurator( + const ULONG samplingRate, + const CHANNEL_MODE channelMode, + const ULONG totalBitrate, + UINT * const eldSbr, + UINT * const eldSbrRatio + ) +{ + AACENC_ERROR err = AACENC_OK; + int i, cfgIdx = -1; + const ULONG channelBitrate = totalBitrate / FDKaacEnc_GetChannelModeConfiguration(channelMode)->nChannelsEff; + + for (i=0; i<(sizeof(eldSbrAutoConfigTab)/sizeof(ELD_SBR_CONFIGURATOR)); i++) { + if ( (samplingRate <= eldSbrAutoConfigTab[i].samplingRate) + && (channelBitrate >= eldSbrAutoConfigTab[i].bitrateRange) ) + { + cfgIdx = i; + } + } + + if (cfgIdx != -1) { + *eldSbr = (eldSbrAutoConfigTab[cfgIdx].lowDelaySbr==0) ? 0 : 1; + *eldSbrRatio = (eldSbrAutoConfigTab[cfgIdx].downsampledSbr==0) ? 2 : 1; + } + else { + err = AACENC_INVALID_CONFIG; /* no default configuration for eld-sbr available. */ + } + + return err; +} static inline INT isSbrActive(const HANDLE_AACENC_CONFIG hAacConfig) { @@ -253,6 +336,70 @@ static inline INT isSbrActive(const HANDLE_AACENC_CONFIG hAacConfig) return ( sbrUsed ); } +static inline INT isPsActive(const AUDIO_OBJECT_TYPE audioObjectType) +{ + INT psUsed = 0; + + if ( (audioObjectType==AOT_PS) + || (audioObjectType==AOT_MP2_PS) + || (audioObjectType==AOT_DABPLUS_PS) + || (audioObjectType==AOT_DRM_MPEG_PS) ) + { + psUsed = 1; + } + + return ( psUsed ); +} + +static SBR_PS_SIGNALING getSbrSignalingMode( + const AUDIO_OBJECT_TYPE audioObjectType, + const TRANSPORT_TYPE transportType, + const UCHAR transportSignaling, + const UINT sbrRatio + ) + +{ + SBR_PS_SIGNALING sbrSignaling; + + if (transportType==TT_UNKNOWN || sbrRatio==0) { + sbrSignaling = SIG_UNKNOWN; /* Needed parameters have not been set */ + return sbrSignaling; + } else { + sbrSignaling = SIG_IMPLICIT; /* default: implicit signaling */ + } + + if ((audioObjectType==AOT_AAC_LC) || (audioObjectType==AOT_SBR) || (audioObjectType==AOT_PS) || + (audioObjectType==AOT_MP2_AAC_LC) || (audioObjectType==AOT_MP2_SBR) || (audioObjectType==AOT_MP2_PS) ) { + switch (transportType) { + case TT_MP4_ADIF: + case TT_MP4_ADTS: + sbrSignaling = SIG_IMPLICIT; /* For MPEG-2 transport types, only implicit signaling is possible */ + break; + + case TT_MP4_RAW: + case TT_MP4_LATM_MCP1: + case TT_MP4_LATM_MCP0: + case TT_MP4_LOAS: + default: + if ( transportSignaling==0xFF ) { + /* Defaults */ + if ( sbrRatio==1 ) { + sbrSignaling = SIG_EXPLICIT_HIERARCHICAL; /* For downsampled SBR, explicit signaling is mandatory */ + } else { + sbrSignaling = SIG_IMPLICIT; /* For dual-rate SBR, implicit signaling is default */ + } + } else { + /* User set parameters */ + /* Attention: Backward compatible explicit signaling does only work with AMV1 for LATM/LOAS */ + sbrSignaling = (SBR_PS_SIGNALING)transportSignaling; + } + break; + } + } + + return sbrSignaling; +} + /**************************************************************************** Allocate Encoder ****************************************************************************/ @@ -266,8 +413,12 @@ C_ALLOC_MEM (_AacEncoder, AACENCODER, 1) /* * Map Encoder specific config structures to CODER_CONFIG. */ -static -void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CONFIG hAacConfig) +static void FDKaacEnc_MapConfig( + CODER_CONFIG *const cc, + const USER_PARAM *const extCfg, + const SBR_PS_SIGNALING sbrSignaling, + const HANDLE_AACENC_CONFIG hAacConfig + ) { AUDIO_OBJECT_TYPE transport_AOT = AOT_NULL_OBJECT; FDKmemclear(cc, sizeof(CODER_CONFIG)); @@ -304,17 +455,26 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON } /* Configure extension aot. */ - if (extCfg->userTpSignaling==0) { + if (sbrSignaling==SIG_IMPLICIT) { cc->extAOT = AOT_NULL_OBJECT; /* implicit */ } else { - if ( (extCfg->userTpSignaling==1) && ( (transport_AOT==AOT_SBR) || (transport_AOT==AOT_PS) ) ) { + if ( (sbrSignaling==SIG_EXPLICIT_BW_COMPATIBLE) && ( (transport_AOT==AOT_SBR) || (transport_AOT==AOT_PS) ) ) { cc->extAOT = AOT_SBR; /* explicit backward compatible */ } else { cc->extAOT = transport_AOT; /* explicit hierarchical */ } } + + if ( (transport_AOT==AOT_SBR) || (transport_AOT==AOT_PS) ) { + cc->sbrPresent=1; + if (transport_AOT==AOT_PS) { + cc->psPresent=1; + } + } + cc->sbrSignaling = sbrSignaling; + cc->extSamplingRate = extCfg->userSamplerate; cc->bitRate = hAacConfig->bitRate; cc->noChannels = hAacConfig->nChannels; @@ -335,7 +495,7 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON case TT_MP4_ADTS: case TT_MP4_LOAS: case TT_MP4_LATM_MCP1: - cc->headerPeriod = 10; + cc->headerPeriod = DEFAULT_HEADER_PERIOD_REPETITION_RATE; break; default: cc->headerPeriod = 0; @@ -351,7 +511,6 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON case AOT_MP2_SBR: case AOT_MP2_PS: cc->flags &= ~CC_MPEG_ID; /* Required for ADTS. */ - //config->userTpSignaling=0; cc->extAOT = AOT_NULL_OBJECT; break; default: @@ -411,7 +570,7 @@ AAC_ENCODER_ERROR aacEncDefaultConfig(HANDLE_AACENC_CONFIG hAacConfig, /* make reasonable default settings */ FDKaacEnc_AacInitDefaultConfig (hAacConfig); - /* clear confure structure and copy default settings */ + /* clear configuration structure and copy default settings */ FDKmemclear(config, sizeof(USER_PARAM)); /* copy encoder configuration settings */ @@ -438,7 +597,7 @@ AAC_ENCODER_ERROR aacEncDefaultConfig(HANDLE_AACENC_CONFIG hAacConfig, /* initialize transport parameters */ config->userTpType = TT_UNKNOWN; config->userTpAmxv = 0; - config->userTpSignaling = 0; /* default, implicit signaling */ + config->userTpSignaling = 0xFF; /* choose signaling automatically */ config->userTpNsubFrames = 1; config->userTpProtection = 0; /* not crc protected*/ config->userTpHeaderPeriod = 0xFF; /* header period in auto mode */ @@ -447,6 +606,14 @@ AAC_ENCODER_ERROR aacEncDefaultConfig(HANDLE_AACENC_CONFIG hAacConfig, config->userAncDataRate = 0; + /* SBR rate is set to 0 here, which means it should be set automatically + in FDKaacEnc_AdjustEncSettings() if the user did not set a rate + expilicitely. */ + config->userSbrRatio = 0; + + /* SBR enable set to -1 means to inquire ELD audio configurator for reasonable configuration. */ + config->userSbrEnabled = -1; + return AAC_ENC_OK; } @@ -481,6 +648,7 @@ INT aacEncoder_LimitBitrate( INT bitRate, const INT nSubFrames, const INT sbrActive, + const INT sbrDownSampleRate, const AUDIO_OBJECT_TYPE aot ) { @@ -490,8 +658,7 @@ INT aacEncoder_LimitBitrate( FDKaacEnc_InitChannelMapping(channelMode, CH_ORDER_MPEG, &cm); if (sbrActive) { - /* Assume SBR rate ratio of 2:1 */ - coreSamplingRate = samplingRate / 2; + coreSamplingRate = samplingRate >> (sbrEncoder_IsSingleRatePossible(aot) ? (sbrDownSampleRate-1):1); } else { coreSamplingRate = samplingRate; } @@ -506,7 +673,7 @@ INT aacEncoder_LimitBitrate( bitRate = FDKmin(576000*nChannels, bitRate); /*bitRate = FDKmax(0*nChannels, bitRate);*/ } - + /* Limit bit rate in respect to the core coder */ bitRate = FDKaacEnc_LimitBitrate( @@ -525,56 +692,58 @@ INT aacEncoder_LimitBitrate( /* Limit bit rate in respect to available SBR modes if active */ if (sbrActive) { - SBR_ELEMENT_INFO sbrElInfo[6]; - INT sbrBitRate = 0; - int e, tooBig=-1; + int numIterations = 0; + INT initialBitrate, adjustedBitrate; + initialBitrate = adjustedBitrate = bitRate; - FDK_ASSERT(cm.nElements <= (6)); + /* Find total bitrate which provides valid configuration for each SBR element. */ + do { + int e; + SBR_ELEMENT_INFO sbrElInfo[(8)]; + FDK_ASSERT(cm.nElements <= (8)); - /* Get bit rate for each SBR element */ - aacEncDistributeSbrBits(&cm, sbrElInfo, bitRate); + initialBitrate = adjustedBitrate; - for (e=0; e sbrBitRateOut) { - FDK_ASSERT(tooBig != 0); - tooBig = 1; - if (e == 0) { - sbrBitRate = 5000000; - } - } - if (tooBig != -1) + for (e=0; e= sbrBitRateOut); + INT sbrElementBitRateIn, sbrBitRateOut; + + if (cm.elInfo[e].elType != ID_SCE && cm.elInfo[e].elType != ID_CPE) { + continue; } - } - } - if (tooBig != -1) { - bitRate = sbrBitRate; - } + sbrElementBitRateIn = sbrElInfo[e].bitRate; + sbrBitRateOut = sbrEncoder_LimitBitRate(sbrElementBitRateIn , cm.elInfo[e].nChannelsInEl, coreSamplingRate, aot); + if (sbrBitRateOut == 0) { + return 0; + } + + /* If bitrates don't match, distribution and limiting needs to be determined again. + Abort element loop and restart with adapted bitrate. */ + if (sbrElementBitRateIn != sbrBitRateOut) { + + if (sbrElementBitRateIn < sbrBitRateOut) { + adjustedBitrate = fMax(initialBitrate, (INT)fDivNorm((FIXP_DBL)(sbrBitRateOut+8), cm.elInfo[e].relativeBits)); + break; + } + + if (sbrElementBitRateIn > sbrBitRateOut) { + adjustedBitrate = fMin(initialBitrate, (INT)fDivNorm((FIXP_DBL)(sbrBitRateOut-8), cm.elInfo[e].relativeBits)); + break; + } + + } /* sbrElementBitRateIn != sbrBitRateOut */ + + } /* elements */ + + numIterations++; /* restrict iteration to worst case of num elements */ + + } while ( (initialBitrate!=adjustedBitrate) && (numIterations<=cm.nElements) ); + + /* Unequal bitrates mean that no reasonable bitrate configuration found. */ + bitRate = (initialBitrate==adjustedBitrate) ? adjustedBitrate : 0; } FDK_ASSERT(bitRate > 0); @@ -624,26 +793,12 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, case AOT_MP2_SBR: case AOT_MP2_PS: hAacConfig->usePns = 0; - if (config->userTpSignaling!=0) { - return AACENC_INVALID_CONFIG; /* only implicit signaling allowed */ - } case AOT_AAC_LC: case AOT_SBR: case AOT_PS: config->userTpType = (config->userTpType!=TT_UNKNOWN) ? config->userTpType : TT_MP4_ADTS; hAacConfig->framelength = (config->userFramelength!=(UINT)-1) ? config->userFramelength : 1024; - if (hAacConfig->framelength != 1024 && hAacConfig->framelength != 960) { - return AACENC_INVALID_CONFIG; - } - break; - case AOT_ER_AAC_LC: - hAacConfig->epConfig = 0; - hAacConfig->syntaxFlags |= AC_ER; - hAacConfig->syntaxFlags |= ((config->userErTools & 0x1) ? AC_ER_VCB11 : 0); - hAacConfig->syntaxFlags |= ((config->userErTools & 0x2) ? AC_ER_HCR : 0); - config->userTpType = (config->userTpType!=TT_UNKNOWN) ? config->userTpType : TT_MP4_LOAS; - hAacConfig->framelength = (config->userFramelength!=(UINT)-1) ? config->userFramelength : 1024; - if (hAacConfig->framelength != 1024 && hAacConfig->framelength != 960) { + if (hAacConfig->framelength != 1024) { return AACENC_INVALID_CONFIG; } break; @@ -665,7 +820,7 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, hAacConfig->syntaxFlags |= ((config->userErTools & 0x1) ? AC_ER_VCB11 : 0); hAacConfig->syntaxFlags |= ((config->userErTools & 0x2) ? AC_ER_HCR : 0); hAacConfig->syntaxFlags |= ((config->userErTools & 0x4) ? AC_ER_RVLC : 0); - hAacConfig->syntaxFlags |= ((config->userSbrEnabled) ? AC_SBR_PRESENT : 0); + hAacConfig->syntaxFlags |= ((config->userSbrEnabled==1) ? AC_SBR_PRESENT : 0); config->userTpType = (config->userTpType!=TT_UNKNOWN) ? config->userTpType : TT_MP4_LOAS; hAacConfig->framelength = (config->userFramelength!=(UINT)-1) ? config->userFramelength : 512; if (hAacConfig->framelength != 512 && hAacConfig->framelength != 480) { @@ -676,19 +831,6 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, break; } - /* We need the frame length to call aacEncoder_LimitBitrate() */ - hAacConfig->bitRate = aacEncoder_LimitBitrate( - NULL, - hAacConfig->sampleRate, - hAacConfig->framelength, - hAacConfig->nChannels, - hAacConfig->channelMode, - config->userBitrate, - hAacConfig->nSubFrames, - isSbrActive(hAacConfig), - hAacConfig->audioObjectType - ); - switch ( hAacConfig->audioObjectType ) { case AOT_ER_AAC_LD: case AOT_ER_AAC_ELD: @@ -696,7 +838,7 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, hAacConfig->bitrateMode = 0; } if (config->userBitrateMode==0) { - hAacConfig->bitreservoir = 50*config->nChannels; /* default, reduced bitreservoir */ + hAacConfig->bitreservoir = 100*config->nChannels; /* default, reduced bitreservoir */ } if (hAacConfig->bitrateMode!=0) { return AACENC_INVALID_CONFIG; @@ -706,6 +848,110 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, break; } + hAacConfig->bitRate = config->userBitrate; + + /* get bitrate in VBR configuration */ + if ( (hAacConfig->bitrateMode>=1) && (hAacConfig->bitrateMode<=5) ) { + /* In VBR mode; SBR-modul depends on bitrate, core encoder on bitrateMode. */ + hAacConfig->bitRate = FDKaacEnc_GetVBRBitrate(hAacConfig->bitrateMode, hAacConfig->channelMode); + } + + + + /* Set default bitrate if no external bitrate declared. */ + if ( (hAacConfig->bitrateMode==0) && (config->userBitrate==(UINT)-1) ) { + INT bitrate = FDKaacEnc_GetChannelModeConfiguration(hAacConfig->channelMode)->nChannelsEff * hAacConfig->sampleRate; + + if ( isPsActive(hAacConfig->audioObjectType) ) { + hAacConfig->bitRate = (bitrate>>1); /* 0.5 bit per sample */ + } + else if ( isSbrActive(hAacConfig) ) + { + if ( (config->userSbrRatio==2) || ((config->userSbrRatio==0)&&(hAacConfig->audioObjectType!=AOT_ER_AAC_ELD)) ) { + hAacConfig->bitRate = (bitrate + (bitrate>>2))>>1; /* 0.625 bits per sample */ + } + if ( (config->userSbrRatio==1) || ((config->userSbrRatio==0)&&(hAacConfig->audioObjectType==AOT_ER_AAC_ELD)) ) { + hAacConfig->bitRate = (bitrate + (bitrate>>3)); /* 1.125 bits per sample */ + } + } else + { + hAacConfig->bitRate = bitrate + (bitrate>>1); /* 1.5 bits per sample */ + } + } + + /* Initialize SBR parameters */ + if ( (hAacConfig->audioObjectType==AOT_ER_AAC_ELD) + && (config->userSbrEnabled == (UCHAR)-1) && (config->userSbrRatio==0) ) + { + UINT eldSbr = 0; + UINT eldSbrRatio = 0; + + if ( AACENC_OK!=(err=eldSbrConfigurator( + hAacConfig->sampleRate, + hAacConfig->channelMode, + hAacConfig->bitRate, + &eldSbr, + &eldSbrRatio)) ) + { + return err; + } + + hAacConfig->syntaxFlags |= ((eldSbr) ? AC_SBR_PRESENT : 0); + hAacConfig->sbrRatio = eldSbrRatio; + } + else + if ( (config->userSbrRatio==0) && (isSbrActive(hAacConfig)) ) { + /* Automatic SBR ratio configuration + * - downsampled SBR for ELD + * - otherwise always dualrate SBR + */ + hAacConfig->sbrRatio = (hAacConfig->audioObjectType==AOT_ER_AAC_ELD) ? 1 : 2; + } + else { + /* SBR ratio has been set by the user, so use it. */ + hAacConfig->sbrRatio = config->userSbrRatio; + } + + { + UCHAR tpSignaling=getSbrSignalingMode(hAacConfig->audioObjectType, config->userTpType, config->userTpSignaling, hAacConfig->sbrRatio); + + if ( (hAacConfig->audioObjectType==AOT_AAC_LC || hAacConfig->audioObjectType==AOT_SBR || hAacConfig->audioObjectType==AOT_PS) && + (config->userTpType==TT_MP4_LATM_MCP1 || config->userTpType==TT_MP4_LATM_MCP0 || config->userTpType==TT_MP4_LOAS) && + (tpSignaling==1) && (config->userTpAmxv==0) ) { + /* For backward compatible explicit signaling, AMV1 has to be active */ + return AACENC_INVALID_CONFIG; + } + + if ( (hAacConfig->audioObjectType==AOT_AAC_LC || hAacConfig->audioObjectType==AOT_SBR || hAacConfig->audioObjectType==AOT_PS) && + (tpSignaling==0) && (hAacConfig->sbrRatio==1)) { + /* Downsampled SBR has to be signaled explicitely (for transmission of SBR sampling fequency) */ + return AACENC_INVALID_CONFIG; + } + } + + + + /* We need the frame length to call aacEncoder_LimitBitrate() */ + hAacConfig->bitRate = aacEncoder_LimitBitrate( + NULL, + hAacConfig->sampleRate, + hAacConfig->framelength, + hAacConfig->nChannels, + hAacConfig->channelMode, + hAacConfig->bitRate, + hAacConfig->nSubFrames, + isSbrActive(hAacConfig), + hAacConfig->sbrRatio, + hAacConfig->audioObjectType + ); + + /* Configure PNS */ + if ( ((hAacConfig->bitrateMode>=1) && (hAacConfig->bitrateMode<=5)) /* VBR without PNS. */ + || (hAacConfig->useTns == 0) ) /* TNS required. */ + { + hAacConfig->usePns = 0; + } + if (hAacConfig->epConfig >= 0) { hAacConfig->syntaxFlags |= AC_ER; if (((INT)hAacConfig->channelMode < 1) || ((INT)hAacConfig->channelMode > 7)) { @@ -725,47 +971,13 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, return AACENC_INVALID_CONFIG; /* not enough channels allocated */ } - /* get bitrate in VBR configuration */ - if ( (hAacConfig->bitrateMode>=1) && (hAacConfig->bitrateMode<=5) ) { - /* In VBR mode; SBR-modul depends on bitrate, core encoder on bitrateMode. */ - hAacConfig->bitRate = FDKaacEnc_GetVBRBitrate(hAacConfig->bitrateMode, hAacConfig->channelMode); - } - - - - /* Set default bitrate if no external bitrate declared. */ - if (hAacConfig->bitRate==-1) { - INT bitrate = FDKaacEnc_GetChannelModeConfiguration(hAacConfig->channelMode)->nChannelsEff * hAacConfig->sampleRate; - switch (hAacConfig->audioObjectType) - { - case AOT_AAC_LC: - hAacConfig->bitRate = bitrate + (bitrate>>1); /* 1.5 bits per sample */ - break; - case AOT_SBR: - hAacConfig->bitRate = (bitrate + (bitrate>>2))>>1; /* 0.625 bits per sample */ - break; - case AOT_PS: - hAacConfig->bitRate = (bitrate>>1); /* 0.5 bit per sample */ - break; - default: - hAacConfig->bitRate = bitrate; - break; - } - } - - /* Configure PNS */ - if ( ((hAacConfig->bitrateMode>=1) && (hAacConfig->bitrateMode<=5)) /* VBR without PNS. */ - || (hAacConfig->useTns == 0) ) /* TNS required. */ - { - hAacConfig->usePns = 0; - } - /* Meta data restriction. */ switch (hAacConfig->audioObjectType) { /* Allow metadata support */ case AOT_AAC_LC: case AOT_SBR: + case AOT_PS: hAacEncoder->metaDataAllowed = 1; if (((INT)hAacConfig->channelMode < 1) || ((INT)hAacConfig->channelMode > 7)) { config->userMetaDataMode = 0; @@ -849,10 +1061,8 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, ((InitFlags & AACENC_INIT_CONFIG) || (InitFlags & AACENC_INIT_STATES)) ) { INT sbrError; - SBR_ELEMENT_INFO sbrElInfo[(6)]; + SBR_ELEMENT_INFO sbrElInfo[(8)]; CHANNEL_MAPPING channelMapping; - - AUDIO_OBJECT_TYPE aot = hAacConfig->audioObjectType; if ( FDKaacEnc_InitChannelMapping(hAacConfig->channelMode, hAacConfig->channelOrder, @@ -862,7 +1072,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, } /* Check return value and if the SBR encoder can handle enough elements */ - if (channelMapping.nElements > (6)) { + if (channelMapping.nElements > (8)) { return AACENC_INIT_ERROR; } @@ -881,15 +1091,17 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, &aacBufferOffset, &hAacConfig->nChannels, &hAacConfig->sampleRate, + &hAacConfig->sbrRatio, &frameLength, - &hAacConfig->audioObjectType, + hAacConfig->audioObjectType, &hAacEncoder->nDelay, (hAacConfig->audioObjectType == AOT_ER_AAC_ELD) ? 1 : TRANS_FAC, + (config->userTpHeaderPeriod!=0xFF) ? config->userTpHeaderPeriod : DEFAULT_HEADER_PERIOD_REPETITION_RATE, initFlag ); /* Suppress AOT reconfiguration and check error status. */ - if ( sbrError || (hAacConfig->audioObjectType!=aot) ) { + if (sbrError) { return AACENC_INIT_SBR_ERROR; } @@ -915,7 +1127,11 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, { UINT flags = 0; - FDKaacEnc_MapConfig(&hAacEncoder->coderConfig, config, hAacConfig); + FDKaacEnc_MapConfig( + &hAacEncoder->coderConfig, + config, + getSbrSignalingMode(hAacConfig->audioObjectType, config->userTpType, config->userTpSignaling, hAacConfig->sbrRatio), + hAacConfig); /* create flags for transport encoder */ if (config->userTpAmxv == 1) { @@ -958,7 +1174,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, INT inputDataDelay = DELAY_AAC(hAacConfig->framelength); if ( isSbrActive(hAacConfig) && hSbrEncoder!=NULL) { - inputDataDelay = 2*inputDataDelay + sbrEncoder_GetInputDataDelay(*hSbrEncoder); + inputDataDelay = hAacConfig->sbrRatio*inputDataDelay + sbrEncoder_GetInputDataDelay(*hSbrEncoder); } if ( FDK_MetadataEnc_Init(hAacEncoder->hMetadataEnc, @@ -1033,8 +1249,8 @@ AACENC_ERROR aacEncOpen( /* Determine max channel configuration. */ if (maxChannels==0) { - hAacEncoder->nMaxAacChannels = (6); - hAacEncoder->nMaxSbrChannels = (6); + hAacEncoder->nMaxAacChannels = (8); + hAacEncoder->nMaxSbrChannels = (8); } else { hAacEncoder->nMaxAacChannels = (maxChannels&0x00FF); @@ -1042,15 +1258,15 @@ AACENC_ERROR aacEncOpen( hAacEncoder->nMaxSbrChannels = (maxChannels&0xFF00) ? (maxChannels>>8) : hAacEncoder->nMaxAacChannels; } - if ( (hAacEncoder->nMaxAacChannels>(6)) || (hAacEncoder->nMaxSbrChannels>(6)) ) { + if ( (hAacEncoder->nMaxAacChannels>(8)) || (hAacEncoder->nMaxSbrChannels>(8)) ) { err = AACENC_INVALID_CONFIG; goto bail; } } /* maxChannels==0 */ /* Max number of elements could be tuned any more. */ - hAacEncoder->nMaxAacElements = fixMin((6), hAacEncoder->nMaxAacChannels); - hAacEncoder->nMaxSbrElements = fixMin((6), hAacEncoder->nMaxSbrChannels); + hAacEncoder->nMaxAacElements = fixMin((8), hAacEncoder->nMaxAacChannels); + hAacEncoder->nMaxSbrElements = fixMin((8), hAacEncoder->nMaxSbrChannels); hAacEncoder->nMaxSubFrames = (1); @@ -1108,7 +1324,7 @@ AACENC_ERROR aacEncOpen( goto bail; } else { - C_ALLOC_SCRATCH_START(pLibInfo, LIB_INFO, FDK_MODULE_LAST); + C_ALLOC_SCRATCH_START(pLibInfo, LIB_INFO, FDK_MODULE_LAST); FDKinitLibInfo( pLibInfo); transportEnc_GetLibInfo( pLibInfo ); @@ -1343,8 +1559,12 @@ AACENC_ERROR aacEncEncode( for (i=0; i<(INT)nMetaDataExtensions; i++) { /* Get meta data extension payload. */ hAacEncoder->extPayload[nExtensions++] = pMetaDataExtPayload[i]; } - if (matrix_mixdown_idx!=-1) { /* Set matrix mixdown coefficient. */ - UINT pceValue = (UINT)( (1<<3) | ((matrix_mixdown_idx&0x2)<<1) | 1 ); + + if ( (matrix_mixdown_idx!=-1) + && ((hAacEncoder->extParam.userChannelMode==MODE_1_2_2)||(hAacEncoder->extParam.userChannelMode==MODE_1_2_2_1)) ) + { + /* Set matrix mixdown coefficient. */ + UINT pceValue = (UINT)( (1<<3) | ((matrix_mixdown_idx&0x3)<<1) | 1 ); if (hAacEncoder->extParam.userPceAdditions != pceValue) { hAacEncoder->extParam.userPceAdditions = pceValue; hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT; @@ -1375,7 +1595,7 @@ AACENC_ERROR aacEncEncode( } else { /* Add SBR extension payload */ - for (i = 0; i < (6); i++) { + for (i = 0; i < (8); i++) { if (hAacEncoder->extPayloadSize[nPayload][i] > 0) { hAacEncoder->extPayload[nExtensions].pData = hAacEncoder->extPayloadData[nPayload][i]; { @@ -1573,7 +1793,6 @@ AACENC_ERROR aacEncoder_SetParam( } case AOT_AAC_LC: case AOT_MP2_AAC_LC: - case AOT_ER_AAC_LC: case AOT_ER_AAC_LD: case AOT_ER_AAC_ELD: if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_AAC))) { @@ -1636,7 +1855,7 @@ AACENC_ERROR aacEncoder_SetParam( } if ( (pConfig->nElements > hAacEncoder->nMaxAacElements) || (pConfig->nChannelsEff > hAacEncoder->nMaxAacChannels) - || !((value>=1) && (value<=6)) + || !(((value>=1) && (value<=7))||((value>=33) && (value<=34))) ) { err = AACENC_INVALID_CONFIG; @@ -1691,6 +1910,16 @@ AACENC_ERROR aacEncoder_SetParam( } } break; + case AACENC_SBR_RATIO: + if (settings->userSbrRatio != value) { + if (! ((value==0) || (value==1) || (value==2)) ) { + err = AACENC_INVALID_CONFIG; + break; + } + settings->userSbrRatio = value; + hAacEncoder->InitFlags |= AACENC_INIT_CONFIG | AACENC_INIT_STATES | AACENC_INIT_TRANSPORT; + } + break; case AACENC_SBR_MODE: if (settings->userSbrEnabled != value) { settings->userSbrEnabled = value; @@ -1812,7 +2041,7 @@ UINT aacEncoder_GetParam( value = (UINT)hAacEncoder->aacConfig.bitrateMode; break; case AACENC_SAMPLERATE: - value = (UINT)settings->userSamplerate; + value = (UINT)hAacEncoder->coderConfig.extSamplingRate; break; case AACENC_CHANNELMODE: value = (UINT)hAacEncoder->aacConfig.channelMode; @@ -1829,6 +2058,9 @@ UINT aacEncoder_GetParam( case AACENC_GRANULE_LENGTH: value = (UINT)hAacEncoder->aacConfig.framelength; break; + case AACENC_SBR_RATIO: + value = isSbrActive(&hAacEncoder->aacConfig) ? hAacEncoder->aacConfig.sbrRatio : 0; + break; case AACENC_SBR_MODE: value = (UINT) (hAacEncoder->aacConfig.syntaxFlags & AC_SBR_PRESENT) ? 1 : 0; break; @@ -1836,7 +2068,7 @@ UINT aacEncoder_GetParam( value = (UINT)settings->userTpType; break; case AACENC_SIGNALING_MODE: - value = (UINT)settings->userTpSignaling; + value = (UINT)getSbrSignalingMode(hAacEncoder->aacConfig.audioObjectType, settings->userTpType, settings->userTpSignaling, hAacEncoder->aacConfig.sbrRatio); break; case AACENC_PROTECTION: value = (UINT)settings->userTpProtection; diff --git a/libAACenc/src/aacenc_pns.cpp b/libAACenc/src/aacenc_pns.cpp index 4d81268..b9640d9 100644 --- a/libAACenc/src/aacenc_pns.cpp +++ b/libAACenc/src/aacenc_pns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_pns.h b/libAACenc/src/aacenc_pns.h index ce82071..3bda9de 100644 --- a/libAACenc/src/aacenc_pns.h +++ b/libAACenc/src/aacenc_pns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_tns.cpp b/libAACenc/src/aacenc_tns.cpp index 00b2bca..85aea65 100644 --- a/libAACenc/src/aacenc_tns.cpp +++ b/libAACenc/src/aacenc_tns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -83,7 +83,7 @@ amm-info@iis.fraunhofer.de /******************************** MPEG Audio Encoder ************************** - Initial author: Alex Groeschel + Initial author: Alex Groeschel, Tobias Chalupka contents/description: Temporal noise shaping ******************************************************************************/ @@ -281,7 +281,6 @@ static INT getTnsMaxBands( int maxBandsTabSize = 0; switch (granuleLength) { - case 960: case 1024: pMaxBandsTab = tnsMaxBandsTab1024; maxBandsTabSize = sizeof(tnsMaxBandsTab1024)/sizeof(TNS_MAX_TAB_ENTRY); @@ -404,7 +403,6 @@ AAC_ENCODER_ERROR FDKaacEnc_InitTnsConfiguration(INT bitRate, tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand]; switch (granuleLength) { - case 960: case 1024: /* TNS start line: skip lower MDCT lines to prevent artifacts due to filter mismatch */ tC->lpcStartBand[LOFILT] = (blockType == SHORT_WINDOW) ? 0 : ((sampleRate < 18783) ? 4 : 8); diff --git a/libAACenc/src/aacenc_tns.h b/libAACenc/src/aacenc_tns.h index 519fd69..f2b731f 100644 --- a/libAACenc/src/aacenc_tns.h +++ b/libAACenc/src/aacenc_tns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/adj_thr.cpp b/libAACenc/src/adj_thr.cpp index a779357..6433633 100644 --- a/libAACenc/src/adj_thr.cpp +++ b/libAACenc/src/adj_thr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -123,6 +123,117 @@ static const FIXP_DBL SnrLdMin4 = (FIXP_DBL)0x02000000; /*FL2FXCONST_DBL(FDKlog static const FIXP_DBL SnrLdMin5 = (FIXP_DBL)0xfc000000; /*FL2FXCONST_DBL(FDKlog(0.25) /FDKlog(2.0)/LD_DATA_SCALING);*/ +/* +The bits2Pe factors are choosen for the case that some times +the crash recovery strategy will be activated once. +*/ + +typedef struct { + INT bitrate; + LONG bits2PeFactor_mono; + LONG bits2PeFactor_mono_slope; + LONG bits2PeFactor_stereo; + LONG bits2PeFactor_stereo_slope; + LONG bits2PeFactor_mono_scfOpt; + LONG bits2PeFactor_mono_scfOpt_slope; + LONG bits2PeFactor_stereo_scfOpt; + LONG bits2PeFactor_stereo_scfOpt_slope; + +} BIT_PE_SFAC; + +typedef struct { + const INT sampleRate; + const BIT_PE_SFAC * pPeTab; + const INT nEntries; + +} BITS2PE_CFG_TAB; + +static const BIT_PE_SFAC S_Bits2PeTab16000[] = { + { 10000, 0x228F5C29, 0x02FEF55D, 0x1D70A3D7, 0x09BC9D6D, 0x228F5C29, 0x02FEF55D, 0x1C28F5C3, 0x0CBB92CA}, + { 24000, 0x23D70A3D, 0x029F16B1, 0x2199999A, 0x07DD4413, 0x23D70A3D, 0x029F16B1, 0x2199999A, 0x07DD4413}, + { 32000, 0x247AE148, 0x11B1D92B, 0x23851EB8, 0x01F75105, 0x247AE148, 0x110A137F, 0x23851EB8, 0x01F75105}, + { 48000, 0x2D1EB852, 0x6833C600, 0x247AE148, 0x014F8B59, 0x2CCCCCCD, 0x68DB8BAC, 0x247AE148, 0x01F75105}, + { 64000, 0x60000000, 0x00000000, 0x251EB852, 0x154C985F, 0x60000000, 0x00000000, 0x2570A3D7, 0x154C985F}, + { 96000, 0x60000000, 0x00000000, 0x39EB851F, 0x088509C0, 0x60000000, 0x00000000, 0x3A3D70A4, 0x088509C0}, + {128000, 0x60000000, 0x00000000, 0x423D70A4, 0x18A43BB4, 0x60000000, 0x00000000, 0x428F5C29, 0x181E03F7}, + {148000, 0x60000000, 0x00000000, 0x5147AE14, 0x00000000, 0x60000000, 0x00000000, 0x5147AE14, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab22050[] = { + { 16000, 0x1a8f5c29, 0x1797cc3a, 0x128f5c29, 0x18e75793, 0x175c28f6, 0x221426fe, 0x00000000, 0x5a708ede}, + { 24000, 0x2051eb85, 0x092ccf6c, 0x18a3d70a, 0x13a92a30, 0x1fae147b, 0xbcbe61d, 0x16147ae1, 0x18e75793}, + { 32000, 0x228f5c29, 0x029f16b1, 0x1d70a3d7, 0x088509c0, 0x228f5c29, 0x29f16b1, 0x1c28f5c3, 0x0b242071}, + { 48000, 0x23d70a3d, 0x014f8b59, 0x2199999a, 0x03eea20a, 0x23d70a3d, 0x14f8b59, 0x2199999a, 0x03eea20a}, + { 64000, 0x247ae148, 0x08d8ec96, 0x23851eb8, 0x00fba882, 0x247ae148, 0x88509c0, 0x23851eb8, 0x00fba882}, + { 96000, 0x2d1eb852, 0x3419e300, 0x247ae148, 0x00a7c5ac, 0x2ccccccd, 0x346dc5d6, 0x247ae148, 0x00fba882}, + {128000, 0x60000000, 0x00000000, 0x251eb852, 0x029f16b1, 0x60000000, 0x00000000, 0x2570a3d7, 0x009f16b1}, + {148000, 0x60000000, 0x00000000, 0x26b851ec, 0x00000000, 0x60000000, 0x00000000, 0x270a3d71, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab24000[] = { + { 16000, 0x19eb851f, 0x13a92a30, 0x1147ae14, 0x164840e1, 0x1999999a, 0x12599ed8, 0x00000000, 0x46c764ae}, + { 24000, 0x1eb851ec, 0x0d1b7176, 0x16b851ec, 0x18e75793, 0x1e147ae1, 0x0fba8827, 0x1147ae14, 0x2c9081c3}, + { 32000, 0x21eb851f, 0x049667b6, 0x1ccccccd, 0x07357e67, 0x21eb851f, 0x03eea20a, 0x1c28f5c3, 0x07357e67}, + { 48000, 0x2428f5c3, 0x014f8b59, 0x2051eb85, 0x053e2d62, 0x23d70a3d, 0x01f75105, 0x1fae147b, 0x07357e67}, + { 64000, 0x24cccccd, 0x05e5f30e, 0x22e147ae, 0x01a36e2f, 0x24cccccd, 0x05e5f30e, 0x23333333, 0x014f8b59}, + { 96000, 0x2a8f5c29, 0x24b33db0, 0x247ae148, 0x00fba882, 0x2a8f5c29, 0x26fe718b, 0x247ae148, 0x00fba882}, + {128000, 0x4e666666, 0x1cd5f99c, 0x2570a3d7, 0x010c6f7a, 0x50a3d70a, 0x192a7371, 0x2570a3d7, 0x010c6f7a}, + {148000, 0x60000000, 0x00000000, 0x26147ae1, 0x00000000, 0x60000000, 0x00000000, 0x26147ae1, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab32000[] = { + { 16000, 0x1199999a, 0x20c49ba6, 0x00000000, 0x4577d955, 0x00000000, 0x60fe4799, 0x00000000, 0x00000000}, + { 24000, 0x1999999a, 0x0fba8827, 0x10f5c28f, 0x1b866e44, 0x17ae147b, 0x0fba8827, 0x00000000, 0x4d551d69}, + { 32000, 0x1d70a3d7, 0x07357e67, 0x17ae147b, 0x09d49518, 0x1b851eb8, 0x0a7c5ac4, 0x12e147ae, 0x110a137f}, + { 48000, 0x20f5c28f, 0x049667b6, 0x1c7ae148, 0x053e2d62, 0x20a3d70a, 0x053e2d62, 0x1b333333, 0x05e5f30e}, + { 64000, 0x23333333, 0x029f16b1, 0x1f0a3d71, 0x02f2f987, 0x23333333, 0x029f16b1, 0x1e147ae1, 0x03eea20a}, + { 96000, 0x25c28f5c, 0x2c3c9eed, 0x21eb851f, 0x01f75105, 0x25c28f5c, 0x0a7c5ac4, 0x21eb851f, 0x01a36e2f}, + {128000, 0x50f5c28f, 0x18a43bb4, 0x23d70a3d, 0x010c6f7a, 0x30000000, 0x168b5cc0, 0x23851eb8, 0x0192a737}, + {148000, 0x60000000, 0x00000000, 0x247ae148, 0x00dfb23b, 0x3dc28f5c, 0x300f4aaf, 0x247ae148, 0x01bf6476}, + {160000, 0x60000000, 0xb15b5740, 0x24cccccd, 0x053e2d62, 0x4f5c28f6, 0xbefd0072, 0x251eb852, 0x04fb1184}, + {200000, 0x00000000, 0x00000000, 0x2b333333, 0x0836be91, 0x00000000, 0x00000000, 0x2b333333, 0x0890390f}, + {320000, 0x00000000, 0x00000000, 0x4947ae14, 0x00000000, 0x00000000, 0x00000000, 0x4a8f5c29, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab44100[] = { + { 16000, 0x10a3d70a, 0x1797cc3a, 0x00000000, 0x00000000, 0x00000000, 0x59210386, 0x00000000, 0x00000000}, + { 24000, 0x16666666, 0x1797cc3a, 0x00000000, 0x639d5e4a, 0x15c28f5c, 0x12599ed8, 0x00000000, 0x5bc01a37}, + { 32000, 0x1c28f5c3, 0x049667b6, 0x1851eb85, 0x049667b6, 0x1a3d70a4, 0x088509c0, 0x16666666, 0x053e2d62}, + { 48000, 0x1e666666, 0x05e5f30e, 0x1a8f5c29, 0x049667b6, 0x1e666666, 0x05e5f30e, 0x18f5c28f, 0x05e5f30e}, + { 64000, 0x2147ae14, 0x0346dc5d, 0x1ccccccd, 0x02f2f987, 0x2147ae14, 0x02f2f987, 0x1bd70a3d, 0x039abf34}, + { 96000, 0x247ae148, 0x068db8bb, 0x1fae147b, 0x029f16b1, 0x2428f5c3, 0x0639d5e5, 0x1f5c28f6, 0x029f16b1}, + {128000, 0x2ae147ae, 0x1b435265, 0x223d70a4, 0x0192a737, 0x2a3d70a4, 0x1040bfe4, 0x21eb851f, 0x0192a737}, + {148000, 0x3b851eb8, 0x2832069c, 0x23333333, 0x00dfb23b, 0x3428f5c3, 0x2054c288, 0x22e147ae, 0x00dfb23b}, + {160000, 0x4a3d70a4, 0xc32ebe5a, 0x23851eb8, 0x01d5c316, 0x40000000, 0xcb923a2b, 0x23333333, 0x01d5c316}, + {200000, 0x00000000, 0x00000000, 0x25c28f5c, 0x0713f078, 0x00000000, 0x00000000, 0x2570a3d7, 0x072a4f17}, + {320000, 0x00000000, 0x00000000, 0x3fae147b, 0x00000000, 0x00000000, 0x00000000, 0x3fae147b, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab48000[] = { + { 16000, 0x0f5c28f6, 0x31ceaf25, 0x00000000, 0x00000000, 0x00000000, 0x74a771c9, 0x00000000, 0x00000000}, + { 24000, 0x1b851eb8, 0x029f16b1, 0x00000000, 0x663c74fb, 0x1c7ae148, 0xe47991bd, 0x00000000, 0x49667b5f}, + { 32000, 0x1c28f5c3, 0x029f16b1, 0x18f5c28f, 0x07357e67, 0x15c28f5c, 0x0f12c27a, 0x11eb851f, 0x13016484}, + { 48000, 0x1d70a3d7, 0x053e2d62, 0x1c7ae148, 0xfe08aefc, 0x1d1eb852, 0x068db8bb, 0x1b333333, 0xfeb074a8}, + { 64000, 0x20000000, 0x03eea20a, 0x1b851eb8, 0x0346dc5d, 0x2051eb85, 0x0346dc5d, 0x1a8f5c29, 0x039abf34}, + { 96000, 0x23d70a3d, 0x053e2d62, 0x1eb851ec, 0x029f16b1, 0x23851eb8, 0x04ea4a8c, 0x1e147ae1, 0x02f2f987}, + {128000, 0x28f5c28f, 0x14727dcc, 0x2147ae14, 0x0218def4, 0x2851eb85, 0x0e27e0f0, 0x20f5c28f, 0x0218def4}, + {148000, 0x3570a3d7, 0x1cd5f99c, 0x228f5c29, 0x01bf6476, 0x30f5c28f, 0x18777e75, 0x223d70a4, 0x01bf6476}, + {160000, 0x40000000, 0xcb923a2b, 0x23333333, 0x0192a737, 0x39eb851f, 0xd08d4bae, 0x22e147ae, 0x0192a737}, + {200000, 0x00000000, 0x00000000, 0x251eb852, 0x06775a1b, 0x00000000, 0x00000000, 0x24cccccd, 0x06a4175a}, + {320000, 0x00000000, 0x00000000, 0x3ccccccd, 0x00000000, 0x00000000, 0x00000000, 0x3d1eb852, 0x00000000} +}; + +static const BITS2PE_CFG_TAB bits2PeConfigTab[] = { + { 16000, S_Bits2PeTab16000, sizeof(S_Bits2PeTab16000)/sizeof(BIT_PE_SFAC) }, + { 22050, S_Bits2PeTab22050, sizeof(S_Bits2PeTab22050)/sizeof(BIT_PE_SFAC) }, + { 24000, S_Bits2PeTab24000, sizeof(S_Bits2PeTab24000)/sizeof(BIT_PE_SFAC) }, + { 32000, S_Bits2PeTab32000, sizeof(S_Bits2PeTab32000)/sizeof(BIT_PE_SFAC) }, + { 44100, S_Bits2PeTab44100, sizeof(S_Bits2PeTab44100)/sizeof(BIT_PE_SFAC) }, + { 48000, S_Bits2PeTab48000, sizeof(S_Bits2PeTab48000)/sizeof(BIT_PE_SFAC) } +}; + + + /* values for avoid hole flag */ enum _avoid_hole_state { NO_AH =0, @@ -135,6 +246,99 @@ enum _avoid_hole_state { #define Q_BITFAC (24) /* Q scaling used in FDKaacEnc_bitresCalcBitFac() calculation */ #define Q_AVGBITS (17) /* scale bit values */ + +/***************************************************************************** + functionname: FDKaacEnc_InitBits2PeFactor + description: retrieve bits2PeFactor from table +*****************************************************************************/ +static void FDKaacEnc_InitBits2PeFactor( + FIXP_DBL *bits2PeFactor_m, + INT *bits2PeFactor_e, + const INT bitRate, + const INT nChannels, + const INT sampleRate, + const INT advancedBitsToPe, + const INT invQuant + ) +{ + /* default bits2pe factor */ + FIXP_DBL bit2PE_m = FL2FXCONST_DBL(1.18f/(1<<(1))); + INT bit2PE_e = 1; + + /* make use of advanced bits to pe factor table */ + if (advancedBitsToPe) { + + int i; + const BIT_PE_SFAC *peTab = NULL; + INT size = 0; + + + /* Get correct table entry */ + for (i=0; i<(INT)(sizeof(bits2PeConfigTab)/sizeof(BITS2PE_CFG_TAB)); i++) { + if (sampleRate >= bits2PeConfigTab[i].sampleRate) { + peTab = bits2PeConfigTab[i].pPeTab; + size = bits2PeConfigTab[i].nEntries; + } + } + + if ( (peTab!=NULL) && (size!=0) ) { + + INT startB = -1; + LONG startPF = 0; + LONG peSlope = 0; + + /* stereo or mono mode and invQuant used or not */ + for (i=0; ibitRate) || ((i==size-2)) )) + { + if (nChannels==1) + { + startPF = (!invQuant) ? peTab[i].bits2PeFactor_mono : peTab[i].bits2PeFactor_mono_scfOpt; + peSlope = (!invQuant) ? peTab[i].bits2PeFactor_mono_slope : peTab[i].bits2PeFactor_mono_scfOpt_slope; + /*endPF = (!invQuant) ? peTab[i+1].bits2PeFactor_mono : peTab[i+1].bits2PeFactor_mono_scfOpt; + endB=peTab[i+1].bitrate;*/ + startB=peTab[i].bitrate; + break; + } + else + { + startPF = (!invQuant) ? peTab[i].bits2PeFactor_stereo : peTab[i].bits2PeFactor_stereo_scfOpt; + peSlope = (!invQuant) ? peTab[i].bits2PeFactor_stereo_slope : peTab[i].bits2PeFactor_stereo_scfOpt_slope; + /*endPF = (!invQuant) ? peTab[i+1].bits2PeFactor_stereo : peTab[i+1].bits2PeFactor_stereo_scfOpt; + endB=peTab[i+1].bitrate;*/ + startB=peTab[i].bitrate; + break; + } + } + } /* for i */ + + /* if a configuration is available */ + if (startB!=-1) { + /* linear interpolate to actual PEfactor */ + FIXP_DBL peFac = fMult((FIXP_DBL)(bitRate-startB)<<14, (FIXP_DBL)peSlope) << 2; + FIXP_DBL bit2PE = peFac + (FIXP_DBL)startPF; /* startPF_float = startPF << 2 */ + + /* sanity check if bits2pe value is high enough */ + if ( bit2PE >= (FL2FXCONST_DBL(0.35f) >> 2) ) { + bit2PE_m = bit2PE; + bit2PE_e = 2; /* table is fixed scaled */ + } + } /* br */ + } /* sr */ + } /* advancedBitsToPe */ + + + /* return bits2pe factor */ + *bits2PeFactor_m = bit2PE_m; + *bits2PeFactor_e = bit2PE_e; +} + + +/***************************************************************************** +functionname: FDKaacEnc_bits2pe2 +description: convert from bits to pe +*****************************************************************************/ static INT FDKaacEnc_bits2pe2( const INT bits, const FIXP_DBL factor_m, @@ -450,22 +654,23 @@ void FDKaacEnc_calcWeighting(PE_DATA *peData, FIXP_DBL nrgSum14, nrgSum12, nrgSum34, nrgTotal; FIXP_DBL nrgFacLd_14, nrgFacLd_12, nrgFacLd_34; INT usePatch, exePatch; - int sfb, nLinesSum = 0; + int sfb, sfbGrp, nLinesSum = 0; nrgSum14 = nrgSum12 = nrgSum34 = nrgTotal = FL2FXCONST_DBL(0.f); /* calculate flatness of audible spectrum, i.e. spectrum above masking threshold. */ - for (sfb = 0; sfb < psyOutChan->sfbCnt; sfb++) { - - FIXP_DBL nrgFac12 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfb]>>1); /* nrg^(1/2) */ - FIXP_DBL nrgFac14 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfb]>>2); /* nrg^(1/4) */ + for (sfbGrp = 0;sfbGrp < psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutChannel[ch]->sfbPerGroup) { + for (sfb=0; sfbmaxSfbPerGroup; sfb++) { + FIXP_DBL nrgFac12 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>1); /* nrg^(1/2) */ + FIXP_DBL nrgFac14 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>2); /* nrg^(1/4) */ /* maximal number of bands is 64, results scaling factor 6 */ - nLinesSum += peData->peChannelData[ch].sfbNLines[sfb]; /* relevant lines */ - nrgTotal += ( psyOutChan->sfbEnergy[sfb] >> 6 ); /* sum up nrg */ + nLinesSum += peData->peChannelData[ch].sfbNLines[sfbGrp+sfb]; /* relevant lines */ + nrgTotal += ( psyOutChan->sfbEnergy[sfbGrp+sfb] >> 6 ); /* sum up nrg */ nrgSum12 += ( nrgFac12 >> 6 ); /* sum up nrg^(2/4) */ nrgSum14 += ( nrgFac14 >> 6 ); /* sum up nrg^(1/4) */ nrgSum34 += ( fMult(nrgFac14, nrgFac12) >> 6 ); /* sum up nrg^(3/4) */ + } } nrgTotal = CalcLdData(nrgTotal); /* get ld64 of total nrg */ @@ -479,32 +684,35 @@ void FDKaacEnc_calcWeighting(PE_DATA *peData, usePatch = (adjThrStateElement->chaosMeasureEnFac[ch] > FL2FXCONST_DBL(0.78125f)); exePatch = ((usePatch) && (adjThrStateElement->lastEnFacPatch[ch])); - for (sfb = 0; sfb < psyOutChan->sfbCnt; sfb++) { + for (sfbGrp = 0;sfbGrp < psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutChannel[ch]->sfbPerGroup) { + for (sfb=0; sfbmaxSfbPerGroup; sfb++) { + INT sfbExePatch; /* for MS coupled SFBs, also execute patch in side channel if done in mid channel */ - if ((ch == 1) && (toolsInfo->msMask[sfb])) { + if ((ch == 1) && (toolsInfo->msMask[sfbGrp+sfb])) { sfbExePatch = exePatchM; } else { sfbExePatch = exePatch; } - if ( (sfbExePatch) && (psyOutChan->sfbEnergy[sfb]>FL2FXCONST_DBL(0.f)) ) + if ( (sfbExePatch) && (psyOutChan->sfbEnergy[sfbGrp+sfb]>FL2FXCONST_DBL(0.f)) ) { /* execute patch based on spectral flatness calculated above */ if (adjThrStateElement->chaosMeasureEnFac[ch] > FL2FXCONST_DBL(0.8125f)) { - qcOutChannel[ch]->sfbEnFacLd[sfb] = ( (nrgFacLd_14 + (psyOutChan->sfbEnergyLdData[sfb]+(psyOutChan->sfbEnergyLdData[sfb]>>1)))>>1 ); /* sfbEnergy^(3/4) */ + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = ( (nrgFacLd_14 + (psyOutChan->sfbEnergyLdData[sfbGrp+sfb]+(psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>1)))>>1 ); /* sfbEnergy^(3/4) */ } else if (adjThrStateElement->chaosMeasureEnFac[ch] > FL2FXCONST_DBL(0.796875f)) { - qcOutChannel[ch]->sfbEnFacLd[sfb] = ( (nrgFacLd_12 + psyOutChan->sfbEnergyLdData[sfb])>>1 ); /* sfbEnergy^(2/4) */ + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = ( (nrgFacLd_12 + psyOutChan->sfbEnergyLdData[sfbGrp+sfb])>>1 ); /* sfbEnergy^(2/4) */ } else { - qcOutChannel[ch]->sfbEnFacLd[sfb] = ( (nrgFacLd_34 + (psyOutChan->sfbEnergyLdData[sfb]>>1))>>1 ); /* sfbEnergy^(1/4) */ + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = ( (nrgFacLd_34 + (psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>1))>>1 ); /* sfbEnergy^(1/4) */ } - qcOutChannel[ch]->sfbEnFacLd[sfb] = fixMin(qcOutChannel[ch]->sfbEnFacLd[sfb],(FIXP_DBL)0); + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = fixMin(qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb],(FIXP_DBL)0); } + } } /* sfb loop */ adjThrStateElement->lastEnFacPatch[ch] = usePatch; @@ -735,7 +943,6 @@ static FIXP_DBL FDKaacEnc_calcChaosMeasure(PSY_OUT_CHANNEL *psyOutChannel, return chaosMeasure; } - /* apply reduction formula for VBR-mode */ static void FDKaacEnc_reduceThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], PSY_OUT_CHANNEL* psyOutChannel[(2)], @@ -923,7 +1130,6 @@ static void FDKaacEnc_reduceThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], } } - /***************************************************************************** functionname: FDKaacEnc_correctThresh description: if pe difference deltaPe between desired pe and real pe is small enough, @@ -931,12 +1137,12 @@ the difference can be distributed among the scale factor bands. New thresholds can be derived from this pe-difference *****************************************************************************/ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], - UCHAR ahFlag[(6)][(2)][MAX_GROUPED_SFB], - FIXP_DBL thrExp[(6)][(2)][MAX_GROUPED_SFB], - const FIXP_DBL redVal[(6)], - const SCHAR redValScaling[(6)], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], + UCHAR ahFlag[(8)][(2)][MAX_GROUPED_SFB], + FIXP_DBL thrExp[(8)][(2)][MAX_GROUPED_SFB], + const FIXP_DBL redVal[(8)], + const SCHAR redValScaling[(8)], const INT deltaPe, const INT processElements, const INT elementOffset) @@ -947,8 +1153,8 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, PE_CHANNEL_DATA *peChanData; FIXP_DBL thrFactorLdData; FIXP_DBL sfbEnLdData, sfbThrLdData, sfbThrReducedLdData; - FIXP_DBL *sfbPeFactorsLdData[(6)][(2)]; - FIXP_DBL sfbNActiveLinesLdData[(2)][MAX_GROUPED_SFB]; + FIXP_DBL *sfbPeFactorsLdData[(8)][(2)]; + FIXP_DBL sfbNActiveLinesLdData[(8)][(2)][MAX_GROUPED_SFB]; INT normFactorInt; FIXP_DBL normFactorLdData; @@ -979,13 +1185,13 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, for (sfb=0; sfbmaxSfbPerGroup; sfb++) { if ( peChanData->sfbNActiveLines[sfbGrp+sfb] == 0 ) { - sfbNActiveLinesLdData[ch][sfbGrp+sfb] = FL2FXCONST_DBL(-1.0f); + sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] = FL2FXCONST_DBL(-1.0f); } else { /* Both CalcLdInt and CalcLdData can be used! * No offset has to be subtracted, because sfbNActiveLinesLdData * is shorted while thrFactor calculation */ - sfbNActiveLinesLdData[ch][sfbGrp+sfb] = CalcLdInt(peChanData->sfbNActiveLines[sfbGrp+sfb]); + sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] = CalcLdInt(peChanData->sfbNActiveLines[sfbGrp+sfb]); } if ( ((ahFlag[elementId][ch][sfbGrp+sfb] < AH_ACTIVE) || (deltaPe > 0)) && peChanData->sfbNActiveLines[sfbGrp+sfb] != 0 ) @@ -1002,14 +1208,14 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, - (FIXP_DBL)(minScale<<(DFRACT_BITS-1-LD_DATA_SHIFT)); if (sumLd < FL2FXCONST_DBL(0.f)) { - sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[ch][sfbGrp+sfb] - sumLd; + sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] - sumLd; } else { - if ( sfbNActiveLinesLdData[ch][sfbGrp+sfb] > (FL2FXCONST_DBL(-1.f) + sumLd) ) { - sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[ch][sfbGrp+sfb] - sumLd; + if ( sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] > (FL2FXCONST_DBL(-1.f) + sumLd) ) { + sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] - sumLd; } else { - sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[ch][sfbGrp+sfb]; + sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb]; } } @@ -1050,7 +1256,7 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, } else { /* new threshold */ - FIXP_DBL tmp = CalcInvLdData(sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] + normFactorLdData - sfbNActiveLinesLdData[ch][sfbGrp+sfb] - FL2FXCONST_DBL((float)LD_DATA_SHIFT/LD_DATA_SCALING)); + FIXP_DBL tmp = CalcInvLdData(sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] + normFactorLdData - sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] - FL2FXCONST_DBL((float)LD_DATA_SHIFT/LD_DATA_SCALING)); /* limit thrFactor to 60dB */ tmp = (deltaPe<0) ? tmp : (-tmp); @@ -1102,9 +1308,9 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, reducing minSnr *****************************************************************************/ void FDKaacEnc_reduceMinSnr(CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], - UCHAR ahFlag[(6)][(2)][MAX_GROUPED_SFB], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], + UCHAR ahFlag[(8)][(2)][MAX_GROUPED_SFB], const INT desiredPe, INT* redPeGlobal, const INT processElements, @@ -1204,10 +1410,10 @@ bail: bands have to be quantized to zero *****************************************************************************/ static void FDKaacEnc_allowMoreHoles(CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], - ATS_ELEMENT* AdjThrStateElement[(6)], - UCHAR ahFlag[(6)][(2)][MAX_GROUPED_SFB], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], + ATS_ELEMENT* AdjThrStateElement[(8)], + UCHAR ahFlag[(8)][(2)][MAX_GROUPED_SFB], const INT desiredPe, const INT currentPe, const int processElements, @@ -1439,17 +1645,17 @@ functionname: FDKaacEnc_adaptThresholdsToPe description: two guesses for the reduction value and one final correction of the thresholds *****************************************************************************/ static void FDKaacEnc_adaptThresholdsToPe(CHANNEL_MAPPING* cm, - ATS_ELEMENT* AdjThrStateElement[(6)], - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], + ATS_ELEMENT* AdjThrStateElement[(8)], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], const INT desiredPe, const INT processElements, const INT elementOffset) { - FIXP_DBL redValue[(6)]; - SCHAR redValScaling[(6)]; - UCHAR pAhFlag[(6)][(2)][MAX_GROUPED_SFB]; - FIXP_DBL pThrExp[(6)][(2)][MAX_GROUPED_SFB]; + FIXP_DBL redValue[(8)]; + SCHAR redValScaling[(8)]; + UCHAR pAhFlag[(8)][(2)][MAX_GROUPED_SFB]; + FIXP_DBL pThrExp[(8)][(2)][MAX_GROUPED_SFB]; int iter; INT constPartGlobal, noRedPeGlobal, nActiveLinesGlobal, redPeGlobal; @@ -1683,7 +1889,6 @@ static void FDKaacEnc_adaptThresholdsToPe(CHANNEL_MAPPING* cm, } - /* similar to FDKaacEnc_adaptThresholdsToPe(), for VBR-mode */ void FDKaacEnc_AdaptThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], PSY_OUT_CHANNEL* psyOutChannel[(2)], @@ -1692,8 +1897,14 @@ void FDKaacEnc_AdaptThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], PE_DATA *peData, const INT nChannels) { - UCHAR pAhFlag[(2)][MAX_GROUPED_SFB]; - FIXP_DBL pThrExp[(2)][MAX_GROUPED_SFB]; + UCHAR (*pAhFlag)[MAX_GROUPED_SFB]; + FIXP_DBL (*pThrExp)[MAX_GROUPED_SFB]; + + /* allocate scratch memory */ + C_ALLOC_SCRATCH_START(_pAhFlag, UCHAR, (2)*MAX_GROUPED_SFB) + C_ALLOC_SCRATCH_START(_pThrExp, FIXP_DBL, (2)*MAX_GROUPED_SFB) + pAhFlag = (UCHAR(*)[MAX_GROUPED_SFB])_pAhFlag; + pThrExp = (FIXP_DBL(*)[MAX_GROUPED_SFB])_pThrExp; /* thresholds to the power of redExp */ FDKaacEnc_calcThreshExp(pThrExp, qcOutChannel, psyOutChannel, nChannels); @@ -1711,6 +1922,9 @@ void FDKaacEnc_AdaptThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], AdjThrStateElement->vbrQualFactor, &AdjThrStateElement->chaosMeasureOld); + /* free scratch memory */ + C_ALLOC_SCRATCH_END(_pThrExp, FIXP_DBL, (2)*MAX_GROUPED_SFB) + C_ALLOC_SCRATCH_END(_pAhFlag, UCHAR, (2)*MAX_GROUPED_SFB) } @@ -2002,95 +2216,112 @@ bail: functionname: FDKaacEnc_AdjThrInit description: initialize ADJ_THR_STATE *****************************************************************************/ -void FDKaacEnc_AdjThrInit(ADJ_THR_STATE *hAdjThr, - const INT meanPe, - ELEMENT_BITS *elBits[(6)], - INT nElements, - FIXP_DBL vbrQualFactor) +void FDKaacEnc_AdjThrInit( + ADJ_THR_STATE *hAdjThr, + const INT meanPe, + ELEMENT_BITS *elBits[(8)], + INT invQuant, + INT nElements, + INT nChannelsEff, + INT sampleRate, + INT advancedBitsToPe, + FIXP_DBL vbrQualFactor + ) { - INT i; + INT i; - FIXP_DBL POINT8 = FL2FXCONST_DBL(0.8f); - FIXP_DBL POINT6 = FL2FXCONST_DBL(0.6f); + FIXP_DBL POINT8 = FL2FXCONST_DBL(0.8f); + FIXP_DBL POINT6 = FL2FXCONST_DBL(0.6f); + + /* common for all elements: */ + /* parameters for bitres control */ + hAdjThr->bresParamLong.clipSaveLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamLong.clipSaveHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ + hAdjThr->bresParamLong.minBitSave = (FIXP_DBL)0xf999999a; /* FL2FXCONST_DBL(-0.05f); */ + hAdjThr->bresParamLong.maxBitSave = (FIXP_DBL)0x26666666; /* FL2FXCONST_DBL(0.3f); */ + hAdjThr->bresParamLong.clipSpendLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamLong.clipSpendHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ + hAdjThr->bresParamLong.minBitSpend = (FIXP_DBL)0xf3333333; /* FL2FXCONST_DBL(-0.10f); */ + hAdjThr->bresParamLong.maxBitSpend = (FIXP_DBL)0x33333333; /* FL2FXCONST_DBL(0.4f); */ + + hAdjThr->bresParamShort.clipSaveLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamShort.clipSaveHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ + hAdjThr->bresParamShort.minBitSave = (FIXP_DBL)0x00000000; /* FL2FXCONST_DBL(0.0f); */ + hAdjThr->bresParamShort.maxBitSave = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamShort.clipSpendLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamShort.clipSpendHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ + hAdjThr->bresParamShort.minBitSpend = (FIXP_DBL)0xf9999998; /* FL2FXCONST_DBL(-0.05f); */ + hAdjThr->bresParamShort.maxBitSpend = (FIXP_DBL)0x40000000; /* FL2FXCONST_DBL(0.5f); */ + + /* specific for each element: */ + for (i=0; iadjThrStateElem[i]; + MINSNR_ADAPT_PARAM *msaParam = &atsElem->minSnrAdaptParam; + INT chBitrate = elBits[i]->chBitrateEl; - /* common for all elements: */ /* parameters for bitres control */ - hAdjThr->bresParamLong.clipSaveLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamLong.clipSaveHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ - hAdjThr->bresParamLong.minBitSave = (FIXP_DBL)0xf999999a; /* FL2FXCONST_DBL(-0.05f); */ - hAdjThr->bresParamLong.maxBitSave = (FIXP_DBL)0x26666666; /* FL2FXCONST_DBL(0.3f); */ - hAdjThr->bresParamLong.clipSpendLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamLong.clipSpendHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ - hAdjThr->bresParamLong.minBitSpend = (FIXP_DBL)0xf3333333; /* FL2FXCONST_DBL(-0.10f); */ - hAdjThr->bresParamLong.maxBitSpend = (FIXP_DBL)0x33333333; /* FL2FXCONST_DBL(0.4f); */ + atsElem->peMin = fMultI(POINT8, meanPe) >> 1; + atsElem->peMax = fMultI(POINT6, meanPe); - hAdjThr->bresParamShort.clipSaveLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamShort.clipSaveHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ - hAdjThr->bresParamShort.minBitSave = (FIXP_DBL)0x00000000; /* FL2FXCONST_DBL(0.0f); */ - hAdjThr->bresParamShort.maxBitSave = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamShort.clipSpendLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamShort.clipSpendHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ - hAdjThr->bresParamShort.minBitSpend = (FIXP_DBL)0xf9999998; /* FL2FXCONST_DBL(-0.05f); */ - hAdjThr->bresParamShort.maxBitSpend = (FIXP_DBL)0x40000000; /* FL2FXCONST_DBL(0.5f); */ + /* for use in FDKaacEnc_reduceThresholdsVBR */ + atsElem->chaosMeasureOld = FL2FXCONST_DBL(0.3f); - /* specific for each element: */ - for (i=0; iadjThrStateElem[i]; - MINSNR_ADAPT_PARAM *msaParam = &atsElem->minSnrAdaptParam; - INT chBitrate = elBits[i]->chBitrateEl; + /* additional pe offset to correct pe2bits for low bitrates */ + atsElem->peOffset = 0; - /* parameters for bitres control */ - atsElem->peMin = fMultI(POINT8, meanPe) >> 1; - atsElem->peMax = fMultI(POINT6, meanPe); - - /* for use in FDKaacEnc_reduceThresholdsVBR */ - atsElem->chaosMeasureOld = FL2FXCONST_DBL(0.3f); - - /* additional pe offset to correct pe2bits for low bitrates */ - atsElem->peOffset = 0; - - /* vbr initialisation */ - atsElem->vbrQualFactor = vbrQualFactor; - if (chBitrate < 32000) - { - atsElem->peOffset = fixMax(50, 100-fMultI((FIXP_DBL)0x666667, chBitrate)); - } - - /* avoid hole parameters */ - if (chBitrate > 20000) { - atsElem->ahParam.modifyMinSnr = TRUE; - atsElem->ahParam.startSfbL = 15; - atsElem->ahParam.startSfbS = 3; - } - else { - atsElem->ahParam.modifyMinSnr = FALSE; - atsElem->ahParam.startSfbL = 0; - atsElem->ahParam.startSfbS = 0; - } - - /* minSnr adaptation */ - msaParam->maxRed = FL2FXCONST_DBL(0.00390625f); /* 0.25f/64.0f */ - /* start adaptation of minSnr for avgEn/sfbEn > startRatio */ - msaParam->startRatio = FL2FXCONST_DBL(0.05190512648f); /* ld64(10.0f) */ - /* maximum minSnr reduction to minSnr^maxRed is reached for - avgEn/sfbEn >= maxRatio */ - /* msaParam->maxRatio = 1000.0f; */ - /*msaParam->redRatioFac = ((float)1.0f - msaParam->maxRed) / ((float)10.0f*log10(msaParam->startRatio/msaParam->maxRatio)/log10(2.0f)*(float)0.3010299956f);*/ - msaParam->redRatioFac = FL2FXCONST_DBL(-0.375f); /* -0.0375f * 10.0f */ - /*msaParam->redOffs = (float)1.0f - msaParam->redRatioFac * (float)10.0f * log10(msaParam->startRatio)/log10(2.0f) * (float)0.3010299956f;*/ - msaParam->redOffs = FL2FXCONST_DBL(0.021484375); /* 1.375f/64.0f */ - - /* init pe correction */ - atsElem->peCorrectionFactor_m = FL2FXCONST_DBL(0.5f); /* 1.0 */ - atsElem->peCorrectionFactor_e = 1; - - atsElem->dynBitsLast = -1; - atsElem->peLast = 0; - - /* init bits to pe factor */ - atsElem->bits2PeFactor_m = FL2FXCONST_DBL(1.18f/(1<<(1))); - atsElem->bits2PeFactor_e = 1; + /* vbr initialisation */ + atsElem->vbrQualFactor = vbrQualFactor; + if (chBitrate < 32000) + { + atsElem->peOffset = fixMax(50, 100-fMultI((FIXP_DBL)0x666667, chBitrate)); } + + /* avoid hole parameters */ + if (chBitrate > 20000) { + atsElem->ahParam.modifyMinSnr = TRUE; + atsElem->ahParam.startSfbL = 15; + atsElem->ahParam.startSfbS = 3; + } + else { + atsElem->ahParam.modifyMinSnr = FALSE; + atsElem->ahParam.startSfbL = 0; + atsElem->ahParam.startSfbS = 0; + } + + /* minSnr adaptation */ + msaParam->maxRed = FL2FXCONST_DBL(0.00390625f); /* 0.25f/64.0f */ + /* start adaptation of minSnr for avgEn/sfbEn > startRatio */ + msaParam->startRatio = FL2FXCONST_DBL(0.05190512648f); /* ld64(10.0f) */ + /* maximum minSnr reduction to minSnr^maxRed is reached for + avgEn/sfbEn >= maxRatio */ + /* msaParam->maxRatio = 1000.0f; */ + /*msaParam->redRatioFac = ((float)1.0f - msaParam->maxRed) / ((float)10.0f*log10(msaParam->startRatio/msaParam->maxRatio)/log10(2.0f)*(float)0.3010299956f);*/ + msaParam->redRatioFac = FL2FXCONST_DBL(-0.375f); /* -0.0375f * 10.0f */ + /*msaParam->redOffs = (float)1.0f - msaParam->redRatioFac * (float)10.0f * log10(msaParam->startRatio)/log10(2.0f) * (float)0.3010299956f;*/ + msaParam->redOffs = FL2FXCONST_DBL(0.021484375); /* 1.375f/64.0f */ + + /* init pe correction */ + atsElem->peCorrectionFactor_m = FL2FXCONST_DBL(0.5f); /* 1.0 */ + atsElem->peCorrectionFactor_e = 1; + + atsElem->dynBitsLast = -1; + atsElem->peLast = 0; + + /* init bits to pe factor */ + + /* init bits2PeFactor */ + FDKaacEnc_InitBits2PeFactor( + &atsElem->bits2PeFactor_m, + &atsElem->bits2PeFactor_e, + chBitrate, /* bitrate/channel*/ + nChannelsEff, /* number of channels */ + sampleRate, + advancedBitsToPe, + invQuant + ); + + } /* for nElements */ + } @@ -2154,6 +2385,67 @@ static void FDKaacEnc_FDKaacEnc_calcPeCorrection( } +static void FDKaacEnc_calcPeCorrectionLowBitRes( + FIXP_DBL *const correctionFac_m, + INT *const correctionFac_e, + const INT peLast, + const INT bitsLast, + const INT bitresLevel, + const INT nChannels, + const FIXP_DBL bits2PeFactor_m, + const INT bits2PeFactor_e + ) +{ + /* tuning params */ + const FIXP_DBL amp = FL2FXCONST_DBL(0.005); + const FIXP_DBL maxDiff = FL2FXCONST_DBL(0.25f); + + if (bitsLast > 0) { + + /* Estimate deviation of granted and used dynamic bits in previous frame, in PE units */ + const int bitsBalLast = peLast - FDKaacEnc_bits2pe2( + bitsLast, + bits2PeFactor_m, + bits2PeFactor_e); + + /* reserve n bits per channel */ + int headroom = (bitresLevel>=50*nChannels) ? 0 : (100*nChannels); + + /* in PE units */ + headroom = FDKaacEnc_bits2pe2( + headroom, + bits2PeFactor_m, + bits2PeFactor_e); + + /* + * diff = amp * ((bitsBalLast - headroom) / (bitresLevel + headroom) + * diff = max ( min ( diff, maxDiff, -maxDiff)) / 2 + */ + FIXP_DBL denominator = (FIXP_DBL)FDKaacEnc_bits2pe2(bitresLevel, bits2PeFactor_m, bits2PeFactor_e) + (FIXP_DBL)headroom; + + int scaling = 0; + FIXP_DBL diff = (bitsBalLast>=headroom) + ? fMult(amp, fDivNorm( (FIXP_DBL)(bitsBalLast - headroom), denominator, &scaling)) + : -fMult(amp, fDivNorm(-(FIXP_DBL)(bitsBalLast - headroom), denominator, &scaling)) ; + + scaling -= 1; /* divide by 2 */ + + diff = (scaling<=0) ? FDKmax( FDKmin (diff>>(-scaling), maxDiff>>1), -maxDiff>>1) + : FDKmax( FDKmin (diff, maxDiff>>(1+scaling)), -maxDiff>>(1+scaling)) << scaling; + + /* + * corrFac += diff + * corrFac = max ( min ( corrFac/2.f, 1.f/2.f, 0.75f/2.f ) ) + */ + *correctionFac_m = FDKmax(FDKmin((*correctionFac_m)+diff, FL2FXCONST_DBL(1.0f/2.f)), FL2FXCONST_DBL(0.75f/2.f)) ; + *correctionFac_e = 1; + } + else { + *correctionFac_m = FL2FXCONST_DBL(0.75/2.f); + *correctionFac_e = 1; + } +} + void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, ATS_ELEMENT *AdjThrStateElement, PSY_OUT_CHANNEL *psyOutChannel[(2)], @@ -2166,7 +2458,7 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, const INT bitresBits, const INT maxBitresBits, const FIXP_DBL maxBitFac, - const INT bitDistributenMode) + const INT bitDistributionMode) { FIXP_DBL bitFactor; INT noRedPe = peData->pe; @@ -2184,7 +2476,7 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, } if (grantedDynBits >= 1) { - if (bitDistributenMode!=0) { + if (bitDistributionMode!=0) { *grantedPe = FDKaacEnc_bits2pe2(grantedDynBits, AdjThrStateElement->bits2PeFactor_m, AdjThrStateElement->bits2PeFactor_e); } else @@ -2208,16 +2500,32 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, } /* correction of pe value */ - { - FDKaacEnc_FDKaacEnc_calcPeCorrection( - &AdjThrStateElement->peCorrectionFactor_m, - &AdjThrStateElement->peCorrectionFactor_e, - fixMin(*grantedPe, noRedPe), - AdjThrStateElement->peLast, - AdjThrStateElement->dynBitsLast, - AdjThrStateElement->bits2PeFactor_m, - AdjThrStateElement->bits2PeFactor_e + switch (bitDistributionMode) { + case 2: + case 1: + FDKaacEnc_calcPeCorrectionLowBitRes( + &AdjThrStateElement->peCorrectionFactor_m, + &AdjThrStateElement->peCorrectionFactor_e, + AdjThrStateElement->peLast, + AdjThrStateElement->dynBitsLast, + bitresBits, + nChannels, + AdjThrStateElement->bits2PeFactor_m, + AdjThrStateElement->bits2PeFactor_e ); + break; + case 0: + default: + FDKaacEnc_FDKaacEnc_calcPeCorrection( + &AdjThrStateElement->peCorrectionFactor_m, + &AdjThrStateElement->peCorrectionFactor_e, + fixMin(*grantedPe, noRedPe), + AdjThrStateElement->peLast, + AdjThrStateElement->dynBitsLast, + AdjThrStateElement->bits2PeFactor_m, + AdjThrStateElement->bits2PeFactor_e + ); + break; } *grantedPeCorr = (INT)(fMult((FIXP_DBL)(*grantedPe<peCorrectionFactor_m) >> (Q_AVGBITS-AdjThrStateElement->peCorrectionFactor_e)); @@ -2232,10 +2540,10 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, functionname: FDKaacEnc_AdjustThresholds description: adjust thresholds *****************************************************************************/ -void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(6)], - QC_OUT_ELEMENT* qcElement[(6)], +void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(8)], + QC_OUT_ELEMENT* qcElement[(8)], QC_OUT* qcOut, - PSY_OUT_ELEMENT* psyOutElement[(6)], + PSY_OUT_ELEMENT* psyOutElement[(8)], INT CBRbitrateMode, CHANNEL_MAPPING* cm) { @@ -2291,20 +2599,19 @@ void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(6)], } /* -end- element loop */ } - for (i=0; inElements; i++) { - int ch,sfb,sfbGrp; - /* no weighting of threholds and energies for mlout */ - /* weight energies and thresholds */ - for (ch=0; chelInfo[i].nChannelsInEl; ch++) { - QC_OUT_CHANNEL* pQcOutCh = qcElement[i]->qcOutChannel[ch]; - for (sfbGrp = 0;sfbGrp < psyOutElement[i]->psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutElement[i]->psyOutChannel[ch]->sfbPerGroup) { - for (sfb=0; sfbpsyOutChannel[ch]->maxSfbPerGroup; sfb++) { - pQcOutCh->sfbThresholdLdData[sfb+sfbGrp] += pQcOutCh->sfbEnFacLd[sfb+sfbGrp]; - } + for (i=0; inElements; i++) { + int ch,sfb,sfbGrp; + /* no weighting of threholds and energies for mlout */ + /* weight energies and thresholds */ + for (ch=0; chelInfo[i].nChannelsInEl; ch++) { + QC_OUT_CHANNEL* pQcOutCh = qcElement[i]->qcOutChannel[ch]; + for (sfbGrp = 0;sfbGrp < psyOutElement[i]->psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutElement[i]->psyOutChannel[ch]->sfbPerGroup) { + for (sfb=0; sfbpsyOutChannel[ch]->maxSfbPerGroup; sfb++) { + pQcOutCh->sfbThresholdLdData[sfb+sfbGrp] += pQcOutCh->sfbEnFacLd[sfb+sfbGrp]; } } } - + } } void FDKaacEnc_AdjThrClose(ADJ_THR_STATE** phAdjThr) @@ -2313,7 +2620,7 @@ void FDKaacEnc_AdjThrClose(ADJ_THR_STATE** phAdjThr) ADJ_THR_STATE* hAdjThr = *phAdjThr; if (hAdjThr!=NULL) { - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hAdjThr->adjThrStateElem[i]!=NULL) { FreeRam_aacEnc_AdjThrStateElement(&hAdjThr->adjThrStateElem[i]); } diff --git a/libAACenc/src/adj_thr.h b/libAACenc/src/adj_thr.h index 83d4c49..69b1dcc 100644 --- a/libAACenc/src/adj_thr.h +++ b/libAACenc/src/adj_thr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -98,23 +98,28 @@ amm-info@iis.fraunhofer.de #include "interface.h" - -void FDKaacEnc_peCalculation(PE_DATA *peData, - PSY_OUT_CHANNEL* psyOutChannel[(2)], - QC_OUT_CHANNEL* qcOutChannel[(2)], - struct TOOLSINFO *toolsInfo, - ATS_ELEMENT* adjThrStateElement, - const INT nChannels); +void FDKaacEnc_peCalculation( + PE_DATA *peData, + PSY_OUT_CHANNEL* psyOutChannel[(2)], + QC_OUT_CHANNEL* qcOutChannel[(2)], + struct TOOLSINFO *toolsInfo, + ATS_ELEMENT* adjThrStateElement, + const INT nChannels + ); INT FDKaacEnc_AdjThrNew(ADJ_THR_STATE** phAdjThr, INT nElements); void FDKaacEnc_AdjThrInit(ADJ_THR_STATE *hAdjThr, const INT peMean, - ELEMENT_BITS* elBits[(6)], + ELEMENT_BITS* elBits[(8)], + INT invQuant, INT nElements, + INT nChannelsEff, + INT sampleRate, + INT advancedBitsToPe, FIXP_DBL vbrQualFactor); - + void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, ATS_ELEMENT *AdjThrStateElement, @@ -128,12 +133,12 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, const INT bitresBits, const INT maxBitresBits, const FIXP_DBL maxBitFac, - const INT bitDistributenMode); + const INT bitDistributionMode); -void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(6)], - QC_OUT_ELEMENT* qcElement[(6)], +void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(8)], + QC_OUT_ELEMENT* qcElement[(8)], QC_OUT* qcOut, - PSY_OUT_ELEMENT* psyOutElement[(6)], + PSY_OUT_ELEMENT* psyOutElement[(8)], INT CBRbitrateMode, CHANNEL_MAPPING* cm); diff --git a/libAACenc/src/adj_thr_data.h b/libAACenc/src/adj_thr_data.h index d209a51..3eb7678 100644 --- a/libAACenc/src/adj_thr_data.h +++ b/libAACenc/src/adj_thr_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -144,7 +144,7 @@ typedef struct { typedef struct { BRES_PARAM bresParamLong, bresParamShort; - ATS_ELEMENT* adjThrStateElem[(6)]; + ATS_ELEMENT* adjThrStateElem[(8)]; } ADJ_THR_STATE; #endif diff --git a/libAACenc/src/band_nrg.cpp b/libAACenc/src/band_nrg.cpp index 0e46b45..861f7a8 100644 --- a/libAACenc/src/band_nrg.cpp +++ b/libAACenc/src/band_nrg.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/band_nrg.h b/libAACenc/src/band_nrg.h index cf4c4cb..540a8ef 100644 --- a/libAACenc/src/band_nrg.h +++ b/libAACenc/src/band_nrg.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bandwidth.cpp b/libAACenc/src/bandwidth.cpp index f6ca8ef..6fc7d87 100644 --- a/libAACenc/src/bandwidth.cpp +++ b/libAACenc/src/bandwidth.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -204,7 +204,6 @@ static INT GetBandwidthEntry( INT bwTabSize = 0; switch (frameLength) { - case 960: case 1024: pBwTab = bandWidthTable; bwTabSize = sizeof(bandWidthTable)/sizeof(BANDWIDTH_TAB); @@ -253,7 +252,6 @@ static INT GetBandwidthEntry( chanBitRate < pBwTab[i+1].chanBitRate) { switch (frameLength) { - case 960: case 1024: bandwidth = (entryNo==0) ? pBwTab[i].bandWidthMono @@ -318,6 +316,8 @@ AAC_ENCODER_ERROR FDKaacEnc_DetermineBandWidth(INT* bandWidth, case MODE_1_2_2: case MODE_1_2_2_1: case MODE_1_2_2_2_1: + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: *bandWidth = bandWidthTableVBR[bitrateMode].bandWidth2AndMoreChan; break; default: @@ -348,6 +348,8 @@ AAC_ENCODER_ERROR FDKaacEnc_DetermineBandWidth(INT* bandWidth, case MODE_1_2_2: /* sce + cpe + cpe */ case MODE_1_2_2_1: /* (5.1) sce + cpe + cpe + lfe */ case MODE_1_2_2_2_1: /* (7.1) sce + cpe + cpe + cpe + lfe */ + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: entryNo = 1; /* use stereo bandwith settings */ break; diff --git a/libAACenc/src/bandwidth.h b/libAACenc/src/bandwidth.h index 61c7f93..2e92453 100644 --- a/libAACenc/src/bandwidth.h +++ b/libAACenc/src/bandwidth.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bit_cnt.cpp b/libAACenc/src/bit_cnt.cpp index e89710e..926ee49 100644 --- a/libAACenc/src/bit_cnt.cpp +++ b/libAACenc/src/bit_cnt.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bit_cnt.h b/libAACenc/src/bit_cnt.h index 8650566..7c4b59e 100644 --- a/libAACenc/src/bit_cnt.h +++ b/libAACenc/src/bit_cnt.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bitenc.cpp b/libAACenc/src/bitenc.cpp index d2cb5af..8e477aa 100644 --- a/libAACenc/src/bitenc.cpp +++ b/libAACenc/src/bitenc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1360,7 +1360,7 @@ AAC_ENCODER_ERROR FDKaacEnc_WriteBitstream(HANDLE_TRANSPORTENC hTpEnc, if ( (syntaxFlags & AC_ER) && !(syntaxFlags & AC_DRM) ) { - UCHAR channelElementExtensionWritten[(6)][(1)]; /* 0: extension not touched, 1: extension already written */ + UCHAR channelElementExtensionWritten[(8)][(1)]; /* 0: extension not touched, 1: extension already written */ FDKmemclear(channelElementExtensionWritten, sizeof(channelElementExtensionWritten)); diff --git a/libAACenc/src/bitenc.h b/libAACenc/src/bitenc.h index 337ce38..498be7c 100644 --- a/libAACenc/src/bitenc.h +++ b/libAACenc/src/bitenc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/block_switch.cpp b/libAACenc/src/block_switch.cpp index 96fcb08..7b3e275 100644 --- a/libAACenc/src/block_switch.cpp +++ b/libAACenc/src/block_switch.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -83,7 +83,7 @@ amm-info@iis.fraunhofer.de /***************************** MPEG-4 AAC Encoder ************************** - Author(s): M. Werner + Author(s): M. Werner, Tobias Chalupka Description: Block switching ******************************************************************************/ @@ -100,9 +100,11 @@ amm-info@iis.fraunhofer.de static FIXP_DBL FDKaacEnc_GetWindowEnergy(const FIXP_DBL in[], const INT blSwWndIdx); -static void FDKaacEnc_CalcWindowEnergy( BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, - INT windowLen); - +static void FDKaacEnc_CalcWindowEnergy( + BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, + INT windowLen, + const INT_PCM *pTimeSignal + ); /****************** Constants *****************************/ /* LONG START SHORT STOP LOWOV */ @@ -145,20 +147,9 @@ static const FIXP_DBL minAttackNrg = (FL2FXCONST_DBL(1e+6f*NORM_PCM_ENERGY)>>BLO /**************** internal function prototypes ***********/ -static INT FDKaacEnc_GetWindowIndex(INT blockSwWindowIndex); - -static FIXP_DBL FDKaacEnc_GetWindowEnergy(const FIXP_DBL in[], const INT shortWndIdx); - -static void FDKaacEnc_CalcWindowEnergy( BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, - INT windowLen); - - - /****************** Routines ****************************/ void FDKaacEnc_InitBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, INT isLowDelay) { - /* note: the pointer to timeSignal can be zeroed here, because it is initialized for every call - to FDKaacEnc_BlockSwitching anew */ FDKmemclear (blockSwitchingControl, sizeof(BLOCK_SWITCHING_CONTROL)); if (isLowDelay) @@ -214,7 +205,7 @@ static const INT chgWndSqLkAhd[2][2][N_BLOCKTYPES] = /*attack */ {START_WINDOW, SHORT_WINDOW, SHORT_WINDOW, START_WINDOW, WRONG_WINDOW, WRONG_WINDOW} } /* attack */ }; -int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE) +int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE, const INT_PCM *pTimeSignal) { UINT i; FIXP_DBL enM1, enMax; @@ -263,7 +254,7 @@ int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, con /* Calculate unfiltered and filtered energies in subwindows and combine to segments */ - FDKaacEnc_CalcWindowEnergy(blockSwitchingControl, granuleLength>>(nBlockSwitchWindows==4? 2:3 )); + FDKaacEnc_CalcWindowEnergy(blockSwitchingControl, granuleLength>>(nBlockSwitchWindows==4? 2:3 ), pTimeSignal); /* now calculate if there is an attack */ @@ -335,8 +326,7 @@ static FIXP_DBL FDKaacEnc_GetWindowEnergy(const FIXP_DBL in[], const INT blSwWnd } - -static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, INT windowLen) +static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, INT windowLen, const INT_PCM *pTimeSignal) { INT i; UINT w; @@ -344,8 +334,6 @@ static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSw FIXP_SGL hiPassCoeff0 = hiPassCoeff[0]; FIXP_SGL hiPassCoeff1 = hiPassCoeff[1]; - INT_PCM *timeSignal = blockSwitchingControl->timeSignal; - /* sum up scalarproduct of timesignal as windowed Energies */ for (w=0; w < blockSwitchingControl->nBlockSwitchWindows; w++) { @@ -361,9 +349,9 @@ static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSw FIXP_DBL tempUnfiltered, tempFiltred, t1, t2; /* tempUnfiltered is scaled with 1 to prevent overflows during calculation of tempFiltred */ #if SAMPLE_BITS == DFRACT_BITS - tempUnfiltered = (FIXP_DBL) *timeSignal++ >> 1; + tempUnfiltered = (FIXP_DBL) *pTimeSignal++ >> 1; #else - tempUnfiltered = (FIXP_DBL) *timeSignal++ << (DFRACT_BITS-SAMPLE_BITS-1); + tempUnfiltered = (FIXP_DBL) *pTimeSignal++ << (DFRACT_BITS-SAMPLE_BITS-1); #endif t1 = fMultDiv2(hiPassCoeff1, tempUnfiltered-temp_iirState0); t2 = fMultDiv2(hiPassCoeff0, temp_iirState1); diff --git a/libAACenc/src/block_switch.h b/libAACenc/src/block_switch.h index 179e16b..e94b6f5 100644 --- a/libAACenc/src/block_switch.h +++ b/libAACenc/src/block_switch.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -107,7 +107,6 @@ amm-info@iis.fraunhofer.de /****************** Structures ***************************/ typedef struct{ - INT_PCM *timeSignal; INT lastWindowSequence; INT windowShape; INT lastWindowShape; @@ -136,7 +135,7 @@ typedef struct{ void FDKaacEnc_InitBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, INT isLowDelay); -int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE); +int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE, const INT_PCM *pTimeSignal); int FDKaacEnc_SyncBlockSwitching( BLOCK_SWITCHING_CONTROL *blockSwitchingControlLeft, diff --git a/libAACenc/src/channel_map.cpp b/libAACenc/src/channel_map.cpp index 6eddd47..99ed2b5 100644 --- a/libAACenc/src/channel_map.cpp +++ b/libAACenc/src/channel_map.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -124,7 +124,7 @@ amm-info@iis.fraunhofer.de typedef struct { CHANNEL_MODE encoderMode; - INT channel_assignment[/*(6)*/12]; + INT channel_assignment[/*(8)*/12]; } CHANNEL_ASSIGNMENT_INFO_TAB; @@ -139,6 +139,8 @@ static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabMpeg[] = { MODE_1_2_2, { 0, 1, 2, 3, 4,-1,-1,-1,-1,-1,-1,-1} }, /* 5ch */ { MODE_1_2_2_1, { 0, 1, 2, 3, 4, 5,-1,-1,-1,-1,-1,-1} }, /* 5.1ch */ { MODE_1_2_2_2_1, { 0, 1, 2, 3, 4, 5, 6, 7,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_REAR_SURROUND, { 0, 1, 2, 3, 4, 5, 6, 7,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_FRONT_CENTER, { 0, 1, 2, 3, 4, 5, 6, 7,-1,-1,-1,-1} } /* 7.1ch */ }; static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWav[] = @@ -150,7 +152,9 @@ static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWav[] = { MODE_1_2_1, { 2, 0, 1, 3,-1,-1,-1,-1,-1,-1,-1,-1} }, /* 4ch */ { MODE_1_2_2, { 2, 0, 1, 3, 4,-1,-1,-1,-1,-1,-1,-1} }, /* 5ch */ { MODE_1_2_2_1, { 2, 0, 1, 4, 5, 3,-1,-1,-1,-1,-1,-1} }, /* 5.1ch */ - { MODE_1_2_2_2_1, { 2, 0, 1, 6, 7, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_1_2_2_2_1, { 2, 6, 7, 0, 1, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_REAR_SURROUND, { 2, 0, 1, 6, 7, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_FRONT_CENTER, { 2, 6, 7, 0, 1, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ }; static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWg4[] = @@ -177,6 +181,8 @@ static const CHANNEL_MODE_CONFIG_TAB channelModeConfig[] = { MODE_1_2_2, 5, 5, 3 }, /* SCE,CPE,CPE */ { MODE_1_2_2_1, 6, 5, 4 }, /* SCE,CPE,CPE,LFE */ { MODE_1_2_2_2_1, 8, 7, 5 }, /* SCE,CPE,CPE,CPE,LFE */ + { MODE_7_1_REAR_SURROUND, 8, 7, 5 }, + { MODE_7_1_FRONT_CENTER, 8, 7, 5 }, }; #define MAX_MODES (sizeof(assignmentInfoTabWav)/sizeof(CHANNEL_ASSIGNMENT_INFO_TAB)) @@ -329,6 +335,8 @@ AAC_ENCODER_ERROR FDKaacEnc_InitChannelMapping(CHANNEL_MODE mode, CHANNEL_ORDER break; case MODE_1_2_2_2_1: + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: /* (7.1) sce + cpe + cpe + cpe + lfe */ FDKaacEnc_initElement(&cm->elInfo[0], ID_SCE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.18f)); FDKaacEnc_initElement(&cm->elInfo[1], ID_CPE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.26f)); @@ -336,14 +344,13 @@ AAC_ENCODER_ERROR FDKaacEnc_InitChannelMapping(CHANNEL_MODE mode, CHANNEL_ORDER FDKaacEnc_initElement(&cm->elInfo[3], ID_CPE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.26f)); FDKaacEnc_initElement(&cm->elInfo[4], ID_LFE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.04f)); break; - default: //*chMap=0; return AAC_ENC_UNSUPPORTED_CHANNELCONFIG; }; - FDK_ASSERT(cm->nElements<=(6)); + FDK_ASSERT(cm->nElements<=(8)); return AAC_ENC_OK; @@ -456,19 +463,18 @@ AAC_ENCODER_ERROR FDKaacEnc_InitElementBits(QC_STATE *hQC, break; } + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: + case MODE_1_2_2_2_1: { + int cpe3Idx = 3; + int lfeIdx = 4; - case MODE_1_2_2_2_1:{ - /* (7.1) sce + cpe + cpe + cpe + lfe */ - hQC->elementBits[0]->relativeBitsEl = cm->elInfo[0].relativeBits; - hQC->elementBits[1]->relativeBitsEl = cm->elInfo[1].relativeBits; - hQC->elementBits[2]->relativeBitsEl = cm->elInfo[2].relativeBits; - hQC->elementBits[3]->relativeBitsEl = cm->elInfo[3].relativeBits; - hQC->elementBits[4]->relativeBitsEl = cm->elInfo[4].relativeBits; - FIXP_DBL sceRate = cm->elInfo[0].relativeBits; - FIXP_DBL cpe1Rate = cm->elInfo[1].relativeBits; - FIXP_DBL cpe2Rate = cm->elInfo[2].relativeBits; - FIXP_DBL cpe3Rate = cm->elInfo[3].relativeBits; - FIXP_DBL lfeRate = cm->elInfo[4].relativeBits; + /* (7.1) sce + cpe + cpe + cpe + lfe */ + FIXP_DBL sceRate = hQC->elementBits[0]->relativeBitsEl = cm->elInfo[0].relativeBits; + FIXP_DBL cpe1Rate = hQC->elementBits[1]->relativeBitsEl = cm->elInfo[1].relativeBits; + FIXP_DBL cpe2Rate = hQC->elementBits[2]->relativeBitsEl = cm->elInfo[2].relativeBits; + FIXP_DBL cpe3Rate = hQC->elementBits[cpe3Idx]->relativeBitsEl = cm->elInfo[cpe3Idx].relativeBits; + FIXP_DBL lfeRate = hQC->elementBits[lfeIdx]->relativeBitsEl = cm->elInfo[lfeIdx].relativeBits; int maxBitsTot = maxChannelBits * 7; /* LFE does not add to bit reservoir */ int sc = CountLeadingBits(fixMax(maxChannelBits,averageBitsTot)); @@ -480,17 +486,16 @@ AAC_ENCODER_ERROR FDKaacEnc_InitElementBits(QC_STATE *hQC, hQC->elementBits[0]->chBitrateEl = fMult(sceRate, (FIXP_DBL)(bitrateTot<>sc_brTot; hQC->elementBits[1]->chBitrateEl = fMult(cpe1Rate, (FIXP_DBL)(bitrateTot<>(sc_brTot+1); hQC->elementBits[2]->chBitrateEl = fMult(cpe2Rate, (FIXP_DBL)(bitrateTot<>(sc_brTot+1); - hQC->elementBits[3]->chBitrateEl = fMult(cpe3Rate, (FIXP_DBL)(bitrateTot<>(sc_brTot+1); - hQC->elementBits[4]->chBitrateEl = fMult(lfeRate, (FIXP_DBL)(bitrateTot<>sc_brTot; + hQC->elementBits[cpe3Idx]->chBitrateEl = fMult(cpe3Rate, (FIXP_DBL)(bitrateTot<>(sc_brTot+1); + hQC->elementBits[lfeIdx]->chBitrateEl = fMult(lfeRate, (FIXP_DBL)(bitrateTot<>sc_brTot; hQC->elementBits[0]->maxBitsEl = maxChannelBits; hQC->elementBits[1]->maxBitsEl = 2*maxChannelBits; hQC->elementBits[2]->maxBitsEl = 2*maxChannelBits; - hQC->elementBits[3]->maxBitsEl = 2*maxChannelBits; - hQC->elementBits[4]->maxBitsEl = maxLfeBits; + hQC->elementBits[cpe3Idx]->maxBitsEl = 2*maxChannelBits; + hQC->elementBits[lfeIdx]->maxBitsEl = maxLfeBits; break; } - default: return AAC_ENC_UNSUPPORTED_CHANNELCONFIG; } @@ -532,6 +537,8 @@ ELEMENT_MODE FDKaacEnc_GetMonoStereoMode(const CHANNEL_MODE mode){ case MODE_1_2_2: case MODE_1_2_2_1: case MODE_1_2_2_2_1: + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: monoStereoSetting = EL_MODE_STEREO; break; default: /* error */ diff --git a/libAACenc/src/channel_map.h b/libAACenc/src/channel_map.h index 6d135d2..2cfb486 100644 --- a/libAACenc/src/channel_map.h +++ b/libAACenc/src/channel_map.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/chaosmeasure.cpp b/libAACenc/src/chaosmeasure.cpp index 9d6d77e..4e56e9e 100644 --- a/libAACenc/src/chaosmeasure.cpp +++ b/libAACenc/src/chaosmeasure.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/chaosmeasure.h b/libAACenc/src/chaosmeasure.h index 732cb09..44301c5 100644 --- a/libAACenc/src/chaosmeasure.h +++ b/libAACenc/src/chaosmeasure.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/dyn_bits.cpp b/libAACenc/src/dyn_bits.cpp index 8cac2ef..0c07109 100644 --- a/libAACenc/src/dyn_bits.cpp +++ b/libAACenc/src/dyn_bits.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/dyn_bits.h b/libAACenc/src/dyn_bits.h index e7f219b..ae78a4c 100644 --- a/libAACenc/src/dyn_bits.h +++ b/libAACenc/src/dyn_bits.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/grp_data.cpp b/libAACenc/src/grp_data.cpp index 4355295..465865f 100644 --- a/libAACenc/src/grp_data.cpp +++ b/libAACenc/src/grp_data.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/grp_data.h b/libAACenc/src/grp_data.h index eddd694..f061855 100644 --- a/libAACenc/src/grp_data.h +++ b/libAACenc/src/grp_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/intensity.cpp b/libAACenc/src/intensity.cpp index 632620a..3807233 100644 --- a/libAACenc/src/intensity.cpp +++ b/libAACenc/src/intensity.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -450,23 +450,24 @@ FDKaacEnc_finalizeIntensityDecision(const FIXP_DBL *hrrErr, const INT maxSfbPerGroup) { INT sfb,sfboffs, j; - INT startIsSfb = 0; - INT inIsBlock; - INT currentIsSfbCount; - FIXP_DBL overallHrrError; FIXP_DBL isScaleLast = FL2FXCONST_DBL(0.0f); - FIXP_DBL isRegionLoudness; + INT isStartValueFound = 0; for (sfboffs = 0; sfboffs < sfbCnt; sfboffs += sfbPerGroup) { - inIsBlock = 0; - currentIsSfbCount = 0; - overallHrrError = FL2FXCONST_DBL(0.0f); - isRegionLoudness = FL2FXCONST_DBL(0.0f); + INT startIsSfb = 0; + INT inIsBlock = 0; + INT currentIsSfbCount = 0; + FIXP_DBL overallHrrError = FL2FXCONST_DBL(0.0f); + FIXP_DBL isRegionLoudness = FL2FXCONST_DBL(0.0f); + for (sfb = 0; sfb < maxSfbPerGroup; sfb++) { if (isMask[sfboffs + sfb] == 1) { if (currentIsSfbCount == 0) { startIsSfb = sfboffs + sfb; + } + if (isStartValueFound==0) { isScaleLast = realIsScale[sfboffs + sfb]; + isStartValueFound = 1; } inIsBlock = 1; currentIsSfbCount++; @@ -510,6 +511,14 @@ FDKaacEnc_finalizeIntensityDecision(const FIXP_DBL *hrrErr, for(j = startIsSfb; j <= sfboffs + sfb; j++) { isMask[j] = 0; } + isScaleLast = FL2FXCONST_DBL(0.0f); + isStartValueFound = 0; + for (j=0; j < startIsSfb; j++) { + if (isMask[j]!=0) { + isScaleLast = realIsScale[j]; + isStartValueFound = 1; + } + } } currentIsSfbCount = 0; overallHrrError = FL2FXCONST_DBL(0.0f); diff --git a/libAACenc/src/intensity.h b/libAACenc/src/intensity.h index 12be8bc..2acc292 100644 --- a/libAACenc/src/intensity.h +++ b/libAACenc/src/intensity.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/interface.h b/libAACenc/src/interface.h index a1c3a96..51fb72a 100644 --- a/libAACenc/src/interface.h +++ b/libAACenc/src/interface.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -92,6 +92,7 @@ amm-info@iis.fraunhofer.de #define _INTERFACE_H #include "common_fix.h" +#include "FDK_audio.h" #include "psy_data.h" #include "aacenc_tns.h" @@ -155,9 +156,14 @@ typedef struct { typedef struct { - PSY_OUT_ELEMENT* psyOutElement[(6)]; - PSY_OUT_CHANNEL* pPsyOutChannels[(6)]; + PSY_OUT_ELEMENT* psyOutElement[(8)]; + PSY_OUT_CHANNEL* pPsyOutChannels[(8)]; }PSY_OUT; +inline int isLowDelay( AUDIO_OBJECT_TYPE aot ) +{ + return (aot==AOT_ER_AAC_LD || aot==AOT_ER_AAC_ELD); +} + #endif /* _INTERFACE_H */ diff --git a/libAACenc/src/line_pe.cpp b/libAACenc/src/line_pe.cpp index ba7a25d..f3c0dab 100644 --- a/libAACenc/src/line_pe.cpp +++ b/libAACenc/src/line_pe.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/line_pe.h b/libAACenc/src/line_pe.h index 2fcc958..3d5cfd5 100644 --- a/libAACenc/src/line_pe.h +++ b/libAACenc/src/line_pe.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/metadata_compressor.cpp b/libAACenc/src/metadata_compressor.cpp index 852c8bc..876de57 100644 --- a/libAACenc/src/metadata_compressor.cpp +++ b/libAACenc/src/metadata_compressor.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -421,7 +421,7 @@ static FIXP_DBL tc2Coeff( result = f2Pow(-exponent, DFRACT_BITS-1-METADATA_FRACT_BITS, &e_res); /* result = 1.0 - exp(-1.0/((t) * (f))) */ - result = FL2FXCONST_DBL(1.0f) - scaleValue(result, e_res); + result = (FIXP_DBL)MAXVAL_DBL - scaleValue(result, e_res); return result; } @@ -539,14 +539,25 @@ INT FDK_DRC_Generator_Initialize( drcComp->channelIdx[RS] = channelMapping.elInfo[2].ChannelIndex[1]; break; case MODE_1_2_2_2_1: /* 7.1 ch */ - drcComp->channelIdx[L] = channelMapping.elInfo[1].ChannelIndex[0]; - drcComp->channelIdx[R] = channelMapping.elInfo[1].ChannelIndex[1]; - drcComp->channelIdx[C] = channelMapping.elInfo[0].ChannelIndex[0]; - drcComp->channelIdx[LFE] = channelMapping.elInfo[4].ChannelIndex[0]; - drcComp->channelIdx[LS] = channelMapping.elInfo[2].ChannelIndex[0]; - drcComp->channelIdx[RS] = channelMapping.elInfo[2].ChannelIndex[1]; - drcComp->channelIdx[LS2] = channelMapping.elInfo[3].ChannelIndex[0]; - drcComp->channelIdx[RS2] = channelMapping.elInfo[3].ChannelIndex[1]; + case MODE_7_1_FRONT_CENTER: + drcComp->channelIdx[L] = channelMapping.elInfo[2].ChannelIndex[0]; /* l */ + drcComp->channelIdx[R] = channelMapping.elInfo[2].ChannelIndex[1]; /* r */ + drcComp->channelIdx[C] = channelMapping.elInfo[0].ChannelIndex[0]; /* c */ + drcComp->channelIdx[LFE] = channelMapping.elInfo[4].ChannelIndex[0]; /* lfe */ + drcComp->channelIdx[LS] = channelMapping.elInfo[3].ChannelIndex[0]; /* ls */ + drcComp->channelIdx[RS] = channelMapping.elInfo[3].ChannelIndex[1]; /* rs */ + drcComp->channelIdx[LS2] = channelMapping.elInfo[1].ChannelIndex[0]; /* lc */ + drcComp->channelIdx[RS2] = channelMapping.elInfo[1].ChannelIndex[1]; /* rc */ + break; + case MODE_7_1_REAR_SURROUND: + drcComp->channelIdx[L] = channelMapping.elInfo[1].ChannelIndex[0]; /* l */ + drcComp->channelIdx[R] = channelMapping.elInfo[1].ChannelIndex[1]; /* r */ + drcComp->channelIdx[C] = channelMapping.elInfo[0].ChannelIndex[0]; /* c */ + drcComp->channelIdx[LFE] = channelMapping.elInfo[4].ChannelIndex[0]; /* lfe */ + drcComp->channelIdx[LS] = channelMapping.elInfo[3].ChannelIndex[0]; /* lrear */ + drcComp->channelIdx[RS] = channelMapping.elInfo[3].ChannelIndex[1]; /* rrear */ + drcComp->channelIdx[LS2] = channelMapping.elInfo[2].ChannelIndex[0]; /* ls */ + drcComp->channelIdx[RS2] = channelMapping.elInfo[2].ChannelIndex[1]; /* rs */ break; case MODE_1_1: case MODE_1_1_1_1: @@ -832,12 +843,12 @@ INT FDK_DRC_Generator_Calc( FIXP_DBL accu; /* drcComp->smoothLevel[i] = (1-alpha) * drcComp->smoothLevel[i] + alpha * level; */ - accu = fMult((FL2FXCONST_DBL(1.f)-alpha), drcComp->smoothLevel[i]); + accu = fMult(((FIXP_DBL)MAXVAL_DBL-alpha), drcComp->smoothLevel[i]); accu += fMult(alpha,level); drcComp->smoothLevel[i] = accu; /* drcComp->smoothGain[i] = (1-alpha) * drcComp->smoothGain[i] + alpha * gain; */ - accu = fMult((FL2FXCONST_DBL(1.f)-alpha), drcComp->smoothGain[i]); + accu = fMult(((FIXP_DBL)MAXVAL_DBL-alpha), drcComp->smoothGain[i]); accu += fMult(alpha,gain); drcComp->smoothGain[i] = accu; } @@ -941,7 +952,7 @@ INT FDK_DRC_Generator_Calc( if ((drcComp->channelIdx[LS] >= 0) && (drcComp->channelIdx[LS2] >= 0)) tmp = fMult(FL2FXCONST_DBL(0.707f), tmp); /* 7.1ch */ /*if ((drcComp->channelIdx[RS] >= 0) && (drcComp->channelIdx[RS2] >= 0)) tmp *=0.707f;*/ /* 7.1ch */ if (drcComp->channelIdx[S] >= 0) tmp += fMultDiv2(slev, fMult(FL2FXCONST_DBL(0.7f), (FIXP_PCM)pSamples[drcComp->channelIdx[S]]))>>(DOWNMIX_SHIFT-1); /* S */ - if (drcComp->channelIdx[C] >= 0) tmp += fMultDiv2(clev, (FIXP_PCM)pSamples[drcComp->channelIdx[C]])>>(DOWNMIX_SHIFT-1); /* C */ + if (drcComp->channelIdx[C] >= 0) tmp += fMult(clev, (FIXP_PCM)pSamples[drcComp->channelIdx[C]])>>(DOWNMIX_SHIFT-1); /* C (2*clev) */ tmp += (FX_PCM2FX_DBL((FIXP_PCM)pSamples[drcComp->channelIdx[L]])>>DOWNMIX_SHIFT); /* L */ tmp += (FX_PCM2FX_DBL((FIXP_PCM)pSamples[drcComp->channelIdx[R]])>>DOWNMIX_SHIFT); /* R */ @@ -973,7 +984,7 @@ INT FDK_DRC_Generator_Calc( * + 0.2f*2^(-METADATA_FRACT_BITS) + drcComp->smoothGain[i] */ peak[i] = fMult((FIXP_DBL)(10<<(METADATA_FRACT_BITS+LD_DATA_SHIFT)), fMult( FL2FX_DBL(2*0.30102999566398119521373889472449f), ld_peak)); - peak[i] += (FL2FX_DBL(0.2f)>>METADATA_INT_BITS); /* add a little bit headroom */ + peak[i] += (FL2FX_DBL(0.5f)>>METADATA_INT_BITS); /* add a little bit headroom */ peak[i] += drcComp->smoothGain[i]; } diff --git a/libAACenc/src/metadata_compressor.h b/libAACenc/src/metadata_compressor.h index c77e79e..ff639b5 100644 --- a/libAACenc/src/metadata_compressor.h +++ b/libAACenc/src/metadata_compressor.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/metadata_main.cpp b/libAACenc/src/metadata_main.cpp index 45763a1..e920793 100644 --- a/libAACenc/src/metadata_main.cpp +++ b/libAACenc/src/metadata_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/metadata_main.h b/libAACenc/src/metadata_main.h index f747f9f..bfc8ae1 100644 --- a/libAACenc/src/metadata_main.h +++ b/libAACenc/src/metadata_main.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/ms_stereo.cpp b/libAACenc/src/ms_stereo.cpp index ab0cb1c..306d490 100644 --- a/libAACenc/src/ms_stereo.cpp +++ b/libAACenc/src/ms_stereo.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/ms_stereo.h b/libAACenc/src/ms_stereo.h index 5657ae2..2f3addb 100644 --- a/libAACenc/src/ms_stereo.h +++ b/libAACenc/src/ms_stereo.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/noisedet.cpp b/libAACenc/src/noisedet.cpp index 178a2ad..f3c51de 100644 --- a/libAACenc/src/noisedet.cpp +++ b/libAACenc/src/noisedet.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/noisedet.h b/libAACenc/src/noisedet.h index bccf4ee..8d5e365 100644 --- a/libAACenc/src/noisedet.h +++ b/libAACenc/src/noisedet.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pns_func.h b/libAACenc/src/pns_func.h index d1d8fb1..efa44ef 100644 --- a/libAACenc/src/pns_func.h +++ b/libAACenc/src/pns_func.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pnsparam.cpp b/libAACenc/src/pnsparam.cpp index 3426ac3..afc5bdd 100644 --- a/libAACenc/src/pnsparam.cpp +++ b/libAACenc/src/pnsparam.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pnsparam.h b/libAACenc/src/pnsparam.h index 53a2704..08bb83e 100644 --- a/libAACenc/src/pnsparam.h +++ b/libAACenc/src/pnsparam.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pre_echo_control.cpp b/libAACenc/src/pre_echo_control.cpp index b1f9041..3dfd8ed 100644 --- a/libAACenc/src/pre_echo_control.cpp +++ b/libAACenc/src/pre_echo_control.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pre_echo_control.h b/libAACenc/src/pre_echo_control.h index c2743d7..9224db0 100644 --- a/libAACenc/src/pre_echo_control.h +++ b/libAACenc/src/pre_echo_control.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_configuration.cpp b/libAACenc/src/psy_configuration.cpp index 96f6a71..4393fa1 100644 --- a/libAACenc/src/psy_configuration.cpp +++ b/libAACenc/src/psy_configuration.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_configuration.h b/libAACenc/src/psy_configuration.h index 3d8ad0b..3629246 100644 --- a/libAACenc/src/psy_configuration.h +++ b/libAACenc/src/psy_configuration.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_const.h b/libAACenc/src/psy_const.h index 0195931..d9c9f43 100644 --- a/libAACenc/src/psy_const.h +++ b/libAACenc/src/psy_const.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -98,7 +98,6 @@ amm-info@iis.fraunhofer.de #define FRAME_MAXLEN_SHORT ((1024)/TRANS_FAC) #define FRAME_LEN_SHORT_128 ((1024)/TRANS_FAC) -#define FRAME_LEN_SHORT_120 (FRAME_LEN_LONG_960/TRANS_FAC) /* Filterbank type*/ enum FB_TYPE { diff --git a/libAACenc/src/psy_data.h b/libAACenc/src/psy_data.h index 2219f24..7183955 100644 --- a/libAACenc/src/psy_data.h +++ b/libAACenc/src/psy_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_main.cpp b/libAACenc/src/psy_main.cpp index 672619e..59193c7 100644 --- a/libAACenc/src/psy_main.cpp +++ b/libAACenc/src/psy_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -116,11 +116,6 @@ static const FIXP_DBL fadeOutFactor[FADE_OUT_LEN] = {1840644096, 1533870080, 122 /* forward definitions */ -static inline int isLowDelay( AUDIO_OBJECT_TYPE aot ) -{ - return (aot==AOT_ER_AAC_LD || aot==AOT_ER_AAC_ELD); -} - /***************************************************************************** functionname: FDKaacEnc_PsyNew @@ -513,28 +508,28 @@ AAC_ENCODER_ERROR FDKaacEnc_psyMain(INT channels, for(ch = 0; ch < channels; ch++) { - C_ALLOC_SCRATCH_START(timeSignal, INT_PCM, (1024)); - psyStatic[ch]->blockSwitchingControl.timeSignal = timeSignal; + C_ALLOC_SCRATCH_START(pTimeSignal, INT_PCM, (1024)) /* deinterleave input data and use for block switching */ - FDKaacEnc_deinterleaveInputBuffer( psyStatic[ch]->blockSwitchingControl.timeSignal, + FDKaacEnc_deinterleaveInputBuffer( pTimeSignal, &pInput[chIdx[ch]], psyConf->granuleLength, totalChannels); FDKaacEnc_BlockSwitching (&psyStatic[ch]->blockSwitchingControl, - psyConf->granuleLength - ,psyStatic[ch]->isLFE + psyConf->granuleLength, + psyStatic[ch]->isLFE, + pTimeSignal ); /* fill up internal input buffer, to 2xframelength samples */ FDKmemcpy(psyStatic[ch]->psyInputBuffer+blockSwitchingOffset, - psyStatic[ch]->blockSwitchingControl.timeSignal, + pTimeSignal, (2*psyConf->granuleLength-blockSwitchingOffset)*sizeof(INT_PCM)); - C_ALLOC_SCRATCH_END(timeSignal, INT_PCM, (1024)); + C_ALLOC_SCRATCH_END(pTimeSignal, INT_PCM, (1024)) } /* synch left and right block type */ @@ -1345,7 +1340,7 @@ void FDKaacEnc_PsyClose(PSY_INTERNAL **phPsyInternal, if (hPsyInternal) { - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hPsyInternal->pStaticChannels[i]) { if (hPsyInternal->pStaticChannels[i]->psyInputBuffer) FreeRam_aacEnc_PsyInputBuffer(&hPsyInternal->pStaticChannels[i]->psyInputBuffer); /* AUDIO INPUT BUFFER */ @@ -1354,7 +1349,7 @@ void FDKaacEnc_PsyClose(PSY_INTERNAL **phPsyInternal, } } - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hPsyInternal->psyElement[i]) FreeRam_aacEnc_PsyElement(&hPsyInternal->psyElement[i]); /* PSY_ELEMENT */ } @@ -1368,12 +1363,12 @@ void FDKaacEnc_PsyClose(PSY_INTERNAL **phPsyInternal, for (n=0; n<(1); n++) { if (phPsyOut[n]) { - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (phPsyOut[n]->pPsyOutChannels[i]) FreeRam_aacEnc_PsyOutChannel(&phPsyOut[n]->pPsyOutChannels[i]); /* PSY_OUT_CHANNEL */ } - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (phPsyOut[n]->psyOutElement[i]) FreeRam_aacEnc_PsyOutElements(&phPsyOut[n]->psyOutElement[i]); /* PSY_OUT_ELEMENTS */ } diff --git a/libAACenc/src/psy_main.h b/libAACenc/src/psy_main.h index 9670f4a..7bdcc38 100644 --- a/libAACenc/src/psy_main.h +++ b/libAACenc/src/psy_main.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -117,8 +117,8 @@ typedef struct { typedef struct { PSY_CONFIGURATION psyConf[2]; /* LONG / SHORT */ - PSY_ELEMENT* psyElement[(6)]; - PSY_STATIC* pStaticChannels[(6)]; + PSY_ELEMENT* psyElement[(8)]; + PSY_STATIC* pStaticChannels[(8)]; PSY_DYNAMIC* psyDynamic; INT granuleLength; diff --git a/libAACenc/src/qc_data.h b/libAACenc/src/qc_data.h index d37ea92..a9309c8 100644 --- a/libAACenc/src/qc_data.h +++ b/libAACenc/src/qc_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,7 +127,7 @@ typedef struct { INT nChannels; INT nChannelsEff; INT nElements; - ELEMENT_INFO elInfo[(6)]; + ELEMENT_INFO elInfo[(8)]; } CHANNEL_MAPPING; typedef struct { @@ -143,6 +143,8 @@ struct QC_INIT{ INT maxBits; /* maximum number of bits in reservoir */ INT averageBits; /* average number of bits we should use */ INT bitRes; + INT sampleRate; /* output sample rate */ + INT advancedBitsToPe; /* if set, calc bits2PE factor depending on samplerate */ INT staticBits; /* Bits per frame consumed by transport layers. */ QCDATA_BR_MODE bitrateMode; INT meanPe; @@ -215,8 +217,8 @@ typedef struct typedef struct { - QC_OUT_ELEMENT *qcElement[(6)]; - QC_OUT_CHANNEL *pQcOutChannels[(6)]; + QC_OUT_ELEMENT *qcElement[(8)]; + QC_OUT_CHANNEL *pQcOutChannels[(8)]; QC_OUT_EXTENSION extension[(2+2)]; /* global extension payload */ INT nExtensions; /* number of extension payloads for this AU */ INT maxDynBits; /* maximal allowed dynamic bits in frame */ @@ -252,7 +254,7 @@ typedef struct INT minBitsPerFrame; /* minimal allowd bits per fram, superframing - DRM */ INT nElements; QCDATA_BR_MODE bitrateMode; - INT bitDistributenMode; /* 0: full bitreservoir, 1: reduced bitreservoir, 2: disabled bitreservoir */ + INT bitDistributionMode; /* 0: full bitreservoir, 1: reduced bitreservoir, 2: disabled bitreservoir */ INT bitResTot; INT bitResTotMax; INT maxIterations; /* Maximum number of allowed iterations before FDKaacEnc_crashRecovery() is applied. */ @@ -263,7 +265,7 @@ typedef struct PADDING padding; - ELEMENT_BITS *elementBits[(6)]; + ELEMENT_BITS *elementBits[(8)]; BITCNTR_STATE *hBitCounter; ADJ_THR_STATE *hAdjThr; diff --git a/libAACenc/src/qc_main.cpp b/libAACenc/src/qc_main.cpp index d7e76c7..b74510a 100644 --- a/libAACenc/src/qc_main.cpp +++ b/libAACenc/src/qc_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -382,10 +382,10 @@ AAC_ENCODER_ERROR FDKaacEnc_QCInit(QC_STATE *hQC, if ( isConstantBitrateMode(hQC->bitrateMode) ) { INT bitresPerChannel = (hQC->bitResTotMax / init->channelMapping->nChannelsEff); /* 0: full bitreservoir, 1: reduced bitreservoir, 2: disabled bitreservoir */ - hQC->bitDistributenMode = (bitresPerChannel>50) ? 0 : (bitresPerChannel>0) ? 1 : 2; + hQC->bitDistributionMode = (bitresPerChannel>100) ? 0 : (bitresPerChannel>0) ? 1 : 2; } else { - hQC->bitDistributenMode = 0; /* full bitreservoir */ + hQC->bitDistributionMode = 0; /* full bitreservoir */ } @@ -420,11 +420,17 @@ AAC_ENCODER_ERROR FDKaacEnc_QCInit(QC_STATE *hQC, break; } - FDKaacEnc_AdjThrInit(hQC->hAdjThr, - init->meanPe, - hQC->elementBits, /* or channelBitrates, was: channelBitrate */ - init->channelMapping->nElements, - hQC->vbrQualFactor); + FDKaacEnc_AdjThrInit( + hQC->hAdjThr, + init->meanPe, + hQC->elementBits, /* or channelBitrates, was: channelBitrate */ + hQC->invQuant, + init->channelMapping->nElements, + init->channelMapping->nChannelsEff, + init->sampleRate, /* output sample rate */ + init->advancedBitsToPe, /* if set, calc bits2PE factor depending on samplerate */ + hQC->vbrQualFactor + ); return AAC_ENC_OK; } @@ -505,7 +511,7 @@ AAC_ENCODER_ERROR FDKaacEnc_AdjustBitrate(QC_STATE *RESTRICT hQC, } static AAC_ENCODER_ERROR FDKaacEnc_distributeElementDynBits(QC_STATE* hQC, - QC_OUT_ELEMENT* qcElement[(6)], + QC_OUT_ELEMENT* qcElement[(8)], CHANNEL_MAPPING* cm, INT codeBits) { @@ -604,7 +610,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_prepareBitDistribution(QC_STATE* h PSY_OUT** psyOut, QC_OUT** qcOut, CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(1)][(6)], + QC_OUT_ELEMENT* qcElement[(1)][(8)], INT avgTotalBits, INT *totalAvailableBits, INT *avgTotalDynBits) @@ -655,7 +661,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_prepareBitDistribution(QC_STATE* h hQC->elementBits[i]->bitResLevelEl, hQC->elementBits[i]->maxBitResBitsEl, hQC->maxBitFac, - hQC->bitDistributenMode); + hQC->bitDistributionMode); *totalAvailableBits += hQC->elementBits[i]->bitResLevelEl; /* get total corrected granted PE */ @@ -671,7 +677,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_prepareBitDistribution(QC_STATE* h //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static AAC_ENCODER_ERROR FDKaacEnc_updateUsedDynBits(INT* sumDynBitsConsumed, - QC_OUT_ELEMENT* qcElement[(6)], + QC_OUT_ELEMENT* qcElement[(8)], CHANNEL_MAPPING* cm) { INT i; @@ -714,7 +720,7 @@ static INT FDKaacEnc_getTotalConsumedDynBits(QC_OUT** qcOut, } static INT FDKaacEnc_getTotalConsumedBits(QC_OUT** qcOut, - QC_OUT_ELEMENT* qcElement[(1)][(6)], + QC_OUT_ELEMENT* qcElement[(1)][(8)], CHANNEL_MAPPING* cm, INT globHdrBits, INT nSubFrames) @@ -814,7 +820,7 @@ AAC_ENCODER_ERROR FDKaacEnc_QCMain(QC_STATE* RESTRICT hQC, /*-------------------------------------------- */ /* helper pointer */ - QC_OUT_ELEMENT* qcElement[(1)][(6)]; + QC_OUT_ELEMENT* qcElement[(1)][(8)]; /* work on a copy of qcChannel and qcElement */ for (i=0; inElements; i++) @@ -891,10 +897,10 @@ AAC_ENCODER_ERROR FDKaacEnc_QCMain(QC_STATE* RESTRICT hQC, } /* -end- sub frame counter */ /*-------------------------------------------- */ - INT iterations[(1)][(6)]; - INT chConstraintsFulfilled[(1)][(6)][(2)]; - INT calculateQuant[(1)][(6)][(2)]; - INT constraintsFulfilled[(1)][(6)]; + INT iterations[(1)][(8)]; + INT chConstraintsFulfilled[(1)][(8)][(2)]; + INT calculateQuant[(1)][(8)][(2)]; + INT constraintsFulfilled[(1)][(8)]; /*-------------------------------------------- */ @@ -1241,7 +1247,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_reduceBitConsumption(int* iterati AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm, QC_STATE* qcKernel, - ELEMENT_BITS* RESTRICT elBits[(6)], + ELEMENT_BITS* RESTRICT elBits[(8)], QC_OUT** qcOut) { switch (qcKernel->bitrateMode) { @@ -1597,10 +1603,10 @@ void FDKaacEnc_QCClose (QC_STATE **phQCstate, QC_OUT **phQC) for (n=0;n<(1);n++) { if (phQC[n] != NULL) { QC_OUT *hQC = phQC[n]; - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { } - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hQC->qcElement[i]) FreeRam_aacEnc_QCelement(&hQC->qcElement[i]); } @@ -1620,7 +1626,7 @@ void FDKaacEnc_QCClose (QC_STATE **phQCstate, QC_OUT **phQC) if (hQCstate->hBitCounter != NULL) FDKaacEnc_BCClose(&hQCstate->hBitCounter); - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hQCstate->elementBits[i]!=NULL) { FreeRam_aacEnc_ElementBits(&hQCstate->elementBits[i]); } diff --git a/libAACenc/src/qc_main.h b/libAACenc/src/qc_main.h index dadac8e..4e8c042 100644 --- a/libAACenc/src/qc_main.h +++ b/libAACenc/src/qc_main.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -140,7 +140,7 @@ AAC_ENCODER_ERROR FDKaacEnc_QCMain(QC_STATE* RESTRICT hQC, AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm, QC_STATE* qcKernel, - ELEMENT_BITS* RESTRICT elBits[(6)], + ELEMENT_BITS* RESTRICT elBits[(8)], QC_OUT** qcOut); diff --git a/libAACenc/src/quantize.cpp b/libAACenc/src/quantize.cpp index 1f7402b..5380e35 100644 --- a/libAACenc/src/quantize.cpp +++ b/libAACenc/src/quantize.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,10 +127,7 @@ static void FDKaacEnc_quantizeLines(INT gain, accu = fMultDiv2(FDKaacEnc_mTab_3_4[tabIndex],FDKaacEnc_quantTableE[totalShift&3]); totalShift = (16-4)-(3*(totalShift>>2)); FDK_ASSERT(totalShift >=0); /* MAX_QUANT_VIOLATION */ - if (totalShift < 32) - accu>>=totalShift; - else - accu = 0; + accu >>= fixMin(totalShift,DFRACT_BITS-1); quaSpectrum[line] = (SHORT)(-((LONG)(k + accu) >> (DFRACT_BITS-1-16))); } else if(accu > FL2FXCONST_DBL(0.0f)) @@ -143,10 +140,7 @@ static void FDKaacEnc_quantizeLines(INT gain, accu = fMultDiv2(FDKaacEnc_mTab_3_4[tabIndex],FDKaacEnc_quantTableE[totalShift&3]); totalShift = (16-4)-(3*(totalShift>>2)); FDK_ASSERT(totalShift >=0); /* MAX_QUANT_VIOLATION */ - if (totalShift < 32) - accu>>=totalShift; - else - accu = 0; + accu >>= fixMin(totalShift,DFRACT_BITS-1); quaSpectrum[line] = (SHORT)((LONG)(k + accu) >> (DFRACT_BITS-1-16)); } else diff --git a/libAACenc/src/quantize.h b/libAACenc/src/quantize.h index 72dd851..975b98e 100644 --- a/libAACenc/src/quantize.h +++ b/libAACenc/src/quantize.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/sf_estim.cpp b/libAACenc/src/sf_estim.cpp index c5512cb..72b75a6 100644 --- a/libAACenc/src/sf_estim.cpp +++ b/libAACenc/src/sf_estim.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/sf_estim.h b/libAACenc/src/sf_estim.h index 3338a26..b5ac000 100644 --- a/libAACenc/src/sf_estim.h +++ b/libAACenc/src/sf_estim.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/spreading.cpp b/libAACenc/src/spreading.cpp index 5141b6e..852da1e 100644 --- a/libAACenc/src/spreading.cpp +++ b/libAACenc/src/spreading.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/spreading.h b/libAACenc/src/spreading.h index 078cc7f..e1b506c 100644 --- a/libAACenc/src/spreading.h +++ b/libAACenc/src/spreading.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/tns_func.h b/libAACenc/src/tns_func.h index 8f9bd26..6ee0edb 100644 --- a/libAACenc/src/tns_func.h +++ b/libAACenc/src/tns_func.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/tonality.cpp b/libAACenc/src/tonality.cpp index befff74..7246a34 100644 --- a/libAACenc/src/tonality.cpp +++ b/libAACenc/src/tonality.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/tonality.h b/libAACenc/src/tonality.h index dcd82a8..fbe78ee 100644 --- a/libAACenc/src/tonality.h +++ b/libAACenc/src/tonality.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/transform.cpp b/libAACenc/src/transform.cpp index fb57b14..690b82e 100644 --- a/libAACenc/src/transform.cpp +++ b/libAACenc/src/transform.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/transform.h b/libAACenc/src/transform.h index 212f5f0..5053174 100644 --- a/libAACenc/src/transform.h +++ b/libAACenc/src/transform.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -105,7 +105,7 @@ amm-info@iis.fraunhofer.de * LONG_WINDOW, START_WINDOW, SHORT_WINDOW or STOP_WINDOW. * \param windowShape index indicating the window slope type to be used. * Values allowed are either SINE_WINDOW or KBD_WINDOW. - * \param frameLength length of the block. Either 1024 or 960. + * \param frameLength length of the block. * \param mdctData_e pointer to an INT where the exponent of the frequency * domain output data is stored into. * \return 0 in case of success, non-zero in case of error (inconsistent parameters). diff --git a/libFDK/include/FDK_archdef.h b/libFDK/include/FDK_archdef.h index a963f55..da63aee 100644 --- a/libFDK/include/FDK_archdef.h +++ b/libFDK/include/FDK_archdef.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_bitbuffer.h b/libFDK/include/FDK_bitbuffer.h index 963ada8..65fa04b 100644 --- a/libFDK/include/FDK_bitbuffer.h +++ b/libFDK/include/FDK_bitbuffer.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_bitstream.h b/libFDK/include/FDK_bitstream.h index 3ef4799..fc8d7de 100644 --- a/libFDK/include/FDK_bitstream.h +++ b/libFDK/include/FDK_bitstream.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_core.h b/libFDK/include/FDK_core.h index ef0c032..10a6a8e 100644 --- a/libFDK/include/FDK_core.h +++ b/libFDK/include/FDK_core.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_crc.h b/libFDK/include/FDK_crc.h index b5b8d6b..b1fed88 100644 --- a/libFDK/include/FDK_crc.h +++ b/libFDK/include/FDK_crc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_hybrid.h b/libFDK/include/FDK_hybrid.h index 3d355d6..63f2d70 100644 --- a/libFDK/include/FDK_hybrid.h +++ b/libFDK/include/FDK_hybrid.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_tools_rom.h b/libFDK/include/FDK_tools_rom.h index e9e126e..9361c81 100644 --- a/libFDK/include/FDK_tools_rom.h +++ b/libFDK/include/FDK_tools_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -171,6 +171,9 @@ extern const FIXP_WTP sin_twiddle_L64[]; extern const FIXP_QTW qmf_phaseshift_cos32[32]; extern const FIXP_QTW qmf_phaseshift_sin32[32]; +/* Adapted analysis post-twiddles for down-sampled HQ SBR */ +extern const FIXP_QTW qmf_phaseshift_cos_downsamp32[32]; +extern const FIXP_QTW qmf_phaseshift_sin_downsamp32[32]; extern const FIXP_QTW qmf_phaseshift_cos64[64]; extern const FIXP_QTW qmf_phaseshift_sin64[64]; diff --git a/libFDK/include/FDK_trigFcts.h b/libFDK/include/FDK_trigFcts.h index d2ca4ee..c32c0f2 100644 --- a/libFDK/include/FDK_trigFcts.h +++ b/libFDK/include/FDK_trigFcts.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/abs.h b/libFDK/include/abs.h index d3576cb..0837e3c 100644 --- a/libFDK/include/abs.h +++ b/libFDK/include/abs.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/clz_arm.h b/libFDK/include/arm/clz_arm.h index b33b800..f43a7b1 100644 --- a/libFDK/include/arm/clz_arm.h +++ b/libFDK/include/arm/clz_arm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/cplx_mul.h b/libFDK/include/arm/cplx_mul.h index 2416f98..8b48031 100644 --- a/libFDK/include/arm/cplx_mul.h +++ b/libFDK/include/arm/cplx_mul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/fixmadd_arm.h b/libFDK/include/arm/fixmadd_arm.h index e12d211..111147b 100644 --- a/libFDK/include/arm/fixmadd_arm.h +++ b/libFDK/include/arm/fixmadd_arm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/fixmul_arm.h b/libFDK/include/arm/fixmul_arm.h index d42d677..2f04705 100644 --- a/libFDK/include/arm/fixmul_arm.h +++ b/libFDK/include/arm/fixmul_arm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/scale.h b/libFDK/include/arm/scale.h index 41f94a4..cbb81dc 100644 --- a/libFDK/include/arm/scale.h +++ b/libFDK/include/arm/scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/scramble.h b/libFDK/include/arm/scramble.h index ddf34bd..82d0338 100644 --- a/libFDK/include/arm/scramble.h +++ b/libFDK/include/arm/scramble.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/autocorr2nd.h b/libFDK/include/autocorr2nd.h index 227d52b..c2e9595 100644 --- a/libFDK/include/autocorr2nd.h +++ b/libFDK/include/autocorr2nd.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/clz.h b/libFDK/include/clz.h index 38c5073..fc612e1 100644 --- a/libFDK/include/clz.h +++ b/libFDK/include/clz.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/common_fix.h b/libFDK/include/common_fix.h index a39548e..79c87ac 100644 --- a/libFDK/include/common_fix.h +++ b/libFDK/include/common_fix.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/cplx_mul.h b/libFDK/include/cplx_mul.h index 68a49e1..093ffa6 100644 --- a/libFDK/include/cplx_mul.h +++ b/libFDK/include/cplx_mul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/dct.h b/libFDK/include/dct.h index 59b7319..af1edd3 100644 --- a/libFDK/include/dct.h +++ b/libFDK/include/dct.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fft.h b/libFDK/include/fft.h index 5bd49d1..616f350 100644 --- a/libFDK/include/fft.h +++ b/libFDK/include/fft.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fft_rad2.h b/libFDK/include/fft_rad2.h index 97ddf5f..90d14da 100644 --- a/libFDK/include/fft_rad2.h +++ b/libFDK/include/fft_rad2.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixmadd.h b/libFDK/include/fixmadd.h index 71413ee..851b7a2 100644 --- a/libFDK/include/fixmadd.h +++ b/libFDK/include/fixmadd.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixminmax.h b/libFDK/include/fixminmax.h index a6aa623..5a52824 100644 --- a/libFDK/include/fixminmax.h +++ b/libFDK/include/fixminmax.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixmul.h b/libFDK/include/fixmul.h index 31c92b4..ea4bc6c 100644 --- a/libFDK/include/fixmul.h +++ b/libFDK/include/fixmul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixpoint_math.h b/libFDK/include/fixpoint_math.h index ae554cb..df141d3 100644 --- a/libFDK/include/fixpoint_math.h +++ b/libFDK/include/fixpoint_math.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mdct.h b/libFDK/include/mdct.h index 0d04e4b..e1c2d74 100644 --- a/libFDK/include/mdct.h +++ b/libFDK/include/mdct.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/abs_mips.h b/libFDK/include/mips/abs_mips.h index e2ad607..3b9f876 100644 --- a/libFDK/include/mips/abs_mips.h +++ b/libFDK/include/mips/abs_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/clz_mips.h b/libFDK/include/mips/clz_mips.h index 48d465b..ff40a09 100644 --- a/libFDK/include/mips/clz_mips.h +++ b/libFDK/include/mips/clz_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h index fb777ce..e05d2b6 100644 --- a/libFDK/include/mips/cplx_mul.h +++ b/libFDK/include/mips/cplx_mul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/fixmadd_mips.h b/libFDK/include/mips/fixmadd_mips.h index 564268b..a9575fb 100644 --- a/libFDK/include/mips/fixmadd_mips.h +++ b/libFDK/include/mips/fixmadd_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/fixmul_mips.h b/libFDK/include/mips/fixmul_mips.h index 62d059e..73693e2 100644 --- a/libFDK/include/mips/fixmul_mips.h +++ b/libFDK/include/mips/fixmul_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/scale.h b/libFDK/include/mips/scale.h index 9279391..edf29da 100644 --- a/libFDK/include/mips/scale.h +++ b/libFDK/include/mips/scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/scramble.h b/libFDK/include/mips/scramble.h index 95c4d74..3f2fe6e 100644 --- a/libFDK/include/mips/scramble.h +++ b/libFDK/include/mips/scramble.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/qmf.h b/libFDK/include/qmf.h index 16d2b70..be69477 100644 --- a/libFDK/include/qmf.h +++ b/libFDK/include/qmf.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -137,6 +137,8 @@ amm-info@iis.fraunhofer.de #define QMF_FLAG_MPSLDFB 16 /* Complex Low Delay Filter Bank used in MPEG Surround Encoder allows a optimized calculation of the modulation in qmfForwardModulationHQ() */ #define QMF_FLAG_MPSLDFB_OPTIMIZE_MODULATION 32 +/* Flag to indicate HE-AAC down-sampled SBR mode (decoder) -> adapt analysis post twiddling */ +#define QMF_FLAG_DOWNSAMPLED 64 typedef struct diff --git a/libFDK/include/scale.h b/libFDK/include/scale.h index d60ed2c..1587f9f 100644 --- a/libFDK/include/scale.h +++ b/libFDK/include/scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/scramble.h b/libFDK/include/scramble.h index 552081a..ceaf527 100644 --- a/libFDK/include/scramble.h +++ b/libFDK/include/scramble.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/x86/abs_x86.h b/libFDK/include/x86/abs_x86.h index 64add9f..96374ec 100644 --- a/libFDK/include/x86/abs_x86.h +++ b/libFDK/include/x86/abs_x86.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/x86/clz_x86.h b/libFDK/include/x86/clz_x86.h index db7970d..1bc43e5 100644 --- a/libFDK/include/x86/clz_x86.h +++ b/libFDK/include/x86/clz_x86.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/x86/fixmul_x86.h b/libFDK/include/x86/fixmul_x86.h index d10bc9a..7b74cc7 100644 --- a/libFDK/include/x86/fixmul_x86.h +++ b/libFDK/include/x86/fixmul_x86.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_bitbuffer.cpp b/libFDK/src/FDK_bitbuffer.cpp index 113c819..680ceae 100644 --- a/libFDK/src/FDK_bitbuffer.cpp +++ b/libFDK/src/FDK_bitbuffer.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_core.cpp b/libFDK/src/FDK_core.cpp index 8a07aa9..6db648d 100644 --- a/libFDK/src/FDK_core.cpp +++ b/libFDK/src/FDK_core.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -92,8 +92,8 @@ amm-info@iis.fraunhofer.de /* FDK tools library info */ #define FDK_TOOLS_LIB_VL0 2 -#define FDK_TOOLS_LIB_VL1 2 -#define FDK_TOOLS_LIB_VL2 8 +#define FDK_TOOLS_LIB_VL1 3 +#define FDK_TOOLS_LIB_VL2 2 #define FDK_TOOLS_LIB_TITLE "FDK Tools" #define FDK_TOOLS_LIB_BUILD_DATE __DATE__ #define FDK_TOOLS_LIB_BUILD_TIME __TIME__ diff --git a/libFDK/src/FDK_crc.cpp b/libFDK/src/FDK_crc.cpp index 1b03903..17d47ad 100644 --- a/libFDK/src/FDK_crc.cpp +++ b/libFDK/src/FDK_crc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_hybrid.cpp b/libFDK/src/FDK_hybrid.cpp index 3d3ab7b..20816f5 100644 --- a/libFDK/src/FDK_hybrid.cpp +++ b/libFDK/src/FDK_hybrid.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_tools_rom.cpp b/libFDK/src/FDK_tools_rom.cpp index 4fc80ce..c6e517e 100644 --- a/libFDK/src/FDK_tools_rom.cpp +++ b/libFDK/src/FDK_tools_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1462,6 +1462,26 @@ const FIXP_PFT qmf_64[QMF640_PFT_TABLE_SIZE+QMF_NO_POLY] = QFC(0xfe4d1be3), QFC(0xd1c58ace), QFC(0x2e3a7532), QFC(0x01b2e41d), QFC(0x00000000), }; +RAM_ALIGN +LNK_SECTION_CONSTDATA +const FIXP_QTW qmf_phaseshift_cos_downsamp32[] = +{ + QTC(0x7fd8878e), QTC(0x7e9d55fc), QTC(0x7c29fbee), QTC(0x78848414), QTC(0x73b5ebd1), QTC(0x6dca0d14), QTC(0x66cf8120), QTC(0x5ed77c8a), + QTC(0x55f5a4d2), QTC(0x4c3fdff4), QTC(0x41ce1e65), QTC(0x36ba2014), QTC(0x2b1f34eb), QTC(0x1f19f97b), QTC(0x12c8106f), QTC(0x0647d97c), + QTC(0xf9b82684), QTC(0xed37ef91), QTC(0xe0e60685), QTC(0xd4e0cb15), QTC(0xc945dfec), QTC(0xbe31e19b), QTC(0xb3c0200c), QTC(0xaa0a5b2e), + QTC(0xa1288376), QTC(0x99307ee0), QTC(0x9235f2ec), QTC(0x8c4a142f), QTC(0x877b7bec), QTC(0x83d60412), QTC(0x8162aa04), QTC(0x80277872), +}; + +RAM_ALIGN +LNK_SECTION_CONSTDATA +const FIXP_QTW qmf_phaseshift_sin_downsamp32[] = +{ + QTC(0x0647d97c), QTC(0x12c8106f), QTC(0x1f19f97b), QTC(0x2b1f34eb), QTC(0x36ba2014), QTC(0x41ce1e65), QTC(0x4c3fdff4), QTC(0x55f5a4d2), + QTC(0x5ed77c8a), QTC(0x66cf8120), QTC(0x6dca0d14), QTC(0x73b5ebd1), QTC(0x78848414), QTC(0x7c29fbee), QTC(0x7e9d55fc), QTC(0x7fd8878e), + QTC(0x7fd8878e), QTC(0x7e9d55fc), QTC(0x7c29fbee), QTC(0x78848414), QTC(0x73b5ebd1), QTC(0x6dca0d14), QTC(0x66cf8120), QTC(0x5ed77c8a), + QTC(0x55f5a4d2), QTC(0x4c3fdff4), QTC(0x41ce1e65), QTC(0x36ba2014), QTC(0x2b1f34eb), QTC(0x1f19f97b), QTC(0x12c8106f), QTC(0x0647d97c), +}; + #else /* QMF_NO_POLY == 5 */ #endif /* QMF_NO_POLY==5 */ diff --git a/libFDK/src/FDK_trigFcts.cpp b/libFDK/src/FDK_trigFcts.cpp index 2f8655c..1f3a017 100644 --- a/libFDK/src/FDK_trigFcts.cpp +++ b/libFDK/src/FDK_trigFcts.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/autocorr2nd.cpp b/libFDK/src/arm/autocorr2nd.cpp index 18c4e43..cc76e30 100644 --- a/libFDK/src/arm/autocorr2nd.cpp +++ b/libFDK/src/arm/autocorr2nd.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/dct_arm.cpp b/libFDK/src/arm/dct_arm.cpp index 187c843..59b773e 100644 --- a/libFDK/src/arm/dct_arm.cpp +++ b/libFDK/src/arm/dct_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/fft_rad2_arm.cpp b/libFDK/src/arm/fft_rad2_arm.cpp index 34d71c3..a6e2e42 100644 --- a/libFDK/src/arm/fft_rad2_arm.cpp +++ b/libFDK/src/arm/fft_rad2_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/qmf_arm.cpp b/libFDK/src/arm/qmf_arm.cpp index 39795d7..0c0ce80 100644 --- a/libFDK/src/arm/qmf_arm.cpp +++ b/libFDK/src/arm/qmf_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/scale_arm.cpp b/libFDK/src/arm/scale_arm.cpp index 02f3b71..e2837ef 100644 --- a/libFDK/src/arm/scale_arm.cpp +++ b/libFDK/src/arm/scale_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/autocorr2nd.cpp b/libFDK/src/autocorr2nd.cpp index e73ef14..b7eae7c 100644 --- a/libFDK/src/autocorr2nd.cpp +++ b/libFDK/src/autocorr2nd.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/dct.cpp b/libFDK/src/dct.cpp index 5dc9e78..3c755bd 100644 --- a/libFDK/src/dct.cpp +++ b/libFDK/src/dct.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/fft.cpp b/libFDK/src/fft.cpp index bbf3d99..653a71a 100644 --- a/libFDK/src/fft.cpp +++ b/libFDK/src/fft.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/fft_rad2.cpp b/libFDK/src/fft_rad2.cpp index 4eaa27e..9cdadb5 100644 --- a/libFDK/src/fft_rad2.cpp +++ b/libFDK/src/fft_rad2.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/fixpoint_math.cpp b/libFDK/src/fixpoint_math.cpp index 000820c..30283ff 100644 --- a/libFDK/src/fixpoint_math.cpp +++ b/libFDK/src/fixpoint_math.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -242,30 +242,72 @@ FIXP_DBL mul_dbl_sgl_rnd (const FIXP_DBL op1, const FIXP_SGL op2) *****************************************************************************/ LNK_SECTION_CODE_L1 -FIXP_DBL CalcInvLdData(FIXP_DBL op) +/* This table is used for lookup 2^x with */ +/* x in range [0...1.0[ in steps of 1/32 */ +LNK_SECTION_DATA_L1 static const UINT exp2_tab_long[32]={ +0x40000000,0x4166C34C,0x42D561B4,0x444C0740, +0x45CAE0F2,0x47521CC6,0x48E1E9BA,0x4A7A77D4, +0x4C1BF829,0x4DC69CDD,0x4F7A9930,0x51382182, +0x52FF6B55,0x54D0AD5A,0x56AC1F75,0x5891FAC1, +0x5A82799A,0x5C7DD7A4,0x5E8451D0,0x60962665, +0x62B39509,0x64DCDEC3,0x6712460B,0x69540EC9, +0x6BA27E65,0x6DFDDBCC,0x70666F76,0x72DC8374, +0x75606374,0x77F25CCE,0x7A92BE8B,0x7D41D96E +// 0x80000000 +}; + +/* This table is used for lookup 2^x with */ +/* x in range [0...1/32[ in steps of 1/1024 */ +LNK_SECTION_DATA_L1 static const UINT exp2w_tab_long[32]={ +0x40000000,0x400B1818,0x4016321B,0x40214E0C, +0x402C6BE9,0x40378BB4,0x4042AD6D,0x404DD113, +0x4058F6A8,0x40641E2B,0x406F479E,0x407A7300, +0x4085A051,0x4090CF92,0x409C00C4,0x40A733E6, +0x40B268FA,0x40BD9FFF,0x40C8D8F5,0x40D413DD, +0x40DF50B8,0x40EA8F86,0x40F5D046,0x410112FA, +0x410C57A2,0x41179E3D,0x4122E6CD,0x412E3152, +0x41397DCC,0x4144CC3B,0x41501CA0,0x415B6EFB, +// 0x4166C34C, +}; +/* This table is used for lookup 2^x with */ +/* x in range [0...1/1024[ in steps of 1/32768 */ +LNK_SECTION_DATA_L1 static const UINT exp2x_tab_long[32]={ +0x40000000,0x400058B9,0x4000B173,0x40010A2D, +0x400162E8,0x4001BBA3,0x4002145F,0x40026D1B, +0x4002C5D8,0x40031E95,0x40037752,0x4003D011, +0x400428CF,0x4004818E,0x4004DA4E,0x4005330E, +0x40058BCE,0x4005E48F,0x40063D51,0x40069613, +0x4006EED5,0x40074798,0x4007A05B,0x4007F91F, +0x400851E4,0x4008AAA8,0x4009036E,0x40095C33, +0x4009B4FA,0x400A0DC0,0x400A6688,0x400ABF4F, +//0x400B1818 +}; + +LNK_SECTION_CODE_L1 FIXP_DBL CalcInvLdData(FIXP_DBL x) { - FIXP_DBL result_m; + int set_zero = (x < FL2FXCONST_DBL(-31.0/64.0))? 0 : 1; + int set_max = (x >= FL2FXCONST_DBL( 31.0/64.0)) | (x == FL2FXCONST_DBL(0.0)); - if ( op == FL2FXCONST_DBL(0.0f) ) { - result_m = (FIXP_DBL)MAXVAL_DBL; - } - else if ( op < FL2FXCONST_DBL(0.0f) ) { - result_m = f2Pow(op, LD_DATA_SHIFT); - } - else { - int result_e; + FIXP_SGL frac = (FIXP_SGL)(LONG)(x & 0x3FF); + UINT index3 = (UINT)(LONG)(x >> 10) & 0x1F; + UINT index2 = (UINT)(LONG)(x >> 15) & 0x1F; + UINT index1 = (UINT)(LONG)(x >> 20) & 0x1F; + int exp = (x > FL2FXCONST_DBL(0.0f)) ? (31 - (int)(x>>25)) : (int)(-(x>>25)); - result_m = f2Pow(op, LD_DATA_SHIFT, &result_e); - result_e = fixMin(fixMax(result_e+1-(DFRACT_BITS-1), -(DFRACT_BITS-1)), (DFRACT_BITS-1)); /* rounding and saturation */ + UINT lookup1 = exp2_tab_long[index1]*set_zero; + UINT lookup2 = exp2w_tab_long[index2]; + UINT lookup3 = exp2x_tab_long[index3]; + UINT lookup3f = lookup3 + (UINT)(LONG)fMultDiv2((FIXP_DBL)(0x0016302F),(FIXP_SGL)frac); + + UINT lookup12 = (UINT)(LONG)fMult((FIXP_DBL)lookup1, (FIXP_DBL) lookup2); + UINT lookup = (UINT)(LONG)fMult((FIXP_DBL)lookup12, (FIXP_DBL) lookup3f); - if ( (result_e>0) && ( result_m > (((FIXP_DBL)MAXVAL_DBL)>>result_e) ) ) { - result_m = (FIXP_DBL)MAXVAL_DBL; /* saturate to max representable value */ - } - else { - result_m = (scaleValue(result_m, result_e)+(FIXP_DBL)1)>>1; /* descale result + rounding */ - } - } - return result_m; + FIXP_DBL retVal = (lookup<<3) >> exp; + + if (set_max) + retVal=FL2FXCONST_DBL(1.0f); + + return retVal; } diff --git a/libFDK/src/mdct.cpp b/libFDK/src/mdct.cpp index 7b9864f..9a29aa1 100644 --- a/libFDK/src/mdct.cpp +++ b/libFDK/src/mdct.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/mips/fft_rad2_mips.cpp b/libFDK/src/mips/fft_rad2_mips.cpp index 8518c79..f93ee98 100644 --- a/libFDK/src/mips/fft_rad2_mips.cpp +++ b/libFDK/src/mips/fft_rad2_mips.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/mips/mips_fft_twiddles.cpp b/libFDK/src/mips/mips_fft_twiddles.cpp index 080c61e..e15a09b 100644 --- a/libFDK/src/mips/mips_fft_twiddles.cpp +++ b/libFDK/src/mips/mips_fft_twiddles.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/mips/scale.cpp b/libFDK/src/mips/scale.cpp index 9e5964a..88a3a00 100644 --- a/libFDK/src/mips/scale.cpp +++ b/libFDK/src/mips/scale.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/qmf.cpp b/libFDK/src/qmf.cpp index 314b9fe..54526dd 100644 --- a/libFDK/src/qmf.cpp +++ b/libFDK/src/qmf.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1017,8 +1017,14 @@ qmfInitFilterBank (HANDLE_QMF_FILTER_BANK h_Qmf, /*!< Handle to return */ break; case 32: h_Qmf->p_filter = qmf_64; + if (flags & QMF_FLAG_DOWNSAMPLED) { + h_Qmf->t_cos = qmf_phaseshift_cos_downsamp32; + h_Qmf->t_sin = qmf_phaseshift_sin_downsamp32; + } + else { h_Qmf->t_cos = qmf_phaseshift_cos32; h_Qmf->t_sin = qmf_phaseshift_sin32; + } h_Qmf->p_stride = 2; h_Qmf->FilterSize = 640; h_Qmf->filterScale = 0; diff --git a/libFDK/src/scale.cpp b/libFDK/src/scale.cpp index 96c0165..5829443 100644 --- a/libFDK/src/scale.cpp +++ b/libFDK/src/scale.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/include/mpegFileRead.h b/libMpegTPDec/include/mpegFileRead.h index d45bee2..1fbfb58 100644 --- a/libMpegTPDec/include/mpegFileRead.h +++ b/libMpegTPDec/include/mpegFileRead.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/include/tp_data.h b/libMpegTPDec/include/tp_data.h index 6e8218a..5269858 100644 --- a/libMpegTPDec/include/tp_data.h +++ b/libMpegTPDec/include/tp_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/include/tpdec_lib.h b/libMpegTPDec/include/tpdec_lib.h index 7317204..fb4c41d 100644 --- a/libMpegTPDec/include/tpdec_lib.h +++ b/libMpegTPDec/include/tpdec_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -186,6 +186,27 @@ int CProgramConfig_IsValid ( const CProgramConfig *pPce ); void CProgramConfig_Read ( CProgramConfig *pPce, HANDLE_FDK_BITSTREAM bs, UINT alignAnchor ); + +/*! + \brief Compare two Program Config Elements. + \param pPce1 Pointer to first Program Config Element structure. + \param pPce2 Pointer to second Program Config Element structure. + \return -1 if PCEs are completely different, + 0 if PCEs are completely equal, + 1 if PCEs are different but have the same channel config, + 2 if PCEs have different channel config but same number of channels. +*/ +int CProgramConfig_Compare ( const CProgramConfig * const pPce1, + const CProgramConfig * const pPce2 ); + +/*! + \brief Get a Program Config Element that matches the predefined MPEG-4 channel configurations 1-14. + \param pPce Program Config Element structure. + \param channelConfig MPEG-4 channel configuration. + \return void +*/ +void CProgramConfig_GetDefault ( CProgramConfig *pPce, + const UINT channelConfig ); #endif /* TP_PCE_ENABLE */ /** @@ -206,7 +227,7 @@ void CProgramConfig_Read ( CProgramConfig *pPce, */ int CProgramConfig_LookupElement( CProgramConfig *pPce, - const UINT channelConfig, + UINT channelConfig, const UINT tag, const UINT channelIdx, UCHAR chMapping[], diff --git a/libMpegTPDec/src/mpegFileFormat.h b/libMpegTPDec/src/mpegFileFormat.h index 7ddaa0d..b0cfe9e 100644 --- a/libMpegTPDec/src/mpegFileFormat.h +++ b/libMpegTPDec/src/mpegFileFormat.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_adif.cpp b/libMpegTPDec/src/tpdec_adif.cpp index b6d6087..237e881 100644 --- a/libMpegTPDec/src/tpdec_adif.cpp +++ b/libMpegTPDec/src/tpdec_adif.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_adif.h b/libMpegTPDec/src/tpdec_adif.h index 7b9b071..d6780a7 100644 --- a/libMpegTPDec/src/tpdec_adif.h +++ b/libMpegTPDec/src/tpdec_adif.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_adts.cpp b/libMpegTPDec/src/tpdec_adts.cpp index 92e2e59..c455681 100644 --- a/libMpegTPDec/src/tpdec_adts.cpp +++ b/libMpegTPDec/src/tpdec_adts.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -374,12 +374,12 @@ int adtsRead_GetRawDataBlockLength( length = -1; /* raw data block length is unknown */ } else { if (blockNum < 0 || blockNum > 3) { - return TRANSPORTDEC_INVALID_PARAMETER; + length = -1; } length = (pAdts->rawDataBlockDist[blockNum] << 3) - 16; } } - if (blockNum == 0) { + if (blockNum == 0 && length > 0) { length -= pAdts->bs.num_pce_bits; } return length; diff --git a/libMpegTPDec/src/tpdec_adts.h b/libMpegTPDec/src/tpdec_adts.h index def6aa0..a3b83a5 100644 --- a/libMpegTPDec/src/tpdec_adts.h +++ b/libMpegTPDec/src/tpdec_adts.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_asc.cpp b/libMpegTPDec/src/tpdec_asc.cpp index d6e1a0b..4d7cc02 100644 --- a/libMpegTPDec/src/tpdec_asc.cpp +++ b/libMpegTPDec/src/tpdec_asc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -205,6 +205,145 @@ void CProgramConfig_Read( pPce->isValid = 1; } + +/* + * Compare two program configurations. + * Returns the result of the comparison: + * -1 - completely different + * 0 - completely equal + * 1 - different but same channel configuration + * 2 - different channel configuration but same number of channels + */ +int CProgramConfig_Compare ( const CProgramConfig * const pPce1, + const CProgramConfig * const pPce2 ) +{ + int result = 0; /* Innocent until proven false. */ + + if (FDKmemcmp(pPce1, pPce2, sizeof(CProgramConfig)) != 0) + { /* Configurations are not completely different. + So look into details and analyse the channel configurations: */ + result = -1; + + if (pPce1->NumChannels == pPce2->NumChannels) + { /* Now the logic changes. We first assume to have the same channel configuration + and then prove if this assumption is true. */ + result = 1; + + /* Front channels */ + if (pPce1->NumFrontChannelElements != pPce2->NumFrontChannelElements) { + result = 2; /* different number of front channel elements */ + } else { + int el, numCh1 = 0, numCh2 = 0; + for (el = 0; el < pPce1->NumFrontChannelElements; el += 1) { + numCh1 += pPce1->FrontElementIsCpe[el] ? 2 : 1; + numCh2 += pPce2->FrontElementIsCpe[el] ? 2 : 1; + } + if (numCh1 != numCh2) { + result = 2; /* different number of front channels */ + } + } + /* Side channels */ + if (pPce1->NumSideChannelElements != pPce2->NumSideChannelElements) { + result = 2; /* different number of side channel elements */ + } else { + int el, numCh1 = 0, numCh2 = 0; + for (el = 0; el < pPce1->NumSideChannelElements; el += 1) { + numCh1 += pPce1->SideElementIsCpe[el] ? 2 : 1; + numCh2 += pPce2->SideElementIsCpe[el] ? 2 : 1; + } + if (numCh1 != numCh2) { + result = 2; /* different number of side channels */ + } + } + /* Back channels */ + if (pPce1->NumBackChannelElements != pPce2->NumBackChannelElements) { + result = 2; /* different number of back channel elements */ + } else { + int el, numCh1 = 0, numCh2 = 0; + for (el = 0; el < pPce1->NumBackChannelElements; el += 1) { + numCh1 += pPce1->BackElementIsCpe[el] ? 2 : 1; + numCh2 += pPce2->BackElementIsCpe[el] ? 2 : 1; + } + if (numCh1 != numCh2) { + result = 2; /* different number of back channels */ + } + } + /* LFE channels */ + if (pPce1->NumLfeChannelElements != pPce2->NumLfeChannelElements) { + result = 2; /* different number of lfe channels */ + } + /* LFEs are always SCEs so we don't need to count the channels. */ + } + } + + return result; +} + +void CProgramConfig_GetDefault( CProgramConfig *pPce, + const UINT channelConfig ) +{ + FDK_ASSERT(pPce != NULL); + + /* Init PCE */ + CProgramConfig_Init(pPce); + pPce->Profile = 1; /* Set AAC LC because it is the only supported object type. */ + + switch (channelConfig) { + /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + case 6: /* 3/0/2.1ch */ + pPce->NumLfeChannelElements += 1; + pPce->NumChannels += 1; + case 5: /* 3/0/2.0ch */ + case 4: /* 3/0/1.0ch */ + pPce->NumBackChannelElements += 1; + pPce->BackElementIsCpe[0] = (channelConfig>4) ? 1 : 0; + pPce->NumChannels += (channelConfig>4) ? 2 : 1; + pPce->NumEffectiveChannels += (channelConfig>4) ? 2 : 1; + case 3: /* 3/0/0.0ch */ + pPce->NumFrontChannelElements += 1; + pPce->FrontElementIsCpe[1] = 1; + pPce->NumChannels += 2; + pPce->NumEffectiveChannels += 2; + case 1: /* 1/0/0.0ch */ + pPce->NumFrontChannelElements += 1; + pPce->FrontElementIsCpe[0] = 0; + pPce->NumChannels += 1; + pPce->NumEffectiveChannels += 1; + pPce->isValid = 1; + break; + /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + case 2: /* 2/0/0.ch */ + pPce->NumFrontChannelElements = 1; + pPce->FrontElementIsCpe[0] = 1; + pPce->NumChannels += 2; + pPce->NumEffectiveChannels += 2; + pPce->isValid = 1; + break; + /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + default: + pPce->isValid = 0; /* To be explicit! */ + break; + } + + if (pPce->isValid) { + /* Create valid element instance tags */ + int el, elTagSce = 0, elTagCpe = 0; + + for (el = 0; el < pPce->NumFrontChannelElements; el += 1) { + pPce->FrontElementTagSelect[el] = (pPce->FrontElementIsCpe) ? elTagCpe++ : elTagSce++; + } + for (el = 0; el < pPce->NumSideChannelElements; el += 1) { + pPce->SideElementTagSelect[el] = (pPce->SideElementIsCpe) ? elTagCpe++ : elTagSce++; + } + for (el = 0; el < pPce->NumBackChannelElements; el += 1) { + pPce->BackElementTagSelect[el] = (pPce->BackElementIsCpe) ? elTagCpe++ : elTagSce++; + } + elTagSce = 0; + for (el = 0; el < pPce->NumLfeChannelElements; el += 1) { + pPce->LfeElementTagSelect[el] = elTagSce++; + } + } +} #endif /* TP_PCE_ENABLE */ /** @@ -267,7 +406,7 @@ void getImplicitAudioChannelTypeAndIndex( int CProgramConfig_LookupElement( CProgramConfig *pPce, - const UINT channelConfig, + UINT channelConfig, const UINT tag, const UINT channelIdx, UCHAR chMapping[], @@ -289,7 +428,13 @@ int CProgramConfig_LookupElement( *elMapping = pPce->elCounter; if (elList[pPce->elCounter] != elType) { /* Not in the list */ - return 0; + if ( (channelConfig == 2) && (elType == ID_SCE) ) + { /* This scenario occurs with HE-AAC v2 streams of buggy encoders. + Due to other decoder implementations decoding of these kind of streams is desired. */ + channelConfig = 1; + } else { + return 0; + } } /* Assume all front channels */ getImplicitAudioChannelTypeAndIndex(&chType[channelIdx], &chIndex[channelIdx], channelConfig, channelIdx); @@ -583,18 +728,18 @@ static INT ld_sbr_header( const CSAudioSpecificConfig *asc, } switch ( channelConfiguration ) { + 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: case 5: error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++); case 3: error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++); break; - case 7: - error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_SCE, i++); - case 6: - 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++); break; } @@ -689,6 +834,62 @@ bail: #endif /* TP_ELD_ENABLE */ +static +TRANSPORTDEC_ERROR AudioSpecificConfig_ExtensionParse(CSAudioSpecificConfig *self, HANDLE_FDK_BITSTREAM bs, CSTpCallBacks *cb) +{ + TP_ASC_EXTENSION_ID lastAscExt, ascExtId = ASCEXT_UNKOWN; + INT bitsAvailable = (INT)FDKgetValidBits(bs); + + while (bitsAvailable >= 11) + { + lastAscExt = ascExtId; + ascExtId = (TP_ASC_EXTENSION_ID)FDKreadBits(bs, 11); + bitsAvailable -= 11; + + switch (ascExtId) { + case ASCEXT_SBR: /* 0x2b7 */ + if ( (self->m_extensionAudioObjectType != AOT_SBR) && (bitsAvailable >= 5) ) { + self->m_extensionAudioObjectType = getAOT(bs); + + if ( (self->m_extensionAudioObjectType == AOT_SBR) + || (self->m_extensionAudioObjectType == AOT_ER_BSAC) ) + { /* Get SBR extension configuration */ + self->m_sbrPresentFlag = FDKreadBits(bs, 1); + bitsAvailable -= 1; + + if ( self->m_sbrPresentFlag == 1 ) { + self->m_extensionSamplingFrequency = getSampleRate(bs, &self->m_extensionSamplingFrequencyIndex, 4); + + if ((INT)self->m_extensionSamplingFrequency <= 0) { + return TRANSPORTDEC_PARSE_ERROR; + } + } + if ( self->m_extensionAudioObjectType == AOT_ER_BSAC ) { + self->m_extensionChannelConfiguration = FDKreadBits(bs, 4); + bitsAvailable -= 4; + } + } + /* Update counter because of variable length fields (AOT and sampling rate) */ + bitsAvailable = (INT)FDKgetValidBits(bs); + } + break; + case ASCEXT_PS: /* 0x548 */ + if ( (lastAscExt == ASCEXT_SBR) + && (self->m_extensionAudioObjectType == AOT_SBR) + && (bitsAvailable > 0) ) + { /* Get PS extension configuration */ + self->m_psPresentFlag = FDKreadBits(bs, 1); + bitsAvailable -= 1; + } + break; + default: + /* Just ignore anything. */ + return TRANSPORTDEC_OK; + } + } + + return TRANSPORTDEC_OK; +} /* * API Functions @@ -839,6 +1040,9 @@ TRANSPORTDEC_ERROR AudioSpecificConfig_Parse( break; } + if (fExplicitBackwardCompatible) { + ErrorStatus = AudioSpecificConfig_ExtensionParse(self, bs, cb); + } return (ErrorStatus); } diff --git a/libMpegTPDec/src/tpdec_latm.cpp b/libMpegTPDec/src/tpdec_latm.cpp index 99b905c..5710d77 100644 --- a/libMpegTPDec/src/tpdec_latm.cpp +++ b/libMpegTPDec/src/tpdec_latm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -120,7 +120,8 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadAudioMuxElement( CLatmDemux *pLatmDemux, int m_muxConfigPresent, CSTpCallBacks *pTpDecCallbacks, - CSAudioSpecificConfig *pAsc + CSAudioSpecificConfig *pAsc, + int *pfConfigFound ) { TRANSPORTDEC_ERROR ErrorStatus = TRANSPORTDEC_OK; @@ -129,12 +130,17 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadAudioMuxElement( pLatmDemux->m_useSameStreamMux = FDKreadBits(bs,1); if (!pLatmDemux->m_useSameStreamMux) { - if ((ErrorStatus = CLatmDemux_ReadStreamMuxConfig(bs, pLatmDemux, pTpDecCallbacks, pAsc))) { + if ((ErrorStatus = CLatmDemux_ReadStreamMuxConfig(bs, pLatmDemux, pTpDecCallbacks, pAsc, pfConfigFound))) { return (ErrorStatus); } } } + /* If there was no configuration read, its not possible to parse PayloadLengthInfo below. */ + if (! *pfConfigFound) { + return TRANSPORTDEC_SYNC_ERROR; + } + if (pLatmDemux->m_AudioMuxVersionA == 0) { /* Do only once per call, because parsing and decoding is done in-line. */ if ((ErrorStatus = CLatmDemux_ReadPayloadLengthInfo(bs,pLatmDemux))) { @@ -154,6 +160,7 @@ TRANSPORTDEC_ERROR CLatmDemux_Read( TRANSPORT_TYPE tt, CSTpCallBacks *pTpDecCallbacks, CSAudioSpecificConfig *pAsc, + int *pfConfigFound, const INT ignoreBufferFullness ) { @@ -168,7 +175,7 @@ TRANSPORTDEC_ERROR CLatmDemux_Read( return TRANSPORTDEC_NOT_ENOUGH_BITS; } - if ((ErrorStatus = CLatmDemux_ReadAudioMuxElement(bs, pLatmDemux, (tt != TT_MP4_LATM_MCP0), pTpDecCallbacks, pAsc))) + if ((ErrorStatus = CLatmDemux_ReadAudioMuxElement(bs, pLatmDemux, (tt != TT_MP4_LATM_MCP0), pTpDecCallbacks, pAsc, pfConfigFound))) return (ErrorStatus); if (!ignoreBufferFullness) @@ -205,7 +212,8 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( HANDLE_FDK_BITSTREAM bs, CLatmDemux *pLatmDemux, CSTpCallBacks *pTpDecCallbacks, - CSAudioSpecificConfig *pAsc + CSAudioSpecificConfig *pAsc, + int * pfConfigFound ) { LATM_LAYER_INFO *p_linfo = NULL; @@ -272,6 +280,7 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( if ((ErrorStatus = AudioSpecificConfig_Parse(&pAsc[TPDEC_TRACKINDEX(prog,lay)], &tmpBs, 1, pTpDecCallbacks))) { return (ErrorStatus); } + *pfConfigFound = 1; /* The field p_linfo->m_ascLen could be wrong, so check if */ if ( 0 > (INT)FDKgetValidBits(&tmpBs)) { @@ -292,6 +301,7 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( if (cbError != 0) { return TRANSPORTDEC_UNKOWN_ERROR; } + *pfConfigFound = 1; } } @@ -377,7 +387,7 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadPayloadLengthInfo(HANDLE_FDK_BITSTREAM bs, CLa else { ErrorStatus = TRANSPORTDEC_PARSE_ERROR; //AAC_DEC_LATM_TIMEFRAMING; } - if (pLatmDemux->m_audioMuxLengthBytes > 0 && totalPayloadBits > pLatmDemux->m_audioMuxLengthBytes*8) { + if (pLatmDemux->m_audioMuxLengthBytes > (UINT)0 && totalPayloadBits > (int)pLatmDemux->m_audioMuxLengthBytes*8) { return TRANSPORTDEC_PARSE_ERROR; } return (ErrorStatus); diff --git a/libMpegTPDec/src/tpdec_latm.h b/libMpegTPDec/src/tpdec_latm.h index f1fcc19..6dc13e8 100644 --- a/libMpegTPDec/src/tpdec_latm.h +++ b/libMpegTPDec/src/tpdec_latm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -144,14 +144,25 @@ TRANSPORTDEC_ERROR CLatmDemux_Read( TRANSPORT_TYPE tt, CSTpCallBacks *pTpDecCallbacks, CSAudioSpecificConfig *pAsc, + int *pfConfigFound, const INT ignoreBufferFullness ); +/** + * \brief Read StreamMuxConfig + * \param bs bit stream handle as data source + * \param pLatmDemux pointer to CLatmDemux struct of current LATM context + * \param pTpDecCallbacks Call back structure for configuration callbacks + * \param pAsc pointer to a ASC for configuration storage + * \param pfConfigFound pointer to a flag which is set to 1 if a configuration was found and processed successfully + * \return error code + */ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( HANDLE_FDK_BITSTREAM bs, CLatmDemux *pLatmDemux, CSTpCallBacks *pTpDecCallbacks, - CSAudioSpecificConfig *pAsc + CSAudioSpecificConfig *pAsc, + int * pfConfigFound ); TRANSPORTDEC_ERROR CLatmDemux_ReadPayloadLengthInfo(HANDLE_FDK_BITSTREAM bs, CLatmDemux *pLatmDemux); diff --git a/libMpegTPDec/src/tpdec_lib.cpp b/libMpegTPDec/src/tpdec_lib.cpp index 2dca5d5..1f9f29b 100644 --- a/libMpegTPDec/src/tpdec_lib.cpp +++ b/libMpegTPDec/src/tpdec_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -197,8 +197,7 @@ HANDLE_TRANSPORTDEC transportDec_Open( const TRANSPORT_TYPE transportFmt, const if (hInput != NULL) { /* Create bitstream */ - if ( (transportFmt == TT_MP4_RAW) - || (transportFmt == TT_DRM) ){ + if ( TT_IS_PACKET(transportFmt) ) { hInput->bsBuffer = NULL; } else { hInput->bsBuffer = GetRam_TransportDecoderBuffer(0); @@ -222,7 +221,9 @@ TRANSPORTDEC_ERROR transportDec_OutOfBandConfig(HANDLE_TRANSPORTDEC hTp, UCHAR * FDK_BITSTREAM bs; HANDLE_FDK_BITSTREAM hBs = &bs; - FDKinitBitStream(hBs, conf, 0x80000000, length<<3, BS_READER); + FDKinitBitStream(hBs, conf, 0x10000000, length<<3, BS_READER); + + int fConfigFound = 0; /* config transport decoder */ switch (hTp->transportFmt) { @@ -234,27 +235,27 @@ TRANSPORTDEC_ERROR transportDec_OutOfBandConfig(HANDLE_TRANSPORTDEC hTp, UCHAR * return TRANSPORTDEC_INVALID_PARAMETER; } CLatmDemux *pLatmDemux = &hTp->parser.latm; - err = CLatmDemux_ReadStreamMuxConfig(hBs, pLatmDemux, &hTp->callbacks, hTp->asc); + err = CLatmDemux_ReadStreamMuxConfig(hBs, pLatmDemux, &hTp->callbacks, hTp->asc, &fConfigFound); if (err != TRANSPORTDEC_OK) { return err; } } break; default: - case TT_MP4_RAW: + fConfigFound = 1; err = AudioSpecificConfig_Parse(&hTp->asc[layer], hBs, 1, &hTp->callbacks); + if (err == TRANSPORTDEC_OK) { + int errC; + + errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[layer]); + if (errC != 0) { + err = TRANSPORTDEC_PARSE_ERROR; + } + } break; } - if (err == TRANSPORTDEC_OK) { - int errC; - errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[layer]); - if (errC != 0) { - err = TRANSPORTDEC_PARSE_ERROR; - } - } - - if (err == TRANSPORTDEC_OK) { + if (err == TRANSPORTDEC_OK && fConfigFound) { hTp->flags |= TPDEC_CONFIG_FOUND; } @@ -313,18 +314,16 @@ TRANSPORTDEC_ERROR transportDec_FillData( /* set bitbuffer shortcut */ hBs = &hTp->bitStream[layer]; - switch (hTp->transportFmt) { - case TT_MP4_RAW: - case TT_DRM: + if ( TT_IS_PACKET(hTp->transportFmt) ) { + if (hTp->numberOfRawDataBlocks == 0) { /* For packet based transport, pass input buffer to bitbuffer without copying the data. Unfortunately we do not know the actual buffer size. And the FDK bit buffer implementation needs a number 2^x. So we assume the maximum of 48 channels with 6144 bits per channel and round it up to the next power of 2 => 65536 bytes */ FDKinitBitStream(hBs, pBuffer, 0x10000, (*pBytesValid)<<3, BS_READER); *pBytesValid = 0; - break; - - default: + } + } else { /* ... else feed bitbuffer with new stream data (append). */ if (hTp->numberOfRawDataBlocks <= 0) { FDKfeedBuffer (hBs, pBuffer, bufferSize, pBytesValid) ; @@ -368,6 +367,82 @@ INT transportDec_GetBufferFullness( const HANDLE_TRANSPORTDEC hTp ) return bufferFullness; } +/** + * \brief adjust bit stream position and the end of an access unit. + * \param hTp transport decoder handle. + * \return error code. + */ +static +TRANSPORTDEC_ERROR transportDec_AdjustEndOfAccessUnit(HANDLE_TRANSPORTDEC hTp) +{ + HANDLE_FDK_BITSTREAM hBs = &hTp->bitStream[0]; + TRANSPORTDEC_ERROR err = TRANSPORTDEC_OK; + + switch (hTp->transportFmt) { + case TT_MP4_LOAS: + case TT_MP4_LATM_MCP0: + case TT_MP4_LATM_MCP1: + if ( hTp->numberOfRawDataBlocks == 0 ) + { + /* Do byte align at the end of AudioMuxElement. */ + FDKbyteAlign(hBs, hTp->globalFramePos); + + /* Check global frame length */ + if (hTp->transportFmt == TT_MP4_LOAS && hTp->parser.latm.m_audioMuxLengthBytes > 0) + { + int loasOffset; + + loasOffset = (hTp->parser.latm.m_audioMuxLengthBytes*8 + FDKgetValidBits(hBs)) - hTp->globalFramePos; + if (loasOffset != 0) { + FDKpushBiDirectional(hBs, loasOffset); + /* For ELD and other payloads there is an unknown amount of padding, so ignore unread bits, but + throw an error only if too many bits where read. */ + if (loasOffset < 0) { + err = TRANSPORTDEC_PARSE_ERROR; + } + } + } + } + break; + + case TT_MP4_ADTS: + if (hTp->parser.adts.bs.protection_absent == 0) + { + int offset; + + /* Calculate offset to end of AU */ + offset = hTp->parser.adts.rawDataBlockDist[hTp->parser.adts.bs.num_raw_blocks-hTp->numberOfRawDataBlocks]<<3; + /* CAUTION: The PCE (if available) is declared to be a part of the header! */ + offset -= hTp->accessUnitAnchor[0] - FDKgetValidBits(hBs) + 16 + hTp->parser.adts.bs.num_pce_bits; + FDKpushBiDirectional(hBs, offset); + } + if (hTp->parser.adts.bs.num_raw_blocks > 0 && hTp->parser.adts.bs.protection_absent == 0) { + /* Note this CRC read currently happens twice because of transportDec_CrcCheck() */ + hTp->parser.adts.crcReadValue = FDKreadBits(hBs, 16); + } + if ( hTp->numberOfRawDataBlocks == 0 ) + { + /* Check global frame length */ + if (hTp->parser.adts.bs.protection_absent == 0) + { + int offset; + + offset = (hTp->parser.adts.bs.frame_length*8 - ADTS_SYNCLENGTH + FDKgetValidBits(hBs)) - hTp->globalFramePos; + if (offset != 0) { + FDKpushBiDirectional(hBs, offset); + } + } + } + break; + + default: + break; + } + + return err; +} + + /** * \brief Determine additional buffer fullness contraint due to burst data reception. * The parameter TPDEC_PARAM_BURSTPERIOD must have been set as a precondition. @@ -432,51 +507,152 @@ TRANSPORTDEC_ERROR additionalHoldOffNeeded( } } -/** - * \brief adjust bit stream position and the end of an access unit. - * \param hTp transport decoder handle. - * \return error code. - */ -static -TRANSPORTDEC_ERROR transportDec_AdjustEndOfAccessUnit(HANDLE_TRANSPORTDEC hTp) +static TRANSPORTDEC_ERROR transportDec_readHeader( + HANDLE_TRANSPORTDEC hTp, + HANDLE_FDK_BITSTREAM hBs, + int syncLength, + int ignoreBufferFullness, + int *pRawDataBlockLength, + int *pfTraverseMoreFrames, + int *pSyncLayerFrameBits, + int *pfConfigFound, + int *pHeaderBits + ) { - HANDLE_FDK_BITSTREAM hBs = &hTp->bitStream[0]; TRANSPORTDEC_ERROR err = TRANSPORTDEC_OK; + int rawDataBlockLength = *pRawDataBlockLength; + int fTraverseMoreFrames = (pfTraverseMoreFrames != NULL) ? *pfTraverseMoreFrames : 0; + int syncLayerFrameBits = (pSyncLayerFrameBits != NULL) ? *pSyncLayerFrameBits : 0; + int fConfigFound = (pfConfigFound != NULL) ? *pfConfigFound : 0; + int startPos; + + startPos = FDKgetValidBits(hBs); switch (hTp->transportFmt) { - case TT_MP4_LOAS: - case TT_MP4_LATM_MCP0: - case TT_MP4_LATM_MCP1: - if ( hTp->numberOfRawDataBlocks == 0 ) + case TT_MP4_ADTS: + if (hTp->numberOfRawDataBlocks <= 0) { - /* Check global frame length */ - if (hTp->transportFmt == TT_MP4_LOAS && hTp->parser.latm.m_audioMuxLengthBytes > 0) - { - int loasOffset; + int errC; - loasOffset = (hTp->parser.latm.m_audioMuxLengthBytes*8 + FDKgetValidBits(hBs)) - hTp->globalFramePos; - if (loasOffset != 0) { - FDKpushBiDirectional(hBs, loasOffset); - /* For ELD and other payloads there is an unknown amount of padding, so ignore unread bits, but - throw an error only if too many bits where read. */ - if (loasOffset < 0) { - err = TRANSPORTDEC_PARSE_ERROR; + hTp->globalFramePos = FDKgetValidBits(hBs); + + /* Parse ADTS header */ + err = adtsRead_DecodeHeader( &hTp->parser.adts, &hTp->asc[0], hBs, ignoreBufferFullness ); + if (err != TRANSPORTDEC_OK) { + if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } else { + errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[0]); + if (errC != 0) { + if (errC == TRANSPORTDEC_NEED_TO_RESTART) { + err = TRANSPORTDEC_NEED_TO_RESTART; + goto bail; + } else { + err = TRANSPORTDEC_SYNC_ERROR; } + } else { + fConfigFound = 1; + hTp->numberOfRawDataBlocks = hTp->parser.adts.bs.num_raw_blocks+1; } } + } + else { + /* Reset CRC because the next bits are the beginning of a raw_data_block() */ + FDKcrcReset(&hTp->parser.adts.crcInfo); + hTp->parser.adts.bs.num_pce_bits = 0; + } + if (err == TRANSPORTDEC_OK) { + hTp->numberOfRawDataBlocks--; + rawDataBlockLength = adtsRead_GetRawDataBlockLength(&hTp->parser.adts, (hTp->parser.adts.bs.num_raw_blocks-hTp->numberOfRawDataBlocks)); + if (rawDataBlockLength <= 0) { + /* No further frame traversal possible. */ + fTraverseMoreFrames = 0; + } + syncLayerFrameBits = (hTp->parser.adts.bs.frame_length<<3) - (startPos - FDKgetValidBits(hBs)) - syncLength; + if (syncLayerFrameBits <= 0) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } else { + hTp->numberOfRawDataBlocks = 0; + } + break; + case TT_MP4_LOAS: + if (hTp->numberOfRawDataBlocks <= 0) + { + syncLayerFrameBits = FDKreadBits(hBs, 13); + hTp->parser.latm.m_audioMuxLengthBytes = syncLayerFrameBits; + syncLayerFrameBits <<= 3; + } + case TT_MP4_LATM_MCP1: + case TT_MP4_LATM_MCP0: + if (hTp->numberOfRawDataBlocks <= 0) + { + hTp->globalFramePos = FDKgetValidBits(hBs); - /* Do global LOAS/LATM audioMuxElement byte alignment */ - FDKbyteAlign(hBs, hTp->globalFramePos); + err = CLatmDemux_Read( + hBs, + &hTp->parser.latm, + hTp->transportFmt, + &hTp->callbacks, + hTp->asc, + &fConfigFound, + ignoreBufferFullness); + + if (err != TRANSPORTDEC_OK) { + if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } else { + hTp->numberOfRawDataBlocks = CLatmDemux_GetNrOfSubFrames(&hTp->parser.latm); + if (hTp->transportFmt == TT_MP4_LOAS) { + syncLayerFrameBits -= startPos - FDKgetValidBits(hBs) - (13); + } + } + } else { + err = CLatmDemux_ReadPayloadLengthInfo(hBs, &hTp->parser.latm); + if (err != TRANSPORTDEC_OK) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } + if (err == TRANSPORTDEC_OK) { + rawDataBlockLength = CLatmDemux_GetFrameLengthInBits(&hTp->parser.latm); + hTp->numberOfRawDataBlocks--; + } else { + hTp->numberOfRawDataBlocks = 0; } break; default: + { + syncLayerFrameBits = 0; + } break; } +bail: + + *pRawDataBlockLength = rawDataBlockLength; + + if (pHeaderBits != NULL) { + *pHeaderBits += startPos - (INT)FDKgetValidBits(hBs); + } + if (pfConfigFound != NULL) { + *pfConfigFound = fConfigFound; + } + + if (pfTraverseMoreFrames != NULL) { + *pfTraverseMoreFrames = fTraverseMoreFrames; + } + if (pSyncLayerFrameBits != NULL) { + *pSyncLayerFrameBits = syncLayerFrameBits; + } + if (pfConfigFound != NULL) { + *pfConfigFound = fConfigFound; + } + return err; } - /* How many bits to advance for synchronization search. */ #define TPDEC_SYNCSKIP 8 @@ -493,9 +669,9 @@ TRANSPORTDEC_ERROR synchronization( INT rawDataBlockLength = 0, rawDataBlockLengthPrevious; INT totalBits; INT headerBits = 0, headerBitsFirstFrame = 0, headerBitsPrevious; - INT numFramesTraversed = 0, fTraverseMoreFrames, fConfigFound = 0, startPos, startPosFirstFrame = -1; + INT numFramesTraversed = 0, fTraverseMoreFrames, fConfigFound = (hTp->flags & TPDEC_CONFIG_FOUND), startPosFirstFrame = -1; INT numRawDataBlocksFirstFrame = 0, numRawDataBlocksPrevious, globalFramePosFirstFrame = 0, rawDataBlockLengthFirstFrame = 0; - INT ignoreBufferFullness = hTp->flags & (TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK); + INT ignoreBufferFullness = hTp->flags & (TPDEC_LOST_FRAMES_PENDING|TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK); /* Synch parameters */ INT syncLength; /* Length of sync word in bits */ @@ -506,10 +682,7 @@ TRANSPORTDEC_ERROR synchronization( totalBits = (INT)FDKgetValidBits(hBs); if (totalBits <= 0) { - /* Return sync error, because this happens only in case of severly damaged bit streams. - Returning TRANSPORTDEC_NOT_ENOUGH_BITS here is very dangerous. */ - /* numberOfRawDataBlocks must be always reset in case of sync errors. */ - hTp->numberOfRawDataBlocks = 0; + err = TRANSPORTDEC_NOT_ENOUGH_BITS; goto bail; } @@ -579,100 +752,22 @@ TRANSPORTDEC_ERROR synchronization( numRawDataBlocksPrevious = hTp->numberOfRawDataBlocks; /* Parse transport header (raw data block granularity) */ - startPos = FDKgetValidBits(hBs); if (err == TRANSPORTDEC_OK ) { - switch (hTp->transportFmt) { - case TT_MP4_ADTS: - if (hTp->numberOfRawDataBlocks <= 0) - { - int errC; - - /* Parse ADTS header */ - err = adtsRead_DecodeHeader( &hTp->parser.adts, &hTp->asc[0], hBs, ignoreBufferFullness ); - if (err != TRANSPORTDEC_OK) { - if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } else { - errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[0]); - if (errC != 0) { - err = TRANSPORTDEC_SYNC_ERROR; - } else { - hTp->numberOfRawDataBlocks = hTp->parser.adts.bs.num_raw_blocks+1; - /* CAUTION: The PCE (if available) is declared to be a part of the header! */ - hTp->globalFramePos = FDKgetValidBits(hBs) + hTp->parser.adts.bs.num_pce_bits; - } - } - } - else { - /* Reset CRC because the next bits are the beginning of a raw_data_block() */ - FDKcrcReset(&hTp->parser.adts.crcInfo); - hTp->globalFramePos = FDKgetValidBits(hBs); - } - if (err == TRANSPORTDEC_OK) { - hTp->numberOfRawDataBlocks--; - rawDataBlockLength = adtsRead_GetRawDataBlockLength(&hTp->parser.adts, (hTp->parser.adts.bs.num_raw_blocks-hTp->numberOfRawDataBlocks)); - syncLayerFrameBits = (hTp->parser.adts.bs.frame_length<<3) - (startPos - FDKgetValidBits(hBs)) - syncLength; - if (syncLayerFrameBits <= 0) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } else { - hTp->numberOfRawDataBlocks = 0; - } - break; - case TT_MP4_LOAS: - if (hTp->numberOfRawDataBlocks <= 0) - { - syncLayerFrameBits = FDKreadBits(hBs, 13); - hTp->parser.latm.m_audioMuxLengthBytes = syncLayerFrameBits; - syncLayerFrameBits <<= 3; - } - case TT_MP4_LATM_MCP1: - case TT_MP4_LATM_MCP0: - if (hTp->numberOfRawDataBlocks <= 0) - { - hTp->globalFramePos = FDKgetValidBits(hBs); - - err = CLatmDemux_Read( - hBs, - &hTp->parser.latm, - hTp->transportFmt, - &hTp->callbacks, - hTp->asc, - ignoreBufferFullness); - - if (err != TRANSPORTDEC_OK) { - if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } else { - hTp->numberOfRawDataBlocks = CLatmDemux_GetNrOfSubFrames(&hTp->parser.latm); - syncLayerFrameBits -= startPos - FDKgetValidBits(hBs) - (13); - } - } else { - err = CLatmDemux_ReadPayloadLengthInfo(hBs, &hTp->parser.latm); - if (err != TRANSPORTDEC_OK) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } - if (err == TRANSPORTDEC_OK) { - rawDataBlockLength = CLatmDemux_GetFrameLengthInBits(&hTp->parser.latm); - hTp->numberOfRawDataBlocks--; - } else { - hTp->numberOfRawDataBlocks = 0; - } - break; - default: - { - syncLayerFrameBits = 0; - } - break; - } + err = transportDec_readHeader( + hTp, + hBs, + syncLength, + ignoreBufferFullness, + &rawDataBlockLength, + &fTraverseMoreFrames, + &syncLayerFrameBits, + &fConfigFound, + &headerBits + ); } - headerBits += startPos - (INT)FDKgetValidBits(hBs); bitsAvail -= headerBits; checkLengthBits = syncLayerFrameBits; @@ -702,12 +797,12 @@ TRANSPORTDEC_ERROR synchronization( /* Enforce re-sync of transport headers. */ hTp->numberOfRawDataBlocks = 0; - /* Ensure that the bit amount lands and a multiple of TPDEC_SYNCSKIP */ + /* Ensure that the bit amount lands at a multiple of TPDEC_SYNCSKIP */ bits = (bitsAvail + headerBits) % TPDEC_SYNCSKIP; /* Rewind - TPDEC_SYNCSKIP, in order to look for a synch one bit ahead next time. */ FDKpushBiDirectional(hBs, -(headerBits - TPDEC_SYNCSKIP) + bits); bitsAvail += headerBits - TPDEC_SYNCSKIP - bits; - headerBits = 0; + headerBits = 0; } /* Frame traversal */ @@ -731,7 +826,15 @@ TRANSPORTDEC_ERROR synchronization( } /* Break when config was found or it is not possible anymore to find a config */ - if (startPosFirstFrame != -1 && (fConfigFound || err != TRANSPORTDEC_OK)) { + if (startPosFirstFrame != -1 && (fConfigFound || err != TRANSPORTDEC_OK)) + { + /* In case of ECD and sync error, do not rewind anywhere. */ + if (err == TRANSPORTDEC_SYNC_ERROR) + { + startPosFirstFrame = -1; + fConfigFound = 0; + numFramesTraversed = 0; + } break; } } @@ -759,7 +862,7 @@ TRANSPORTDEC_ERROR synchronization( } /* Additional burst data mode buffer fullness check. */ - if ( !(hTp->flags & (TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK)) && err == TRANSPORTDEC_OK) { + if ( !(hTp->flags & (TPDEC_LOST_FRAMES_PENDING|TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK)) && err == TRANSPORTDEC_OK) { err = additionalHoldOffNeeded(hTp, transportDec_GetBufferFullness(hTp), FDKgetValidBits(hBs) - syncLayerFrameBits); if (err == TRANSPORTDEC_NOT_ENOUGH_BITS) { hTp->holdOffFrames++; @@ -789,10 +892,22 @@ TRANSPORTDEC_ERROR synchronization( bail: hTp->auLength[0] = rawDataBlockLength; + /* Detect pointless TRANSPORTDEC_NOT_ENOUGH_BITS error case, were the bit buffer is already full, + or no new burst packet fits. Recover by advancing the bit buffer. */ + if ( (TRANSPORTDEC_NOT_ENOUGH_BITS == err) && (FDKgetValidBits(hBs) >= ((TRANSPORTDEC_INBUF_SIZE*8 - ((hTp->avgBitRate*hTp->burstPeriod)/1000)) - 7)) ) + { + FDKpushFor(hBs, TPDEC_SYNCSKIP); + err = TRANSPORTDEC_SYNC_ERROR; + } + if (err == TRANSPORTDEC_OK) { hTp->flags |= TPDEC_SYNCOK; } + if (fConfigFound) { + hTp->flags |= TPDEC_CONFIG_FOUND; + } + if (pHeaderBits != NULL) { *pHeaderBits = headerBits; } @@ -925,6 +1040,10 @@ TRANSPORTDEC_ERROR transportDec_ReadAccessUnit( const HANDLE_TRANSPORTDEC hTp, c hBs = &hTp->bitStream[layer]; + if ((INT)FDKgetValidBits(hBs) <= 0) { + err = TRANSPORTDEC_NOT_ENOUGH_BITS; + } + switch (hTp->transportFmt) { case TT_MP4_ADIF: @@ -964,20 +1083,26 @@ TRANSPORTDEC_ERROR transportDec_ReadAccessUnit( const HANDLE_TRANSPORTDEC hTp, c break; case TT_MP4_RAW: - if ((INT)FDKgetValidBits(hBs) <= 0 && layer == 0) { - err = TRANSPORTDEC_NOT_ENOUGH_BITS; - } /* One Access Unit was filled into buffer. So get the length out of the buffer. */ hTp->auLength[layer] = FDKgetValidBits(hBs); hTp->flags |= TPDEC_SYNCOK; break; + case TT_MP4_LATM_MCP0: + case TT_MP4_LATM_MCP1: + { + int fConfigFound = hTp->flags & TPDEC_CONFIG_FOUND; + err = transportDec_readHeader(hTp, hBs, 0, 1, &hTp->auLength[layer], NULL, NULL, &fConfigFound, NULL); + if (fConfigFound) { + hTp->flags |= TPDEC_CONFIG_FOUND; + } + } + break; + case TT_RSVD50: case TT_MP4_ADTS: case TT_MP4_LOAS: - case TT_MP4_LATM_MCP0: - case TT_MP4_LATM_MCP1: err = transportDec_readStream(hTp, layer); break; @@ -1026,13 +1151,10 @@ TRANSPORTDEC_ERROR transportDec_EndAccessUnit(HANDLE_TRANSPORTDEC hTp) { TRANSPORTDEC_ERROR err = TRANSPORTDEC_OK; + err = transportDec_AdjustEndOfAccessUnit(hTp); switch (hTp->transportFmt) { - case TT_MP4_LOAS: - case TT_MP4_LATM_MCP0: - case TT_MP4_LATM_MCP1: - break; default: break; } @@ -1082,8 +1204,11 @@ TRANSPORTDEC_ERROR transportDec_SetParam ( const HANDLE_TRANSPORTDEC hTp, FDKresetBitbuffer(&hTp->bitStream[i]); hTp->auLength[i] = 0; hTp->accessUnitAnchor[i] = 0; - } + } hTp->flags &= ~(TPDEC_SYNCOK|TPDEC_LOST_FRAMES_PENDING); + if (hTp->transportFmt != TT_MP4_ADIF) { + hTp->flags &= ~TPDEC_CONFIG_FOUND; + } hTp->remainder = 0; hTp->avgBitRate = 0; hTp->missingAccessUnits = 0; @@ -1117,7 +1242,7 @@ void transportDec_Close(HANDLE_TRANSPORTDEC *phTp) if (phTp != NULL) { if (*phTp != NULL) { - if ((*phTp)->transportFmt != TT_MP4_RAW && (*phTp)->transportFmt != TT_DRM) { + if ( ! TT_IS_PACKET((*phTp)->transportFmt) ) { FreeRam_TransportDecoderBuffer(&(*phTp)->bsBuffer); } if (*phTp != NULL) { @@ -1188,13 +1313,8 @@ TRANSPORTDEC_ERROR transportDec_CrcCheck(HANDLE_TRANSPORTDEC pTp) if ( (pTp->parser.adts.bs.num_raw_blocks > 0) && (pTp->parser.adts.bs.protection_absent == 0) ) { HANDLE_FDK_BITSTREAM hBs = &pTp->bitStream[0]; - int bitDiff; - /* Calculate possible offset to CRC value. */ - bitDiff = pTp->parser.adts.rawDataBlockDist[pTp->parser.adts.bs.num_raw_blocks-pTp->numberOfRawDataBlocks]<<3; - bitDiff -= pTp->globalFramePos - FDKgetValidBits(hBs) + 16; - FDKpushBiDirectional(hBs, bitDiff); - pTp->parser.adts.crcReadValue = FDKreadBits(hBs, 16); + transportDec_AdjustEndOfAccessUnit(pTp); } return adtsRead_CrcCheck(&pTp->parser.adts); default: diff --git a/libMpegTPDec/src/version b/libMpegTPDec/src/version index 5b9a425..2803347 100644 --- a/libMpegTPDec/src/version +++ b/libMpegTPDec/src/version @@ -1,8 +1,8 @@ /* library info */ #define TP_LIB_VL0 2 -#define TP_LIB_VL1 2 -#define TP_LIB_VL2 1 +#define TP_LIB_VL1 3 +#define TP_LIB_VL2 3 #define TP_LIB_TITLE "MPEG Transport" #define TP_LIB_BUILD_DATE __DATE__ #define TP_LIB_BUILD_TIME __TIME__ diff --git a/libMpegTPEnc/include/mpegFileWrite.h b/libMpegTPEnc/include/mpegFileWrite.h index 6716d8f..f886a0b 100644 --- a/libMpegTPEnc/include/mpegFileWrite.h +++ b/libMpegTPEnc/include/mpegFileWrite.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/include/tp_data.h b/libMpegTPEnc/include/tp_data.h index 6e8218a..5269858 100644 --- a/libMpegTPEnc/include/tp_data.h +++ b/libMpegTPEnc/include/tp_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/include/tpenc_lib.h b/libMpegTPEnc/include/tpenc_lib.h index a06e7a7..2833e82 100644 --- a/libMpegTPEnc/include/tpenc_lib.h +++ b/libMpegTPEnc/include/tpenc_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adif.cpp b/libMpegTPEnc/src/tpenc_adif.cpp index 06bd30b..b48a32e 100644 --- a/libMpegTPEnc/src/tpenc_adif.cpp +++ b/libMpegTPEnc/src/tpenc_adif.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adif.h b/libMpegTPEnc/src/tpenc_adif.h index 0921712..d590354 100644 --- a/libMpegTPEnc/src/tpenc_adif.h +++ b/libMpegTPEnc/src/tpenc_adif.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adts.cpp b/libMpegTPEnc/src/tpenc_adts.cpp index 39460f0..f4f3178 100644 --- a/libMpegTPEnc/src/tpenc_adts.cpp +++ b/libMpegTPEnc/src/tpenc_adts.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adts.h b/libMpegTPEnc/src/tpenc_adts.h index 9123f1e..c12c7c7 100644 --- a/libMpegTPEnc/src/tpenc_adts.h +++ b/libMpegTPEnc/src/tpenc_adts.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_asc.cpp b/libMpegTPEnc/src/tpenc_asc.cpp index 6200c14..bc4302e 100644 --- a/libMpegTPEnc/src/tpenc_asc.cpp +++ b/libMpegTPEnc/src/tpenc_asc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,8 +127,7 @@ typedef struct { * * The number of channel element parameter describes the kind of consecutively elements. * E.g. MODE_1_2_2_2_1 means: - * - First 2 elements (SCE,CPE) are front channel elements. - * - Following element (CPE) is a side channel element. + * - First 3 elements (SCE,CPE,CPE) are front channel elements. * - Next element (CPE) is a back channel element. * - Last element (LFE) is a lfe channel element. */ @@ -140,7 +139,8 @@ static const CHANNEL_CONFIGURATION pceConfigTab[] = { MODE_1_2_1, { 2, 0, 1, 0, { ID_SCE, ID_CPE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_1_2_2, { 2, 0, 1, 0, { ID_SCE, ID_CPE, ID_CPE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_1_2_2_1, { 2, 0, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, - { MODE_1_2_2_2_1, { 2, 1, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + { MODE_1_2_2_2_1, { 3, 0, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + { MODE_1_1, { 2, 0, 0, 0, { ID_SCE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_1_1_1_1, { 2, 2, 0, 0, { ID_SCE, ID_SCE, ID_SCE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, @@ -151,7 +151,11 @@ static const CHANNEL_CONFIGURATION pceConfigTab[] = { MODE_2_2_2, { 1, 1, 1, 0, { ID_CPE, ID_CPE, ID_CPE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_2_2_2_2, { 4, 0, 0, 0, { ID_CPE, ID_CPE, ID_CPE, ID_CPE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, - { MODE_2_1, { 1, 0, 1, 0, { ID_CPE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } } + { MODE_2_1, { 1, 0, 1, 0, { ID_CPE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, + + { MODE_7_1_REAR_SURROUND, { 2, 0, 2, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + { MODE_7_1_FRONT_CENTER, { 3, 0, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + }; @@ -255,7 +259,7 @@ int transportEnc_writePCE(HANDLE_FDK_BITSTREAM hBs, if ( matrixMixdownA!=0 && ((channelMode==MODE_1_2_2)||(channelMode==MODE_1_2_2_1)) ) { FDKwriteBits(hBs, 1, 1); /* Matrix mixdown present */ FDKwriteBits(hBs, (matrixMixdownA-1)&0x3, 2); /* matrix_mixdown_idx */ - FDKwriteBits(hBs, pseudoSurroundEnable&0x1, 1); /* pseudo_surround_enable */ + FDKwriteBits(hBs, (pseudoSurroundEnable)?1:0, 1); /* pseudo_surround_enable */ } else { FDKwriteBits(hBs, 0, 1); /* Matrix mixdown not present */ @@ -379,7 +383,7 @@ int transportEnc_writeGASpecificConfig( /* Write PCE if channel config is not 1-7 */ if (getChannelConfig(config->channelMode) == 0) { - transportEnc_writePCE(asc, config->channelMode, config->samplingRate, 0, 1, 0, 0, alignAnchor); + transportEnc_writePCE(asc, config->channelMode, config->samplingRate, 0, 1, config->matrixMixdownA, (config->flags&CC_PSEUDO_SURROUND)?1:0, alignAnchor); } if (extFlg) { if (aot == AOT_ER_BSAC) { @@ -474,7 +478,7 @@ int transportEnc_writeASC ( break; } - if (config->extAOT == AOT_SBR || config->extAOT == AOT_PS) + if (config->sbrSignaling==SIG_EXPLICIT_HIERARCHICAL && config->sbrPresent) writeAot(asc, config->extAOT); else writeAot(asc, config->aot); @@ -492,7 +496,7 @@ int transportEnc_writeASC ( FDKwriteBits( asc, getChannelConfig(config->channelMode), 4 ); - if (config->extAOT == AOT_SBR || config->extAOT == AOT_PS) { + if (config->sbrSignaling==SIG_EXPLICIT_HIERARCHICAL && config->sbrPresent) { writeSampleRate(asc, config->extSamplingRate); writeAot(asc, config->aot); } @@ -545,6 +549,26 @@ int transportEnc_writeASC ( break; } + /* backward compatible explicit signaling of extension AOT */ + if (config->sbrSignaling==SIG_EXPLICIT_BW_COMPATIBLE) + { + TP_ASC_EXTENSION_ID ascExtId = ASCEXT_UNKOWN; + + if (config->sbrPresent) { + ascExtId=ASCEXT_SBR; + FDKwriteBits( asc, ascExtId, 11 ); + writeAot(asc, config->extAOT); + FDKwriteBits( asc, 1, 1 ); /* sbrPresentFlag=1 */ + writeSampleRate(asc, config->extSamplingRate); + if (config->psPresent) { + ascExtId=ASCEXT_PS; + FDKwriteBits( asc, ascExtId, 11 ); + FDKwriteBits( asc, 1, 1 ); /* psPresentFlag=1 */ + } + } + + } + /* Make sure all bits are sync'ed */ FDKsyncCache( asc ); diff --git a/libMpegTPEnc/src/tpenc_asc.h b/libMpegTPEnc/src/tpenc_asc.h index 990f74f..47fe7a1 100644 --- a/libMpegTPEnc/src/tpenc_asc.h +++ b/libMpegTPEnc/src/tpenc_asc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_latm.cpp b/libMpegTPEnc/src/tpenc_latm.cpp index 54fd717..58e51ef 100644 --- a/libMpegTPEnc/src/tpenc_latm.cpp +++ b/libMpegTPEnc/src/tpenc_latm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_latm.h b/libMpegTPEnc/src/tpenc_latm.h index fd95a60..34eea58 100644 --- a/libMpegTPEnc/src/tpenc_latm.h +++ b/libMpegTPEnc/src/tpenc_latm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_lib.cpp b/libMpegTPEnc/src/tpenc_lib.cpp index 4f3177d..d0a2fec 100644 --- a/libMpegTPEnc/src/tpenc_lib.cpp +++ b/libMpegTPEnc/src/tpenc_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -150,10 +150,16 @@ C_ALLOC_MEM(Ram_TransportEncoder, TRANSPORTENC, 1) TRANSPORTENC_ERROR transportEnc_Open( HANDLE_TRANSPORTENC *phTpEnc ) { - HANDLE_TRANSPORTENC hTpEnc = GetRam_TransportEncoder(0); + HANDLE_TRANSPORTENC hTpEnc; + + if ( phTpEnc == NULL ){ + return TRANSPORTENC_INVALID_PARAMETER; + } + + hTpEnc = GetRam_TransportEncoder(0); if ( hTpEnc == NULL ) { - return TRANSPORTENC_INVALID_PARAMETER; + return TRANSPORTENC_NO_MEM; } *phTpEnc = hTpEnc; @@ -417,7 +423,7 @@ TRANSPORTENC_ERROR transportEnc_WriteAccessUnit( } /* Write PCE as first raw_data_block element */ - transportEnc_writePCE(&hTp->bitStream, hTp->config.channelMode, hTp->config.samplingRate, 0, 1, hTp->config.matrixMixdownA, hTp->config.flags & CC_PSEUDO_SURROUND, alignAnchor); + transportEnc_writePCE(&hTp->bitStream, hTp->config.channelMode, hTp->config.samplingRate, 0, 1, hTp->config.matrixMixdownA, (hTp->config.flags&CC_PSEUDO_SURROUND)?1:0, alignAnchor); if ( (hTp->transportFmt==TT_MP4_ADTS) && !hTp->writer.adts.protection_absent) { adtsWrite_CrcEndReg(&hTp->writer.adts, &hTp->bitStream, crcIndex); diff --git a/libMpegTPEnc/src/version b/libMpegTPEnc/src/version index 5b9a425..2803347 100644 --- a/libMpegTPEnc/src/version +++ b/libMpegTPEnc/src/version @@ -1,8 +1,8 @@ /* library info */ #define TP_LIB_VL0 2 -#define TP_LIB_VL1 2 -#define TP_LIB_VL2 1 +#define TP_LIB_VL1 3 +#define TP_LIB_VL2 3 #define TP_LIB_TITLE "MPEG Transport" #define TP_LIB_BUILD_DATE __DATE__ #define TP_LIB_BUILD_TIME __TIME__ diff --git a/libPCMutils/include/pcmutils_lib.h b/libPCMutils/include/pcmutils_lib.h index fd4a26d..5ba74be 100644 --- a/libPCMutils/include/pcmutils_lib.h +++ b/libPCMutils/include/pcmutils_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libPCMutils/src/pcmutils_lib.cpp b/libPCMutils/src/pcmutils_lib.cpp index e0a9817..a84a050 100644 --- a/libPCMutils/src/pcmutils_lib.cpp +++ b/libPCMutils/src/pcmutils_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -96,8 +96,8 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define PCMDMX_LIB_VL0 2 -#define PCMDMX_LIB_VL1 3 -#define PCMDMX_LIB_VL2 1 +#define PCMDMX_LIB_VL1 4 +#define PCMDMX_LIB_VL2 0 #define PCMDMX_LIB_TITLE "PCM Downmix Lib" #define PCMDMX_LIB_BUILD_DATE __DATE__ #define PCMDMX_LIB_BUILD_TIME __TIME__ diff --git a/libSBRdec/include/sbrdecoder.h b/libSBRdec/include/sbrdecoder.h index 300a6d9..13707e0 100644 --- a/libSBRdec/include/sbrdecoder.h +++ b/libSBRdec/include/sbrdecoder.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/arm/env_calc_arm.cpp b/libSBRdec/src/arm/env_calc_arm.cpp index 4e3a6de..12b17d8 100644 --- a/libSBRdec/src/arm/env_calc_arm.cpp +++ b/libSBRdec/src/arm/env_calc_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/arm/lpp_tran_arm.cpp b/libSBRdec/src/arm/lpp_tran_arm.cpp index 541e7c7..78bbc2c 100644 --- a/libSBRdec/src/arm/lpp_tran_arm.cpp +++ b/libSBRdec/src/arm/lpp_tran_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_calc.cpp b/libSBRdec/src/env_calc.cpp index 11df761..ade57fc 100644 --- a/libSBRdec/src/env_calc.cpp +++ b/libSBRdec/src/env_calc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_calc.h b/libSBRdec/src/env_calc.h index d21e0b3..8154166 100644 --- a/libSBRdec/src/env_calc.h +++ b/libSBRdec/src/env_calc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_dec.cpp b/libSBRdec/src/env_dec.cpp index ac6c299..24b2d3b 100644 --- a/libSBRdec/src/env_dec.cpp +++ b/libSBRdec/src/env_dec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -624,8 +624,8 @@ timeCompensateFirstEnvelope (HANDLE_SBR_HEADER_DATA hHeaderData, /*!< Static con deltaExp = FDK_getNumOctavesDiv8(newLen, refLen); - /* Shift by -3 to rescale ld-table, 1-ampRes to enable coarser steps */ - shift = (FRACT_BITS - 1 - ENV_EXP_FRACT + 1 - h_sbr_data->ampResolutionCurrentFrame - 3); + /* Shift by -3 to rescale ld-table, ampRes-1 to enable coarser steps */ + shift = (FRACT_BITS - 1 - ENV_EXP_FRACT - 1 + h_sbr_data->ampResolutionCurrentFrame - 3); deltaExp = deltaExp >> shift; pFrameInfo->borders[0] = estimatedStartPos; pFrameInfo->bordersNoise[0] = estimatedStartPos; diff --git a/libSBRdec/src/env_dec.h b/libSBRdec/src/env_dec.h index 3e656ed..6f6dae3 100644 --- a/libSBRdec/src/env_dec.h +++ b/libSBRdec/src/env_dec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_extr.cpp b/libSBRdec/src/env_extr.cpp index 716fb91..6cb0b99 100644 --- a/libSBRdec/src/env_extr.cpp +++ b/libSBRdec/src/env_extr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_extr.h b/libSBRdec/src/env_extr.h index be46246..5db6d3d 100644 --- a/libSBRdec/src/env_extr.h +++ b/libSBRdec/src/env_extr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/huff_dec.cpp b/libSBRdec/src/huff_dec.cpp index 6e00b23..31d686d 100644 --- a/libSBRdec/src/huff_dec.cpp +++ b/libSBRdec/src/huff_dec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/huff_dec.h b/libSBRdec/src/huff_dec.h index 7b2b50b..5443658 100644 --- a/libSBRdec/src/huff_dec.h +++ b/libSBRdec/src/huff_dec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/lpp_tran.cpp b/libSBRdec/src/lpp_tran.cpp index 2d51831..117e739 100644 --- a/libSBRdec/src/lpp_tran.cpp +++ b/libSBRdec/src/lpp_tran.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -875,22 +875,8 @@ resetLppTransposer (HANDLE_SBR_LPP_TRANS hLppTrans, /*!< Handle of lpp transpos /* * Initialize the patching parameter */ - desiredBorder = 21; - if (fs < 92017) { - desiredBorder = 23; - } - if (fs < 75132) { - desiredBorder = 32; - } - if (fs < 55426) { - desiredBorder = 43; - } - if (fs < 46009) { - desiredBorder = 46; - } - if (fs < 35777) { - desiredBorder = 64; - } + /* ISO/IEC 14496-3 (Figure 4.48): goalSb = round( 2.048e6 / fs ) */ + desiredBorder = (((2048000*2) / fs) + 1) >> 1; desiredBorder = findClosestEntry(desiredBorder, v_k_master, numMaster, 1); /* Adapt region to master-table */ diff --git a/libSBRdec/src/lpp_tran.h b/libSBRdec/src/lpp_tran.h index 1838c06..003a547 100644 --- a/libSBRdec/src/lpp_tran.h +++ b/libSBRdec/src/lpp_tran.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psbitdec.cpp b/libSBRdec/src/psbitdec.cpp index dfd532f..29bddf7 100644 --- a/libSBRdec/src/psbitdec.cpp +++ b/libSBRdec/src/psbitdec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psbitdec.h b/libSBRdec/src/psbitdec.h index 3b65468..a2d4d6c 100644 --- a/libSBRdec/src/psbitdec.h +++ b/libSBRdec/src/psbitdec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec.cpp b/libSBRdec/src/psdec.cpp index d494c65..965917a 100644 --- a/libSBRdec/src/psdec.cpp +++ b/libSBRdec/src/psdec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec.h b/libSBRdec/src/psdec.h index e3a0424..3dbc76d 100644 --- a/libSBRdec/src/psdec.h +++ b/libSBRdec/src/psdec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec_hybrid.cpp b/libSBRdec/src/psdec_hybrid.cpp index 7fc2c0a..cbd0e92 100644 --- a/libSBRdec/src/psdec_hybrid.cpp +++ b/libSBRdec/src/psdec_hybrid.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec_hybrid.h b/libSBRdec/src/psdec_hybrid.h index 6503df9..fcf9e3e 100644 --- a/libSBRdec/src/psdec_hybrid.h +++ b/libSBRdec/src/psdec_hybrid.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_crc.cpp b/libSBRdec/src/sbr_crc.cpp index 760bd1f..a495f10 100644 --- a/libSBRdec/src/sbr_crc.cpp +++ b/libSBRdec/src/sbr_crc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_crc.h b/libSBRdec/src/sbr_crc.h index 542843d..30b8329 100644 --- a/libSBRdec/src/sbr_crc.h +++ b/libSBRdec/src/sbr_crc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_deb.cpp b/libSBRdec/src/sbr_deb.cpp index aa37ffe..9baff2e 100644 --- a/libSBRdec/src/sbr_deb.cpp +++ b/libSBRdec/src/sbr_deb.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_deb.h b/libSBRdec/src/sbr_deb.h index 324dea9..cb954ba 100644 --- a/libSBRdec/src/sbr_deb.h +++ b/libSBRdec/src/sbr_deb.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_dec.cpp b/libSBRdec/src/sbr_dec.cpp index bd3cd10..1282338 100644 --- a/libSBRdec/src/sbr_dec.cpp +++ b/libSBRdec/src/sbr_dec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -760,6 +760,8 @@ createSbrDec (SBR_CHANNEL * hSbrChannel, */ { int qmfErr; + /* Adapted QMF analysis post-twiddles for down-sampled HQ SBR */ + const UINT downSampledFlag = (downsampleFac==2) ? QMF_FLAG_DOWNSAMPLED : 0; qmfErr = qmfInitAnalysisFilterBank ( &hs->AnalysiscQMF, @@ -768,7 +770,7 @@ createSbrDec (SBR_CHANNEL * hSbrChannel, hHeaderData->freqBandData.lowSubband, hHeaderData->freqBandData.highSubband, hHeaderData->numberOfAnalysisBands, - qmfFlags & (~QMF_FLAG_KEEP_STATES) + (qmfFlags & (~QMF_FLAG_KEEP_STATES)) | downSampledFlag ); if (qmfErr != 0) { return SBRDEC_UNSUPPORTED_CONFIG; diff --git a/libSBRdec/src/sbr_dec.h b/libSBRdec/src/sbr_dec.h index 309327f..175e7b2 100644 --- a/libSBRdec/src/sbr_dec.h +++ b/libSBRdec/src/sbr_dec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_ram.cpp b/libSBRdec/src/sbr_ram.cpp index ee95e01..6ae941f 100644 --- a/libSBRdec/src/sbr_ram.cpp +++ b/libSBRdec/src/sbr_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_ram.h b/libSBRdec/src/sbr_ram.h index 5469e51..8fc2dae 100644 --- a/libSBRdec/src/sbr_ram.h +++ b/libSBRdec/src/sbr_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_rom.cpp b/libSBRdec/src/sbr_rom.cpp index 8520b14..e84c3cd 100644 --- a/libSBRdec/src/sbr_rom.cpp +++ b/libSBRdec/src/sbr_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -110,6 +110,8 @@ const UCHAR FDK_sbrDecoder_sbr_start_freq_32[16] = {10, 12, 14, 15, 16, 17, 18, const UCHAR FDK_sbrDecoder_sbr_start_freq_40[16] = {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 30, 32}; const UCHAR FDK_sbrDecoder_sbr_start_freq_44[16] = { 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 28, 32}; const UCHAR FDK_sbrDecoder_sbr_start_freq_48[16] = { 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24, 27, 31}; +const UCHAR FDK_sbrDecoder_sbr_start_freq_64[16] = { 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 23, 26, 30}; +const UCHAR FDK_sbrDecoder_sbr_start_freq_88[16] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 23, 27, 31}; //@} diff --git a/libSBRdec/src/sbr_rom.h b/libSBRdec/src/sbr_rom.h index 912f7e4..c318870 100644 --- a/libSBRdec/src/sbr_rom.h +++ b/libSBRdec/src/sbr_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -106,6 +106,8 @@ extern const UCHAR FDK_sbrDecoder_sbr_start_freq_32[16]; extern const UCHAR FDK_sbrDecoder_sbr_start_freq_40[16]; extern const UCHAR FDK_sbrDecoder_sbr_start_freq_44[16]; extern const UCHAR FDK_sbrDecoder_sbr_start_freq_48[16]; +extern const UCHAR FDK_sbrDecoder_sbr_start_freq_64[16]; +extern const UCHAR FDK_sbrDecoder_sbr_start_freq_88[16]; /* Low-Power-Profile Transposer diff --git a/libSBRdec/src/sbr_scale.h b/libSBRdec/src/sbr_scale.h index a98fc05..5fccd71 100644 --- a/libSBRdec/src/sbr_scale.h +++ b/libSBRdec/src/sbr_scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbrdec_drc.cpp b/libSBRdec/src/sbrdec_drc.cpp index 7497b66..a834c0b 100644 --- a/libSBRdec/src/sbrdec_drc.cpp +++ b/libSBRdec/src/sbrdec_drc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,8 +127,8 @@ void sbrDecoder_drcInitChannel ( hDrcData->currFact_exp = 1; hDrcData->nextFact_exp = 1; - hDrcData->numBandsCurr = 0; - hDrcData->numBandsNext = 0; + hDrcData->numBandsCurr = 1; + hDrcData->numBandsNext = 1; hDrcData->winSequenceCurr = 0; hDrcData->winSequenceNext = 0; @@ -490,9 +490,7 @@ void sbrDecoder_drcApply ( if (hDrcData == NULL) { return; } - if ( (hDrcData->enable == 0) - || ((hDrcData->numBandsCurr == 0) && (hDrcData->numBandsNext == 0)) - ) { + if (hDrcData->enable == 0) { return; /* Avoid changing the scaleFactor even though the processing is disabled. */ } diff --git a/libSBRdec/src/sbrdec_drc.h b/libSBRdec/src/sbrdec_drc.h index 14deff7..872c6a0 100644 --- a/libSBRdec/src/sbrdec_drc.h +++ b/libSBRdec/src/sbrdec_drc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbrdec_freq_sca.cpp b/libSBRdec/src/sbrdec_freq_sca.cpp index b877545..8adfbb1 100644 --- a/libSBRdec/src/sbrdec_freq_sca.cpp +++ b/libSBRdec/src/sbrdec_freq_sca.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -124,6 +124,13 @@ getStartBand(UINT fs, /*!< Output sampling frequency */ fsMapped = fs; switch (fsMapped) { + case 96000: + case 88200: + band = FDK_sbrDecoder_sbr_start_freq_88[startFreq]; + break; + case 64000: + band = FDK_sbrDecoder_sbr_start_freq_64[startFreq]; + break; case 48000: band = FDK_sbrDecoder_sbr_start_freq_48[startFreq]; break; diff --git a/libSBRdec/src/sbrdec_freq_sca.h b/libSBRdec/src/sbrdec_freq_sca.h index eebdd52..cfe4f0e 100644 --- a/libSBRdec/src/sbrdec_freq_sca.h +++ b/libSBRdec/src/sbrdec_freq_sca.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbrdecoder.cpp b/libSBRdec/src/sbrdecoder.cpp index 192bdd2..26b2ea2 100644 --- a/libSBRdec/src/sbrdecoder.cpp +++ b/libSBRdec/src/sbrdecoder.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -83,7 +83,7 @@ amm-info@iis.fraunhofer.de /*! \file - \brief SBR decoder frontend + \brief SBR decoder frontend This module provides a frontend to the SBR decoder. The function openSBR() is called for initialization. The function sbrDecoder_Apply() is called for each frame. sbr_Apply() will call the required functions to decode the raw SBR data (provided by env_extr.cpp), to decode the envelope data and noise floor levels [decodeSbrData()], @@ -136,7 +136,7 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define SBRDECODER_LIB_VL0 2 -#define SBRDECODER_LIB_VL1 1 +#define SBRDECODER_LIB_VL1 2 #define SBRDECODER_LIB_VL2 3 #define SBRDECODER_LIB_TITLE "SBR Decoder" #define SBRDECODER_LIB_BUILD_DATE __DATE__ @@ -217,14 +217,14 @@ SBR_ERROR sbrDecoder_ResetElement ( /* Check in/out samplerates */ if ( sampleRateIn < 6400 - || sampleRateIn > 24000 + || sampleRateIn > 48000 ) { sbrError = SBRDEC_UNSUPPORTED_CONFIG; goto bail; } - if ( sampleRateOut > 48000 ) + if ( sampleRateOut > 96000 ) { sbrError = SBRDEC_UNSUPPORTED_CONFIG; goto bail; @@ -552,7 +552,7 @@ bail: sbrDecoder_DestroyElement( self, elementIndex ); } else if (self->pSbrElement[elementIndex] != NULL) { /* Set error flag to trigger concealment */ - self->pSbrElement[elementIndex]->frameErrorFlag[self->pSbrElement[elementIndex]->useFrameSlot] = 1;; + self->pSbrElement[elementIndex]->frameErrorFlag[self->pSbrElement[elementIndex]->useFrameSlot] = 1; } } @@ -731,6 +731,12 @@ SBR_ERROR sbrDecoder_SetParam (HANDLE_SBRDECODER self, case SBR_BS_INTERRUPTION: { int elementIndex; + + if (self == NULL) { + errorStatus = SBRDEC_NOT_INITIALIZED; + break; + } + /* Loop over SBR elements */ for (elementIndex = 0; elementIndex < self->numSbrElements; elementIndex++) { @@ -878,7 +884,7 @@ void sbrDecoder_drcDisable ( HANDLE_SBRDECODER self, pSbrDrcChannelData = sbrDecoder_drcGetChannel( self, ch ); if ( pSbrDrcChannelData != NULL ) { - pSbrDrcChannelData->enable = 0; + sbrDecoder_drcInitChannel( pSbrDrcChannelData ); } } diff --git a/libSBRdec/src/transcendent.h b/libSBRdec/src/transcendent.h index f0ee21e..ad88bc9 100644 --- a/libSBRdec/src/transcendent.h +++ b/libSBRdec/src/transcendent.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/include/sbr_encoder.h b/libSBRenc/include/sbr_encoder.h index 992c20c..93dc46d 100644 --- a/libSBRenc/include/sbr_encoder.h +++ b/libSBRenc/include/sbr_encoder.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -101,6 +101,14 @@ amm-info@iis.fraunhofer.de #define MAX_CODEC_FRAME_RATIO 2 #define MAX_PAYLOAD_SIZE 256 +typedef enum codecType +{ + CODEC_AAC=0, + CODEC_AACLD=1, + CODEC_UNSPECIFIED=99 +} CODEC_TYPE; + + typedef struct { INT bitRate; @@ -129,10 +137,11 @@ enum typedef struct { + CODEC_TYPE coreCoder; /*!< LC or ELD */ UINT bitrateFrom; /*!< inclusive */ UINT bitrateTo; /*!< exclusive */ - USHORT sampleRate; /*!< */ + UINT sampleRate; /*!< */ UCHAR numChannels; /*!< */ UCHAR startFreq; /*!< bs_start_freq */ @@ -158,6 +167,7 @@ typedef struct sbrConfiguration INT crcSbr; /*!< Flag: usage of SBR-CRC. */ INT dynBwSupported; /*!< Flag: support for dynamic bandwidth in this combination. */ INT parametricCoding; /*!< Flag: usage of parametric coding tool. */ + INT downSampleFactor; /*!< Sampling rate relation between the SBR and the core encoder. */ int freq_res_fixfix[3]; /*!< Frequency resolution of envelopes in frame class FIXFIX 0=1 Env; 1=2 Env; 2=4 Env; */ /* @@ -194,7 +204,6 @@ typedef struct sbrConfiguration INT useSaPan; /*!< Flag: usage of SAPAN stereo. */ INT dynBwEnabled; /*!< Flag: usage of dynamic bandwidth. */ INT bParametricStereo; /*!< Flag: usage of parametric stereo coding tool. */ - INT bDownSampledSbr; /*!< Signal downsampled SBR is used. */ /* header_extra1 configuration @@ -214,7 +223,7 @@ typedef struct sbrConfiguration UCHAR init_amp_res_FF; } sbrConfiguration, *sbrConfigurationPtr ; -typedef struct +typedef struct SBR_CONFIG_DATA { UINT sbrSyntaxFlags; /**< SBR syntax flags derived from AOT. */ INT nChannels; /**< Number of channels. */ @@ -240,9 +249,7 @@ typedef struct INT xposCtrlSwitch; /**< Flag indicates whether to switch xpos ctrl on the fly. */ INT switchTransposers; /**< Flag indicates whether to switch xpos on the fly . */ UCHAR initAmpResFF; -} SBR_CONFIG_DATA; - -typedef SBR_CONFIG_DATA *HANDLE_SBR_CONFIG_DATA; +} SBR_CONFIG_DATA, *HANDLE_SBR_CONFIG_DATA; typedef struct { MP4_ELEMENT_ID elType; @@ -275,15 +282,26 @@ INT sbrEncoder_Open( ); /** - * \brief get closest working bit rate to specified desired bit rate for a single SBR element - * \param bitRate the desired target bit rate - * \param numChannels the amount of audio channels - * \param coreSampleRate the sample rate of the core coder - * \param the current Audio Object Type - * \return closest working bit rate to bitRate value + * \brief Get closest working bitrate to specified desired + * bitrate for a single SBR element. + * \param bitRate The desired target bit rate + * \param numChannels The amount of audio channels + * \param coreSampleRate The sample rate of the core coder + * \param aot The current Audio Object Type + * \return Closest working bit rate to bitRate value */ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate, AUDIO_OBJECT_TYPE aot); + +/** + * \brief Check whether downsampled SBR single rate is possible + * with given audio object type. + * \param aot The Audio object type. + * \return 0 when downsampled SBR is not possible, + * 1 when downsampled SBR is possible. + */ +UINT sbrEncoder_IsSingleRatePossible(AUDIO_OBJECT_TYPE aot); + /** * \brief Initialize SBR Encoder instance. * \param phSbrEncoder Pointer to a SBR Encoder instance. @@ -294,26 +312,33 @@ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate * \param bufferOffset Returns the offset for the audio input data in order to do delay balancing. * \param numChannels Input: Encoder input channels. output: core encoder channels. * \param sampleRate Input: Encoder samplerate. output core encoder samplerate. + * \param downSampleFactor Input: Relation between SBR and core coder sampling rate; * \param frameLength Input: Encoder frameLength. output core encoder frameLength. * \param aot Input: Desired AOT. output AOT to be used after parameter checking. * \param delay Input: core encoder delay. Output: total delay because of SBR. * \param transformFactor The core encoder transform factor (blockswitching). + * \param headerPeriod Repetition rate of the SBR header: + * - (-1) means intern configuration. + * - (1-10) corresponds to header repetition rate in frames. * \return 0 on success, and non-zero if failed. */ -INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder, - SBR_ELEMENT_INFO elInfo[(6)], - int noElements, - INT_PCM *inputBuffer, - INT *bandwidth, - INT *bufferOffset, - INT *numChannels, - INT *sampleRate, - INT *frameLength, - AUDIO_OBJECT_TYPE *aot, - int *delay, - int transformFactor, - ULONG statesInitFlag - ); +INT sbrEncoder_Init( + HANDLE_SBR_ENCODER hSbrEncoder, + SBR_ELEMENT_INFO elInfo[(8)], + int noElements, + INT_PCM *inputBuffer, + INT *coreBandwidth, + INT *inputBufferOffset, + INT *numChannels, + INT *sampleRate, + UINT *downSampleFactor, + INT *frameLength, + AUDIO_OBJECT_TYPE aot, + int *delay, + int transformFactor, + const int headerPeriod, + ULONG statesInitFlag + ); /** * \brief Do delay line buffers housekeeping. To be called after each encoded audio frame. @@ -344,8 +369,8 @@ void sbrEncoder_Close(HANDLE_SBR_ENCODER *phEbrEncoder); INT sbrEncoder_EncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, INT_PCM *samples, UINT timeInStride, - UINT sbrDataBits[(6)], - UCHAR sbrData[(6)][MAX_PAYLOAD_SIZE] + UINT sbrDataBits[(8)], + UCHAR sbrData[(8)][MAX_PAYLOAD_SIZE] ); /** @@ -356,7 +381,7 @@ INT sbrEncoder_EncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, * \param fSendHeaders Flag indicating that the SBR encoder should send more headers in the SBR payload or not. * \return void */ -void sbrEncoder_GetHeader(SBR_ENCODER *sbrEncoder, +void sbrEncoder_GetHeader(HANDLE_SBR_ENCODER sbrEncoder, HANDLE_FDK_BITSTREAM hBs, INT element_index, int fSendHeaders); diff --git a/libSBRenc/src/bit_sbr.cpp b/libSBRenc/src/bit_sbr.cpp index 734a8aa..963aeff 100644 --- a/libSBRenc/src/bit_sbr.cpp +++ b/libSBRenc/src/bit_sbr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/bit_sbr.h b/libSBRenc/src/bit_sbr.h index bf170c1..1ce2c1e 100644 --- a/libSBRenc/src/bit_sbr.h +++ b/libSBRenc/src/bit_sbr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -124,11 +124,6 @@ struct SBR_HEADER_DATA INT alterScale; INT freqScale; - /* - element of sbrdata - */ - SR_MODE sampleRateMode; - /* element of channelpairelement */ diff --git a/libSBRenc/src/cmondata.h b/libSBRenc/src/cmondata.h index c3be1d7..32e6993 100644 --- a/libSBRenc/src/cmondata.h +++ b/libSBRenc/src/cmondata.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/code_env.cpp b/libSBRenc/src/code_env.cpp index 7c169e6..e1a28d5 100644 --- a/libSBRenc/src/code_env.cpp +++ b/libSBRenc/src/code_env.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/code_env.h b/libSBRenc/src/code_env.h index dd2b9ae..50a365e 100644 --- a/libSBRenc/src/code_env.h +++ b/libSBRenc/src/code_env.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/env_bit.cpp b/libSBRenc/src/env_bit.cpp index 55c6967..ea31183 100644 --- a/libSBRenc/src/env_bit.cpp +++ b/libSBRenc/src/env_bit.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/env_bit.h b/libSBRenc/src/env_bit.h index 38578f8..038a32a 100644 --- a/libSBRenc/src/env_bit.h +++ b/libSBRenc/src/env_bit.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/env_est.cpp b/libSBRenc/src/env_est.cpp index a9a7881..929f229 100644 --- a/libSBRenc/src/env_est.cpp +++ b/libSBRenc/src/env_est.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -129,9 +129,6 @@ FDKsbrEnc_getEnergyFromCplxQmfData(FIXP_DBL **RESTRICT energyValues,/*!< the res /* Get Scratch buffer */ C_ALLOC_SCRATCH_START(tmpNrg, FIXP_DBL, QMF_CHANNELS*QMF_MAX_TIME_SLOTS/2); - FDK_ASSERT(numberBands <= QMF_CHANNELS); - FDK_ASSERT(numberCols <= QMF_MAX_TIME_SLOTS); - /* Get max possible scaling of QMF data */ scale = DFRACT_BITS; for (k=0; k>oneBitLess)); nrgLeft = (FIXP_DBL)(LONG)nrgLeft >> (DFRACT_BITS-1-LD_DATA_SHIFT-1-oneBitLess-1); sfb_nrgLeft[m] = ((INT)nrgLeft+1)>>1; /* rounding */ if (stereoMode == SBR_COUPLING) { FIXP_DBL scaleFract; + int sc0, sc1; - if (nrgRight != FL2FXCONST_DBL(0.0f)) { - int sc0 = CountLeadingBits(nrgLeft2); - int sc1 = CountLeadingBits(nrgRight); + nrgLeft2 = fixMax((FIXP_DBL)0x1, nrgLeft2); + nrgRight = fixMax((FIXP_DBL)0x1, nrgRight); - scaleFract = ((FIXP_DBL)(sc0-sc1)) << (DFRACT_BITS-1-LD_DATA_SHIFT); /* scale value in ld64 representation */ - nrgRight = CalcLdData(nrgLeft2<> (DFRACT_BITS-1-LD_DATA_SHIFT-1-oneBitLess); diff --git a/libSBRenc/src/env_est.h b/libSBRenc/src/env_est.h index 4c30a50..5e632a4 100644 --- a/libSBRenc/src/env_est.h +++ b/libSBRenc/src/env_est.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/fram_gen.cpp b/libSBRenc/src/fram_gen.cpp index afef6e4..86c3c81 100644 --- a/libSBRenc/src/fram_gen.cpp +++ b/libSBRenc/src/fram_gen.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/fram_gen.h b/libSBRenc/src/fram_gen.h index fe4b262..3769266 100644 --- a/libSBRenc/src/fram_gen.h +++ b/libSBRenc/src/fram_gen.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/invf_est.cpp b/libSBRenc/src/invf_est.cpp index 788ab7c..32df6d9 100644 --- a/libSBRenc/src/invf_est.cpp +++ b/libSBRenc/src/invf_est.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/invf_est.h b/libSBRenc/src/invf_est.h index 7c66cf6..2bd2a78 100644 --- a/libSBRenc/src/invf_est.h +++ b/libSBRenc/src/invf_est.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/mh_det.cpp b/libSBRenc/src/mh_det.cpp index a7fa208..73d1b8b 100644 --- a/libSBRenc/src/mh_det.cpp +++ b/libSBRenc/src/mh_det.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1244,25 +1244,38 @@ FDKsbrEnc_InitSbrMissingHarmonicsDetector ( FDK_ASSERT(totNoEst <= MAX_NO_OF_ESTIMATES); - switch(frameSize){ - case 2048: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_2048; - hs->timeSlots = NUMBER_TIME_SLOTS_2048; - break; - case 1920: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_1920; - hs->timeSlots = NUMBER_TIME_SLOTS_1920; - break; - case 1024: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; - hs->timeSlots = 16; - break; - case 960: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; - hs->timeSlots = 15; - break; - default: - return -1; + if (sbrSyntaxFlags & SBR_SYNTAX_LOW_DELAY) + { + switch(frameSize){ + case 1024: + case 512: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; + hs->timeSlots = 16; + break; + case 960: + case 480: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; + hs->timeSlots = 15; + break; + default: + return -1; + } + } else + { + switch(frameSize){ + case 2048: + case 1024: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_2048; + hs->timeSlots = NUMBER_TIME_SLOTS_2048; + break; + case 1920: + case 960: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_1920; + hs->timeSlots = NUMBER_TIME_SLOTS_1920; + break; + default: + return -1; + } } if (sbrSyntaxFlags & SBR_SYNTAX_LOW_DELAY) { diff --git a/libSBRenc/src/mh_det.h b/libSBRenc/src/mh_det.h index ac62532..74c2a99 100644 --- a/libSBRenc/src/mh_det.h +++ b/libSBRenc/src/mh_det.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/nf_est.cpp b/libSBRenc/src/nf_est.cpp index 62bcc79..7a3c022 100644 --- a/libSBRenc/src/nf_est.cpp +++ b/libSBRenc/src/nf_est.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -102,7 +102,7 @@ static const FIXP_DBL QuantOffset = (INT)0xfc000000; /* ld64(0.25) */ #define max(a,b) ( a > b ? a:b) #endif -#define NOISE_FLOOR_OFFSET_SCALING (3) +#define NOISE_FLOOR_OFFSET_SCALING (4) @@ -484,11 +484,13 @@ FDKsbrEnc_InitSbrNoiseFloorEstimate (HANDLE_SBR_NOISE_FLOOR_ESTIMATE h_sbrNoise tmp = ((FIXP_DBL)MAXVAL_DBL)>>NOISE_FLOOR_OFFSET_SCALING; } else { - FDK_ASSERT(noiseFloorOffset<=8); /* because of NOISE_FLOOR_OFFSET_SCALING */ + /* noiseFloorOffset has to be smaller than 12, because + the result of the calculation below must be smaller than 1: + (2^(noiseFloorOffset/3))*2^4<1 */ + FDK_ASSERT(noiseFloorOffset<12); - /* Assumes the noise floor offset in tuning table are in q31 */ - /* Currently the table contains only 0 for noise floor offset */ - /* Change the qformat here when non-zero values would be filled */ + /* Assumes the noise floor offset in tuning table are in q31 */ + /* Change the qformat here when non-zero values would be filled */ exp = fDivNorm((FIXP_DBL)noiseFloorOffset, 3, &qexp); tmp = fPow(2, DFRACT_BITS-1, exp, qexp, &qtmp); tmp = scaleValue(tmp, qtmp-NOISE_FLOOR_OFFSET_SCALING); @@ -527,24 +529,30 @@ FDKsbrEnc_resetSbrNoiseFloorEstimate (HANDLE_SBR_NOISE_FLOOR_ESTIMATE h_sbrNoise h_sbrNoiseFloorEstimate->noNoiseBands = 1; } else{ - /* - * Calculate number of noise bands 1,2 or 3 bands/octave + /* + * Calculate number of noise bands 1,2 or 3 bands/octave ********************************************************/ FIXP_DBL tmp, ratio, lg2; - INT ratio_e, qlg2; + INT ratio_e, qlg2, nNoiseBands; ratio = fDivNorm(k2, kx, &ratio_e); lg2 = fLog2(ratio, ratio_e, &qlg2); tmp = fMult((FIXP_DBL)(h_sbrNoiseFloorEstimate->noiseBands<<24), lg2); tmp = scaleValue(tmp, qlg2-23); - h_sbrNoiseFloorEstimate->noNoiseBands = (INT)((tmp + (FIXP_DBL)1) >> 1); + nNoiseBands = (INT)((tmp + (FIXP_DBL)1) >> 1); - if (h_sbrNoiseFloorEstimate->noNoiseBands > MAX_NUM_NOISE_COEFFS) - h_sbrNoiseFloorEstimate->noNoiseBands = MAX_NUM_NOISE_COEFFS; - if( h_sbrNoiseFloorEstimate->noNoiseBands==0) - h_sbrNoiseFloorEstimate->noNoiseBands=1; + if (nNoiseBands > MAX_NUM_NOISE_COEFFS ) { + nNoiseBands = MAX_NUM_NOISE_COEFFS; + } + + if( nNoiseBands == 0 ) { + nNoiseBands = 1; + } + + h_sbrNoiseFloorEstimate->noNoiseBands = nNoiseBands; + } diff --git a/libSBRenc/src/nf_est.h b/libSBRenc/src/nf_est.h index 084899a..d407274 100644 --- a/libSBRenc/src/nf_est.h +++ b/libSBRenc/src/nf_est.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_bitenc.cpp b/libSBRenc/src/ps_bitenc.cpp index 419d989..b1fe12e 100644 --- a/libSBRenc/src/ps_bitenc.cpp +++ b/libSBRenc/src/ps_bitenc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_bitenc.h b/libSBRenc/src/ps_bitenc.h index cfc5af7..e98fe58 100644 --- a/libSBRenc/src/ps_bitenc.h +++ b/libSBRenc/src/ps_bitenc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_const.h b/libSBRenc/src/ps_const.h index 08101e2..633d210 100644 --- a/libSBRenc/src/ps_const.h +++ b/libSBRenc/src/ps_const.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_encode.cpp b/libSBRenc/src/ps_encode.cpp index e60f83d..2ae2788 100644 --- a/libSBRenc/src/ps_encode.cpp +++ b/libSBRenc/src/ps_encode.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_encode.h b/libSBRenc/src/ps_encode.h index a12f7c6..f728d47 100644 --- a/libSBRenc/src/ps_encode.h +++ b/libSBRenc/src/ps_encode.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_main.cpp b/libSBRenc/src/ps_main.cpp index bbab25a..ab183e2 100644 --- a/libSBRenc/src/ps_main.cpp +++ b/libSBRenc/src/ps_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -227,6 +227,8 @@ FDK_PSENC_ERROR PSEnc_Init( /* clear bs buffer */ FDKmemclear(hParametricStereo->psOut, sizeof(hParametricStereo->psOut)); + hParametricStereo->psOut[0].enablePSHeader = 1; /* write ps header in first frame */ + /* clear scaling buffer */ FDKmemclear(hParametricStereo->dynBandScale, sizeof(UCHAR)*PS_MAX_BANDS); FDKmemclear(hParametricStereo->maxBandValue, sizeof(FIXP_QMF)*PS_MAX_BANDS); @@ -313,7 +315,7 @@ static FDK_PSENC_ERROR DownmixPSQmfData( } else { int n, k; - C_ALLOC_SCRATCH_START(pWorkBuffer, FIXP_QMF, QMF_CHANNELS*2); + C_AALLOC_SCRATCH_START(pWorkBuffer, FIXP_QMF, 2*QMF_CHANNELS) /* define scalings */ int dynQmfScale = fixMax(0, hParametricStereo->dmxScale-1); /* scale one bit more for addition of left and right */ @@ -398,8 +400,7 @@ static FDK_PSENC_ERROR DownmixPSQmfData( *qmfScale = -downmixScale + 7; - C_ALLOC_SCRATCH_END(pWorkBuffer, FIXP_QMF, QMF_CHANNELS*2); - + C_AALLOC_SCRATCH_END(pWorkBuffer, FIXP_QMF, 2*QMF_CHANNELS) { const INT noQmfSlots2 = hParametricStereo->noQmfSlots>>1; @@ -473,10 +474,9 @@ FDK_PSENC_ERROR FDKsbrEnc_PSEnc_ParametricStereoProcessing( ) { FDK_PSENC_ERROR error = PSENC_OK; - INT noQmfBands = hParametricStereo->noQmfBands; INT psQmfScale[MAX_PS_CHANNELS] = {0}; int psCh, i; - C_ALLOC_SCRATCH_START(pWorkBuffer, FIXP_DBL, QMF_CHANNELS*4); + C_AALLOC_SCRATCH_START(pWorkBuffer, FIXP_QMF, 4*QMF_CHANNELS) for (psCh = 0; psCh= sbrTuningTable [i].bitrateFrom) && - (bitrate < sbrTuningTable [i].bitrateTo)) { - bitRateClosestLower = bitrate; - bitRateClosestUpper = bitrate; - //FDKprintf("entry %d\n", i); - return i ; - } else { - if ( sbrTuningTable [i].bitrateFrom > bitrate ) { - if (sbrTuningTable [i].bitrateFrom < bitRateClosestLower) { - bitRateClosestLower = sbrTuningTable [i].bitrateFrom; - bitRateClosestLowerIndex = i; + if ( numChannels == sbrTuningTable [i].numChannels + && sampleRate == sbrTuningTable [i].sampleRate ) + { + found = 1; + if ((bitrate >= sbrTuningTable [i].bitrateFrom) && + (bitrate < sbrTuningTable [i].bitrateTo)) { + bitRateClosestLower = bitrate; + bitRateClosestUpper = bitrate; + //FDKprintf("entry %d\n", i); + return i ; + } else { + if ( sbrTuningTable [i].bitrateFrom > bitrate ) { + if (sbrTuningTable [i].bitrateFrom < bitRateClosestLower) { + bitRateClosestLower = sbrTuningTable [i].bitrateFrom; + bitRateClosestLowerIndex = i; + } } - } - if ( sbrTuningTable [i].bitrateTo <= bitrate ) { - if (sbrTuningTable [i].bitrateTo > bitRateClosestUpper) { - bitRateClosestUpper = sbrTuningTable [i].bitrateTo-1; - bitRateClosestUpperIndex = i; + if ( sbrTuningTable [i].bitrateTo <= bitrate ) { + if (sbrTuningTable [i].bitrateTo > bitRateClosestUpper) { + bitRateClosestUpper = sbrTuningTable [i].bitrateTo-1; + bitRateClosestUpperIndex = i; + } } } } @@ -215,7 +209,7 @@ getSbrTuningTableIndex(UINT bitrate, /*! the total bitrate in bits/sec */ if (pBitRateClosest != NULL) { - /* Is there was at least one matching tuning entry found then pick the least distance bit rate */ + /* If there was at least one matching tuning entry found then pick the least distance bit rate */ if (found) { int distanceUpper=DISTANCE_CEIL_VALUE, distanceLower=DISTANCE_CEIL_VALUE; @@ -295,6 +289,52 @@ getPsTuningTableIndex(UINT bitrate, UINT *pBitRateClosest){ return INVALID_TABLE_IDX; } +/***************************************************************************/ +/*! + + \brief In case of downsampled SBR we may need to lower the stop freq + of a tuning setting to fit into the lower half of the + spectrum ( which is sampleRate/4 ) + + \return the adapted stop frequency index (-1 -> error) + + \ingroup SbrEncCfg + +****************************************************************************/ +static INT +FDKsbrEnc_GetDownsampledStopFreq ( + const INT sampleRateCore, + const INT startFreq, + INT stopFreq, + const INT downSampleFactor + ) +{ + INT maxStopFreqRaw = sampleRateCore / 2; + INT startBand, stopBand; + HANDLE_ERROR_INFO err; + + while (stopFreq > 0 && FDKsbrEnc_getSbrStopFreqRAW(stopFreq, sampleRateCore) > maxStopFreqRaw) { + stopFreq--; + } + + if (FDKsbrEnc_getSbrStopFreqRAW( stopFreq, sampleRateCore) > maxStopFreqRaw) + return -1; + + err = FDKsbrEnc_FindStartAndStopBand ( + sampleRateCore<<(downSampleFactor-1), + sampleRateCore, + 32<<(downSampleFactor-1), + startFreq, + stopFreq, + &startBand, + &stopBand + ); + if (err) + return -1; + + return stopFreq; +} + /***************************************************************************/ /*! @@ -307,15 +347,16 @@ getPsTuningTableIndex(UINT bitrate, UINT *pBitRateClosest){ ****************************************************************************/ static UINT -FDKsbrEnc_IsSbrSettingAvail (UINT bitrate, /*! the total bitrate in bits/sec */ - UINT vbrMode, /*! the vbr paramter, 0 means constant bitrate */ - UINT numOutputChannels,/*! the number of channels for the core coder */ - UINT sampleRateInput, /*! the input sample rate [in Hz] */ - AUDIO_OBJECT_TYPE core - ) +FDKsbrEnc_IsSbrSettingAvail ( + UINT bitrate, /*! the total bitrate in bits/sec */ + UINT vbrMode, /*! the vbr paramter, 0 means constant bitrate */ + UINT numOutputChannels, /*! the number of channels for the core coder */ + UINT sampleRateInput, /*! the input sample rate [in Hz] */ + UINT sampleRateCore, /*! the core's sampling rate */ + AUDIO_OBJECT_TYPE core + ) { INT idx = INVALID_TABLE_IDX; - UINT sampleRateCore; if (sampleRateInput < 16000) return 0; @@ -335,8 +376,6 @@ FDKsbrEnc_IsSbrSettingAvail (UINT bitrate, /*! the total bitrate in bit bitrate *= numOutputChannels; } - /* try DOWN_SMPL_FAC of the input sampling rate */ - sampleRateCore = sampleRateInput/DOWN_SMPL_FAC; idx = getSbrTuningTableIndex(bitrate, numOutputChannels, sampleRateCore, core, NULL); return (idx == INVALID_TABLE_IDX ? 0 : 1); @@ -356,7 +395,8 @@ static UINT FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modified */ UINT bitRate, /*! the total bitrate in bits/sec */ UINT numChannels, /*! the core coder number of channels */ - UINT fsCore, /*! the core coder sampling rate in Hz */ + UINT sampleRateCore, /*! the core coder sampling rate in Hz */ + UINT sampleRateSbr, /*! the sbr coder sampling rate in Hz */ UINT transFac, /*! the short block to long block ratio */ UINT standardBitrate, /*! the standard bitrate per channel in bits/sec */ UINT vbrMode, /*! the vbr paramter, 0 poor quality .. 100 high quality*/ @@ -366,15 +406,12 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif AUDIO_OBJECT_TYPE core) /* Core audio codec object type */ { INT idx = INVALID_TABLE_IDX; - UINT sampleRate; - - /* set the codec settings */ + /* set the core codec settings */ config->codecSettings.bitRate = bitRate; config->codecSettings.nChannels = numChannels; - config->codecSettings.sampleFreq = fsCore; + config->codecSettings.sampleFreq = sampleRateCore; config->codecSettings.transFac = transFac; config->codecSettings.standardBitrate = standardBitrate; - sampleRate = fsCore * DOWN_SMPL_FAC; if (bitRate==0) { /* map vbr quality to bitrate */ @@ -391,13 +428,13 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif bitRate *= numChannels; /* fix to enable mono vbrMode<40 @ 44.1 of 48kHz */ if (numChannels==1) { - if (sampleRate==44100 || sampleRate==48000) { + if (sampleRateSbr==44100 || sampleRateSbr==48000) { if (vbrMode<40) bitRate = 32000; } } } - idx = getSbrTuningTableIndex(bitRate,numChannels,fsCore, core, NULL); + idx = getSbrTuningTableIndex(bitRate,numChannels,sampleRateCore, core, NULL); if (idx != INVALID_TABLE_IDX) { config->startFreq = sbrTuningTable[idx].startFreq ; @@ -407,6 +444,21 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif config->stopFreq = sbrTuningTable[idx].stopFreqSpeech; } + /* Adapt stop frequency in case of downsampled SBR - only 32 bands then */ + if (1 == config->downSampleFactor) { + INT dsStopFreq = FDKsbrEnc_GetDownsampledStopFreq( + sampleRateCore, + config->startFreq, + config->stopFreq, + config->downSampleFactor + ); + if (dsStopFreq < 0) { + return 0; + } + + config->stopFreq = dsStopFreq; + } + config->sbr_noise_bands = sbrTuningTable[idx].numNoiseBands ; if (core == AOT_ER_AAC_ELD) config->init_amp_res_FF = SBR_AMP_RES_1_5; @@ -455,19 +507,20 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif description: initializes the SBR confifuration returns: error status input: - core codec type, - - fac of SBR to core frame length, + - factor of SBR to core frame length, - core frame length output: initialized SBR configuration *****************************************************************************/ static UINT FDKsbrEnc_InitializeSbrDefaults (sbrConfigurationPtr config, - INT coreSbrFrameLenFac, - UINT codecGranuleLen) + INT downSampleFactor, + UINT codecGranuleLen + ) { - if ( (coreSbrFrameLenFac != 2) || - (codecGranuleLen*coreSbrFrameLenFac > QMF_CHANNELS*QMF_MAX_TIME_SLOTS) ) - return(1); + if ( (downSampleFactor < 1 || downSampleFactor > 2) || + (codecGranuleLen*downSampleFactor > QMF_CHANNELS*QMF_MAX_TIME_SLOTS) ) + return(0); /* error */ config->SendHeaderDataTime = 1000; config->useWaveCoding = 0; @@ -476,8 +529,8 @@ FDKsbrEnc_InitializeSbrDefaults (sbrConfigurationPtr config, config->tran_thr = 13000; config->parametricCoding = 1; - config->sbrFrameSize = codecGranuleLen * coreSbrFrameLenFac; - + config->sbrFrameSize = codecGranuleLen * downSampleFactor; + config->downSampleFactor = downSampleFactor; /* sbr default parameters */ config->sbr_data_extra = 0; @@ -497,7 +550,6 @@ FDKsbrEnc_InitializeSbrDefaults (sbrConfigurationPtr config, config->sbr_xpos_level = 0; config->useSaPan = 0; config->dynBwEnabled = 0; - config->bDownSampledSbr = 0; /* the following parameters are overwritten by the FDKsbrEnc_AdjustSbrSettings() function since @@ -601,7 +653,7 @@ void sbrEncoder_Close (HANDLE_SBR_ENCODER *phSbrEncoder) { int el, ch; - for (el=0; el<(6); el++) + for (el=0; el<(8); el++) { if (hSbrEncoder->sbrElement[el]!=NULL) { sbrEncoder_ElementClose(&hSbrEncoder->sbrElement[el]); @@ -609,7 +661,7 @@ void sbrEncoder_Close (HANDLE_SBR_ENCODER *phSbrEncoder) } /* Close sbr Channels */ - for (ch=0; ch<(6); ch++) + for (ch=0; ch<(8); ch++) { if (hSbrEncoder->pSbrChannel[ch]) { sbrEncoder_ChannelClose(hSbrEncoder->pSbrChannel[ch]); @@ -645,46 +697,62 @@ void sbrEncoder_Close (HANDLE_SBR_ENCODER *phSbrEncoder) output: error info *****************************************************************************/ -static INT updateFreqBandTable(HANDLE_SBR_CONFIG_DATA sbrConfigData, - HANDLE_SBR_HEADER_DATA sbrHeaderData, - INT noQmfChannels) +static INT updateFreqBandTable( + HANDLE_SBR_CONFIG_DATA sbrConfigData, + HANDLE_SBR_HEADER_DATA sbrHeaderData, + const INT downSampleFactor + ) { INT k0, k2; - if(FDKsbrEnc_FindStartAndStopBand(sbrConfigData->sampleFreq, - noQmfChannels, - sbrHeaderData->sbr_start_frequency, - sbrHeaderData->sbr_stop_frequency, - sbrHeaderData->sampleRateMode, - &k0, &k2)) + if( FDKsbrEnc_FindStartAndStopBand ( + sbrConfigData->sampleFreq, + sbrConfigData->sampleFreq >> (downSampleFactor-1), + sbrConfigData->noQmfBands, + sbrHeaderData->sbr_start_frequency, + sbrHeaderData->sbr_stop_frequency, + &k0, + &k2 + ) + ) return(1); - if(FDKsbrEnc_UpdateFreqScale(sbrConfigData->v_k_master, &sbrConfigData->num_Master, - k0, k2, sbrHeaderData->freqScale, - sbrHeaderData->alterScale)) + if( FDKsbrEnc_UpdateFreqScale( + sbrConfigData->v_k_master, + &sbrConfigData->num_Master, + k0, + k2, + sbrHeaderData->freqScale, + sbrHeaderData->alterScale + ) + ) return(1); sbrHeaderData->sbr_xover_band=0; - if(FDKsbrEnc_UpdateHiRes(sbrConfigData->freqBandTable[HI], - &sbrConfigData->nSfb[HI], - sbrConfigData->v_k_master, - sbrConfigData->num_Master , - &sbrHeaderData->sbr_xover_band, - sbrHeaderData->sampleRateMode, - noQmfChannels)) + if( FDKsbrEnc_UpdateHiRes( + sbrConfigData->freqBandTable[HI], + &sbrConfigData->nSfb[HI], + sbrConfigData->v_k_master, + sbrConfigData->num_Master, + &sbrHeaderData->sbr_xover_band + ) + ) return(1); - FDKsbrEnc_UpdateLoRes(sbrConfigData->freqBandTable[LO], - &sbrConfigData->nSfb[LO], - sbrConfigData->freqBandTable[HI], - sbrConfigData->nSfb[HI]); + FDKsbrEnc_UpdateLoRes( + sbrConfigData->freqBandTable[LO], + &sbrConfigData->nSfb[LO], + sbrConfigData->freqBandTable[HI], + sbrConfigData->nSfb[HI] + ); - sbrConfigData->xOverFreq = (sbrConfigData->freqBandTable[LOW_RES][0] * sbrConfigData->sampleFreq / noQmfChannels+1)>>1; + + sbrConfigData->xOverFreq = (sbrConfigData->freqBandTable[LOW_RES][0] * sbrConfigData->sampleFreq / sbrConfigData->noQmfBands+1)>>1; return (0); } @@ -866,7 +934,8 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, */ if(updateFreqBandTable(&hSbrElement->sbrConfigData, &hSbrElement->sbrHeaderData, - hSbrElement->sbrConfigData.noQmfBands)) + hEnvEncoder->downSampleFactor + )) return(1); @@ -891,8 +960,6 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, &crcInfo, hSbrElement->sbrConfigData.sbrSyntaxFlags); - INT error = noError; - /* Temporal Envelope Data */ SBR_FRAME_TEMP_DATA _fData; SBR_FRAME_TEMP_DATA *fData = &_fData; @@ -923,9 +990,9 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, if(hSbrElement->elInfo.fParametricStereo == 0) { - C_ALLOC_SCRATCH_START(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2); QMF_SCALE_FACTOR tmpScale; FIXP_DBL **pQmfReal, **pQmfImag; + C_AALLOC_SCRATCH_START(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2) /* Obtain pointers to QMF buffers. */ @@ -940,10 +1007,11 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, timeInStride, qmfWorkBuffer ); - C_ALLOC_SCRATCH_END(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2); - h_envChan->qmfScale = tmpScale.lb_scale + 7; + + C_AALLOC_SCRATCH_END(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2) + } /* fParametricStereo == 0 */ @@ -952,6 +1020,8 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, */ if (hSbrElement->elInfo.fParametricStereo) { + INT error = noError; + /* Limit Parametric Stereo to one instance */ FDK_ASSERT(ch == 0); @@ -1177,10 +1247,12 @@ initEnvChannel ( HANDLE_SBR_CONFIG_DATA sbrConfigData, break; case 2048: case 1024: + case 512: timeSlots = 16; break; case 1920: case 960: + case 480: timeSlots = 15; break; case 1152: @@ -1221,9 +1293,9 @@ initEnvChannel ( HANDLE_SBR_CONFIG_DATA sbrConfigData, tran_fc = params->tran_fc; - if (tran_fc == 0) - tran_fc = fixMin (5000, FDKsbrEnc_getSbrStartFreqRAW (sbrHeaderData->sbr_start_frequency,64,sbrConfigData->sampleFreq)); - + if (tran_fc == 0) { + tran_fc = fixMin (5000, FDKsbrEnc_getSbrStartFreqRAW (sbrHeaderData->sbr_start_frequency,params->codecSettings.sampleFreq)); + } tran_fc = (tran_fc*4*sbrConfigData->noQmfBands/sbrConfigData->sampleFreq + 1)>>1; @@ -1233,11 +1305,11 @@ initEnvChannel ( HANDLE_SBR_CONFIG_DATA sbrConfigData, } else { frameShift = 0; - switch (params->sbrFrameSize) { + switch (timeSlots) { /* The factor of 2 is by definition. */ - case 2048: tran_off = 8 + FRAME_MIDDLE_SLOT_2048 * timeStep; break; - case 1920: tran_off = 7 + FRAME_MIDDLE_SLOT_1920 * timeStep; break; - default: return 1; break; + case NUMBER_TIME_SLOTS_2048: tran_off = 8 + FRAME_MIDDLE_SLOT_2048 * timeStep; break; + case NUMBER_TIME_SLOTS_1920: tran_off = 7 + FRAME_MIDDLE_SLOT_1920 * timeStep; break; + default: return 1; } } if ( FDKsbrEnc_InitExtractSbrEnvelope (&hEnv->sbrExtractEnvelope, @@ -1330,7 +1402,6 @@ INT sbrEncoder_Open( hSbrEncoder->pSBRdynamic_RAM = (UCHAR*)GetRam_SbrDynamic_RAM(); hSbrEncoder->dynamicRam = hSbrEncoder->pSBRdynamic_RAM; - for (i=0; isbrElement[i] = GetRam_SbrElement(i); if (hSbrEncoder->sbrElement[i]==NULL) { @@ -1397,7 +1468,7 @@ bail: static INT FDKsbrEnc_Reallocate( HANDLE_SBR_ENCODER hSbrEncoder, - SBR_ELEMENT_INFO elInfo[(6)], + SBR_ELEMENT_INFO elInfo[(8)], const INT noElements) { INT totalCh = 0; @@ -1462,7 +1533,9 @@ INT FDKsbrEnc_EnvInit ( AUDIO_OBJECT_TYPE aot, int nBitstrDelay, int nElement, - ULONG statesInitFlag + const int headerPeriod, + ULONG statesInitFlag, + int fTimeDomainDownsampling ,UCHAR *dynamic_RAM ) { @@ -1496,8 +1569,16 @@ INT FDKsbrEnc_EnvInit ( hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_CRC; } - hSbrElement->sbrConfigData.noQmfBands = QMF_CHANNELS; - hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize/hSbrElement->sbrConfigData.noQmfBands; + hSbrElement->sbrConfigData.noQmfBands = QMF_CHANNELS>>(2-params->downSampleFactor); + switch (hSbrElement->sbrConfigData.noQmfBands) + { + case 64: hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize>>6; + break; + case 32: hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize>>5; + break; + default: hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize>>6; + return(2); + } FDKinitBitStream(&hSbrElement->CmonData.sbrBitbuf, bitstreamBuffer, MAX_PAYLOAD_SIZE*sizeof(UCHAR), 0, BS_WRITER); @@ -1513,17 +1594,21 @@ INT FDKsbrEnc_EnvInit ( hSbrElement->sbrConfigData.frameSize = params->sbrFrameSize; - /* implicit rule for sampleRateMode */ - /* run in "multirate" mode where sbr fs is 2 * codec fs */ - hSbrElement->sbrHeaderData.sampleRateMode = DUAL_RATE; - hSbrElement->sbrConfigData.sampleFreq = 2 * params->codecSettings.sampleFreq; + hSbrElement->sbrConfigData.sampleFreq = params->downSampleFactor * params->codecSettings.sampleFreq; hSbrElement->sbrBitstreamData.CountSendHeaderData = 0; if (params->SendHeaderDataTime > 0 ) { - hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq + if (headerPeriod==-1) { + + hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq / (1000 * hSbrElement->sbrConfigData.frameSize)); - hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMax(hSbrElement->sbrBitstreamData.NrSendHeaderData,1); + hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMax(hSbrElement->sbrBitstreamData.NrSendHeaderData,1); + } + else { + /* assure header period at least once per second */ + hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMin(fixMax(headerPeriod,1),(hSbrElement->sbrConfigData.sampleFreq/hSbrElement->sbrConfigData.frameSize)); + } } else { hSbrElement->sbrBitstreamData.NrSendHeaderData = 0; @@ -1584,7 +1669,8 @@ INT FDKsbrEnc_EnvInit ( /* init freq band table */ if(updateFreqBandTable(&hSbrElement->sbrConfigData, &hSbrElement->sbrHeaderData, - hSbrElement->sbrConfigData.noQmfBands)) + params->downSampleFactor + )) { return(1); } @@ -1624,6 +1710,9 @@ INT FDKsbrEnc_EnvInit ( hSbrElement->sbrConfigData.noQmfBands, hSbrElement->sbrConfigData.noQmfBands, qmfFlags ); + if (0!=err) { + return err; + } } /* */ @@ -1645,7 +1734,7 @@ INT sbrEncoder_GetInBufferSize(int noChannels) { INT temp; - temp = (1024*DOWN_SMPL_FAC); + temp = (2048); temp += 1024 + MAX_SAMPLE_DELAY; temp *= noChannels; temp *= sizeof(INT_PCM); @@ -1677,8 +1766,8 @@ INT FDKsbrEnc_DelayCompensation ( 1 )) return -1; - sbrEncoder_UpdateBuffers(hEnvEnc, timeBuffer); } + sbrEncoder_UpdateBuffers(hEnvEnc, timeBuffer); } return 0; } @@ -1709,29 +1798,36 @@ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate return newBitRate; } +UINT sbrEncoder_IsSingleRatePossible(AUDIO_OBJECT_TYPE aot) +{ + UINT isPossible=(AOT_PS==aot)?0:1; + return isPossible; +} INT sbrEncoder_Init( - HANDLE_SBR_ENCODER hSbrEncoder, - SBR_ELEMENT_INFO elInfo[(6)], - int noElements, - INT_PCM *inputBuffer, - INT *coreBandwidth, - INT *inputBufferOffset, - INT *numChannels, - INT *sampleRate, - INT *frameLength, - AUDIO_OBJECT_TYPE *aot, - int *delay, - int transformFactor, - ULONG statesInitFlag - ) + HANDLE_SBR_ENCODER hSbrEncoder, + SBR_ELEMENT_INFO elInfo[(8)], + int noElements, + INT_PCM *inputBuffer, + INT *coreBandwidth, + INT *inputBufferOffset, + INT *numChannels, + INT *coreSampleRate, + UINT *downSampleFactor, + INT *frameLength, + AUDIO_OBJECT_TYPE aot, + int *delay, + int transformFactor, + const int headerPeriod, + ULONG statesInitFlag + ) { HANDLE_ERROR_INFO errorInfo = noError; - sbrConfiguration sbrConfig[(6)]; + sbrConfiguration sbrConfig[(8)]; INT error = 0; INT lowestBandwidth; /* Save input parameters */ - INT inputSampleRate = *sampleRate; + INT inputSampleRate = *coreSampleRate; int coreFrameLength = *frameLength; int inputBandWidth = *coreBandwidth; int inputChannels = *numChannels; @@ -1739,20 +1835,26 @@ INT sbrEncoder_Init( int downsampledOffset = 0; int sbrOffset = 0; int downsamplerDelay = 0; - int downsample = 0; + int timeDomainDownsample = 0; int nBitstrDelay = 0; - int lowestSbrStartFreq, lowestSbrStopFreq; + int highestSbrStartFreq, highestSbrStopFreq; int lowDelay = 0; int usePs = 0; /* check whether SBR setting is available for the current encoder configuration (bitrate, samplerate) */ - if ( (*aot==AOT_PS) || (*aot==AOT_MP2_PS) || (*aot==AOT_DABPLUS_PS) || (*aot==AOT_DRM_MPEG_PS) ) { + if (!sbrEncoder_IsSingleRatePossible(aot)) { + *downSampleFactor = 2; + } + + + + if ( (aot==AOT_PS) || (aot==AOT_MP2_PS) || (aot==AOT_DABPLUS_PS) || (aot==AOT_DRM_MPEG_PS) ) { usePs = 1; } - if ( (*aot==AOT_ER_AAC_ELD) ) { + if ( (aot==AOT_ER_AAC_ELD) ) { lowDelay = 1; } - else if ( (*aot==AOT_ER_AAC_LD) ) { + else if ( (aot==AOT_ER_AAC_LD) ) { error = 1; goto bail; } @@ -1767,25 +1869,25 @@ INT sbrEncoder_Init( /* core encoder gets downmixed mono signal */ *numChannels = 1; } else { - switch (*aot) { - case AOT_MP2_PS: - *aot = AOT_MP2_SBR; - break; - case AOT_DABPLUS_PS: - *aot = AOT_DABPLUS_SBR; - break; - case AOT_DRM_MPEG_PS: - *aot = AOT_DRM_SBR; - break; - case AOT_PS: - default: - *aot = AOT_SBR; - } - usePs = 0; + error = 1; + goto bail; } } /* usePs */ - /* check whether SBR setting is available for the current encoder configuration (bitrate, samplerate) */ + /* set the core's sample rate */ + switch (*downSampleFactor) { + case 1: + *coreSampleRate = inputSampleRate; + break; + case 2: + *coreSampleRate = inputSampleRate>>1; + break; + default: + *coreSampleRate = inputSampleRate>>1; + return 0; /* return error */ + } + + /* check whether SBR setting is available for the current encoder configuration (bitrate, coreSampleRate) */ { int delayDiff = 0; int el, coreEl; @@ -1798,54 +1900,37 @@ INT sbrEncoder_Init( continue; } /* check if desired configuration is available */ - if ( !FDKsbrEnc_IsSbrSettingAvail (elInfo[coreEl].bitRate, 0, elInfo[coreEl].nChannelsInEl, inputSampleRate, *aot) ) + if ( !FDKsbrEnc_IsSbrSettingAvail (elInfo[coreEl].bitRate, 0, elInfo[coreEl].nChannelsInEl, inputSampleRate, *coreSampleRate, aot) ) { - /* otherwise - change to AAC-LC */ - switch (*aot) { - case AOT_MP2_SBR: - case AOT_MP2_PS: - *aot = AOT_MP2_AAC_LC; - break; - case AOT_DABPLUS_SBR: - case AOT_DABPLUS_PS: - *aot = AOT_DABPLUS_AAC_LC; - break; - case AOT_DRM_SBR: - case AOT_DRM_MPEG_PS: - *aot = AOT_DRM_AAC; - break; - case AOT_ER_AAC_ELD: - break; - case AOT_SBR: - case AOT_PS: - default: - *aot = AOT_AAC_LC; - } error = 1; goto bail; } } - *sampleRate /= DOWN_SMPL_FAC; - /* Determine Delay balancing and new encoder delay */ if (lowDelay) { - downsample = 1; /* activate downsampler */ - delayDiff = (*delay*DOWN_SMPL_FAC) + DELAY_ELD2SBR(coreFrameLength); - *delay = DELAY_ELDSBR(coreFrameLength); + { + delayDiff = (*delay * *downSampleFactor) + DELAY_ELD2SBR(coreFrameLength,*downSampleFactor); + *delay = DELAY_ELDSBR(coreFrameLength,*downSampleFactor); + } } else if (usePs) { - delayDiff = (*delay*DOWN_SMPL_FAC) + DELAY_AAC2PS(coreFrameLength); - *delay = DELAY_PS(coreFrameLength); + delayDiff = (*delay * *downSampleFactor) + DELAY_AAC2PS(coreFrameLength,*downSampleFactor); + *delay = DELAY_PS(coreFrameLength,*downSampleFactor); } else { - downsample = 1; /* activate downsampler */ - delayDiff = (*delay*DOWN_SMPL_FAC) + DELAY_AAC2SBR(coreFrameLength); - *delay = DELAY_SBR(coreFrameLength); + delayDiff = DELAY_AAC2SBR(coreFrameLength,*downSampleFactor); + delayDiff += (*delay * *downSampleFactor); + *delay = DELAY_SBR(coreFrameLength,*downSampleFactor); } + if (!usePs) { + timeDomainDownsample = *downSampleFactor-1; /* activate time domain downsampler when downSampleFactor is != 1 */ + } + + /* Take care about downsampled data bound to the SBR path */ - if (!downsample && delayDiff > 0) { + if (!timeDomainDownsample && delayDiff > 0) { /* * We must tweak the balancing into a situation where the downsampled path * is the one to be delayed, because delaying the QMF domain input, also delays @@ -1854,12 +1939,15 @@ INT sbrEncoder_Init( while ( delayDiff > 0 ) { /* Encoder delay increases */ - *delay += coreFrameLength*DOWN_SMPL_FAC; - /* Add one frame delay to SBR path */ - delayDiff -= coreFrameLength*DOWN_SMPL_FAC; + { + *delay += coreFrameLength * *downSampleFactor; + /* Add one frame delay to SBR path */ + delayDiff -= coreFrameLength * *downSampleFactor; + } nBitstrDelay += 1; } - } else { + } else + { *delay += fixp_abs(delayDiff); } @@ -1867,32 +1955,33 @@ INT sbrEncoder_Init( /* Delay AAC data */ delayDiff = -delayDiff; /* Multiply downsampled offset by AAC core channels. Divide by 2 because of half samplerate of downsampled data. */ - downsampledOffset = (delayDiff*(*numChannels))/DOWN_SMPL_FAC; + FDK_ASSERT(*downSampleFactor>0 && *downSampleFactor<=2); + downsampledOffset = (delayDiff*(*numChannels))>>(*downSampleFactor-1); sbrOffset = 0; } else { /* Delay SBR input */ - if ( delayDiff > (int)coreFrameLength*DOWN_SMPL_FAC ) + if ( delayDiff > (int)coreFrameLength * (int)*downSampleFactor ) { /* Do bitstream frame-wise delay balancing if we have more than SBR framelength samples delay difference */ - delayDiff -= coreFrameLength*DOWN_SMPL_FAC; + delayDiff -= coreFrameLength * *downSampleFactor; nBitstrDelay = 1; } /* Multiply input offset by input channels */ sbrOffset = delayDiff*(*numChannels); downsampledOffset = 0; } - - hSbrEncoder->nBitstrDelay = nBitstrDelay; - hSbrEncoder->nChannels = *numChannels; - hSbrEncoder->frameSize = *frameLength*DOWN_SMPL_FAC; - hSbrEncoder->fTimeDomainDownsampling = downsample; - hSbrEncoder->estimateBitrate = 0; - hSbrEncoder->inputDataDelay = 0; + hSbrEncoder->nBitstrDelay = nBitstrDelay; + hSbrEncoder->nChannels = *numChannels; + hSbrEncoder->frameSize = coreFrameLength * *downSampleFactor; + hSbrEncoder->fTimeDomainDownsampling = timeDomainDownsample; + hSbrEncoder->downSampleFactor = *downSampleFactor; + hSbrEncoder->estimateBitrate = 0; + hSbrEncoder->inputDataDelay = 0; /* Open SBR elements */ el = -1; - lowestSbrStartFreq = lowestSbrStopFreq = 9999; + highestSbrStartFreq = highestSbrStopFreq = 0; lowestBandwidth = 99999; /* Loop through each core encoder element and get a matching SBR element config */ @@ -1915,28 +2004,38 @@ INT sbrEncoder_Init( /* * Init sbrConfig structure */ - FDKsbrEnc_InitializeSbrDefaults ( &sbrConfig[el], - DOWN_SMPL_FAC, - coreFrameLength); + if ( ! FDKsbrEnc_InitializeSbrDefaults ( &sbrConfig[el], + *downSampleFactor, + coreFrameLength + ) ) + { + error = 1; + goto bail; + } + /* * Modify sbrConfig structure according to Element parameters */ - FDKsbrEnc_AdjustSbrSettings ( &sbrConfig[el], - elInfo[coreEl].bitRate, - elInfo[coreEl].nChannelsInEl, - *sampleRate, - transformFactor, - 24000, - 0, - 0, /* useSpeechConfig */ - 0, /* lcsMode */ - usePs, /* bParametricStereo */ - *aot); + if ( ! FDKsbrEnc_AdjustSbrSettings (&sbrConfig[el], + elInfo[coreEl].bitRate, + elInfo[coreEl].nChannelsInEl, + *coreSampleRate, + inputSampleRate, + transformFactor, + 24000, + 0, + 0, /* useSpeechConfig */ + 0, /* lcsMode */ + usePs, /* bParametricStereo */ + aot) ) + { + error = 1; + goto bail; + } /* Find common frequency border for all SBR elements */ - lowestSbrStartFreq = fixMin(lowestSbrStartFreq, sbrConfig[el].startFreq); - lowestSbrStopFreq = fixMin(lowestSbrStopFreq, sbrConfig[el].stopFreq); - + highestSbrStartFreq = fixMax(highestSbrStartFreq, sbrConfig[el].startFreq); + highestSbrStopFreq = fixMax(highestSbrStopFreq, sbrConfig[el].stopFreq); } /* first element loop */ @@ -1952,21 +2051,24 @@ INT sbrEncoder_Init( int bandwidth = *coreBandwidth; /* Use lowest common bandwidth */ - sbrConfig[el].startFreq = lowestSbrStartFreq; - sbrConfig[el].stopFreq = lowestSbrStopFreq; + sbrConfig[el].startFreq = highestSbrStartFreq; + sbrConfig[el].stopFreq = highestSbrStopFreq; /* initialize SBR element, and get core bandwidth */ error = FDKsbrEnc_EnvInit(hSbrEncoder->sbrElement[el], &sbrConfig[el], &bandwidth, - *aot, + aot, nBitstrDelay, el, - statesInitFlag + headerPeriod, + statesInitFlag, + hSbrEncoder->fTimeDomainDownsampling ,hSbrEncoder->dynamicRam ); if (error != 0) { + error = 2; goto bail; } @@ -1988,30 +2090,29 @@ INT sbrEncoder_Init( for (ch=0; chelInfo.nChannelsInEl; ch++) { - FDKaacEnc_InitDownsampler (&hSbrEl->sbrChannel[ch]->downSampler, Wc, DOWN_SMPL_FAC); + FDKaacEnc_InitDownsampler (&hSbrEl->sbrChannel[ch]->downSampler, Wc, *downSampleFactor); + FDK_ASSERT (hSbrEl->sbrChannel[ch]->downSampler.delay <=MAX_DS_FILTER_DELAY); } - FDK_ASSERT (hSbrEl->sbrChannel[0]->downSampler.delay <=MAX_DS_FILTER_DELAY && hSbrEl->sbrChannel[0]->downSampler.delay <=MAX_DS_FILTER_DELAY); downsamplerDelay = hSbrEl->sbrChannel[0]->downSampler.delay; } /* third element loop */ /* lfe */ - FDKaacEnc_InitDownsampler (&hSbrEncoder->lfeDownSampler, 0, DOWN_SMPL_FAC); + FDKaacEnc_InitDownsampler (&hSbrEncoder->lfeDownSampler, 0, *downSampleFactor); /* Add the resampler additional delay to get the final delay and buffer offset values. */ - if (sbrOffset > 0 || downsampledOffset <= ((downsamplerDelay * (*numChannels))/DOWN_SMPL_FAC)) { + if (sbrOffset > 0 || downsampledOffset <= ((downsamplerDelay * (*numChannels))>>(*downSampleFactor-1))) { sbrOffset += (downsamplerDelay - downsampledOffset) * (*numChannels) ; *delay += downsamplerDelay - downsampledOffset; downsampledOffset = 0; } else { - downsampledOffset -= (downsamplerDelay * (*numChannels))/DOWN_SMPL_FAC; + downsampledOffset -= (downsamplerDelay * (*numChannels))>>(*downSampleFactor-1); sbrOffset = 0; } hSbrEncoder->inputDataDelay = downsamplerDelay; } - /* Assign core encoder Bandwidth */ *coreBandwidth = lowestBandwidth; @@ -2025,7 +2126,7 @@ INT sbrEncoder_Init( FDK_ASSERT(hSbrEncoder->noElements == 1); INT psTuningTableIdx = getPsTuningTableIndex(elInfo[0].bitRate, NULL); - psEncConfig.frameSize = *frameLength; //sbrConfig.sbrFrameSize; + psEncConfig.frameSize = coreFrameLength; //sbrConfig.sbrFrameSize; psEncConfig.qmfFilterMode = 0; psEncConfig.sbrPsDelay = 0; @@ -2037,7 +2138,7 @@ INT sbrEncoder_Init( /* calculation is not quite linear, increased number of envelopes causes more bits */ /* assume avg. 50 bits per frame for 10 stereo bands / 1 envelope configuration */ - hSbrEncoder->estimateBitrate += ( (((*sampleRate) * 5 * psEncConfig.nStereoBands * psEncConfig.maxEnvelopes) / hSbrEncoder->frameSize)); + hSbrEncoder->estimateBitrate += ( (((*coreSampleRate) * 5 * psEncConfig.nStereoBands * psEncConfig.maxEnvelopes) / hSbrEncoder->frameSize)); } else { error = ERROR(CDI, "Invalid ps tuning table index."); @@ -2066,10 +2167,16 @@ INT sbrEncoder_Init( errorInfo = handBack(errorInfo); } } + + /* QMF analysis + Hybrid analysis + Hybrid synthesis + QMF synthesis + downsampled input buffer delay */ + hSbrEncoder->inputDataDelay = (64*10/2) + (6*64) + (0) + (64*10/2-64+1) + ((*downSampleFactor)*downsampledOffset); } hSbrEncoder->downsampledOffset = downsampledOffset; - hSbrEncoder->downmixSize = coreFrameLength*(*numChannels); + { + hSbrEncoder->downmixSize = coreFrameLength*(*numChannels); + } + hSbrEncoder->bufferOffset = sbrOffset; /* Delay Compensation: fill bitstream delay buffer with zero input signal */ if ( hSbrEncoder->nBitstrDelay > 0 ) @@ -2080,7 +2187,7 @@ INT sbrEncoder_Init( } /* Set Output frame length */ - *frameLength = coreFrameLength*DOWN_SMPL_FAC; + *frameLength = coreFrameLength * *downSampleFactor; /* Input buffer offset */ *inputBufferOffset = fixMax(sbrOffset, downsampledOffset); @@ -2091,7 +2198,7 @@ INT sbrEncoder_Init( bail: /* Restore input settings */ - *sampleRate = inputSampleRate; + *coreSampleRate = inputSampleRate; *frameLength = coreFrameLength; *numChannels = inputChannels; *coreBandwidth = inputBandWidth; @@ -2104,8 +2211,8 @@ INT sbrEncoder_EncodeFrame( HANDLE_SBR_ENCODER hSbrEncoder, INT_PCM *samples, UINT timeInStride, - UINT sbrDataBits[(6)], - UCHAR sbrData[(6)][MAX_PAYLOAD_SIZE] + UINT sbrDataBits[(8)], + UCHAR sbrData[(8)][MAX_PAYLOAD_SIZE] ) { INT error; @@ -2129,8 +2236,8 @@ sbrEncoder_EncodeFrame( HANDLE_SBR_ENCODER hSbrEncoder, } } - if ( (hSbrEncoder->lfeChIdx!=-1) && (hSbrEncoder->fTimeDomainDownsampling) ) - { + if ( ( hSbrEncoder->lfeChIdx!=-1) && (hSbrEncoder->downSampleFactor > 1) ) + { /* lfe downsampler */ INT nOutSamples; FDKaacEnc_Downsample(&hSbrEncoder->lfeDownSampler, @@ -2140,7 +2247,9 @@ sbrEncoder_EncodeFrame( HANDLE_SBR_ENCODER hSbrEncoder, samples + hSbrEncoder->downsampledOffset + hSbrEncoder->lfeChIdx, &nOutSamples, hSbrEncoder->nChannels); - } /* lfe downsampler */ + + + } return 0; } diff --git a/libSBRenc/src/sbr_misc.cpp b/libSBRenc/src/sbr_misc.cpp index c44be22..c673b81 100644 --- a/libSBRenc/src/sbr_misc.cpp +++ b/libSBRenc/src/sbr_misc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/sbr_misc.h b/libSBRenc/src/sbr_misc.h index 33b9cf9..f471974 100644 --- a/libSBRenc/src/sbr_misc.h +++ b/libSBRenc/src/sbr_misc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/sbr_ram.cpp b/libSBRenc/src/sbr_ram.cpp index e304c39..ee6c37f 100644 --- a/libSBRenc/src/sbr_ram.cpp +++ b/libSBRenc/src/sbr_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -107,39 +107,39 @@ C_ALLOC_MEM (Ram_SbrDynamic_RAM, FIXP_DBL, ((SBR_ENC_DYN_RAM_SIZE)/sizeof(FIXP_D in module sbr_ram and sbr rom */ C_ALLOC_MEM (Ram_SbrEncoder, SBR_ENCODER, 1) -C_ALLOC_MEM2(Ram_SbrChannel, SBR_CHANNEL, 1, (6)) -C_ALLOC_MEM2(Ram_SbrElement, SBR_ELEMENT, 1, (6)) +C_ALLOC_MEM2(Ram_SbrChannel, SBR_CHANNEL, 1, (8)) +C_ALLOC_MEM2(Ram_SbrElement, SBR_ELEMENT, 1, (8)) /*! Filter states for QMF-analysis.
Dimension: #MAXNRSBRCHANNELS * #SBR_QMF_FILTER_LENGTH */ -C_AALLOC_MEM2_L (Ram_Sbr_QmfStatesAnalysis, FIXP_QAS, QMF_FILTER_LENGTH, (6), SECT_DATA_L1) +C_AALLOC_MEM2_L (Ram_Sbr_QmfStatesAnalysis, FIXP_QAS, QMF_FILTER_LENGTH, (8), SECT_DATA_L1) /*! Matrix holding the quota values for all estimates, all channels Dimension #MAXNRSBRCHANNELS * +#SBR_QMF_CHANNELS* #MAX_NO_OF_ESTIMATES */ -C_ALLOC_MEM2_L (Ram_Sbr_quotaMatrix, FIXP_DBL, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (6), SECT_DATA_L1) +C_ALLOC_MEM2_L (Ram_Sbr_quotaMatrix, FIXP_DBL, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (8), SECT_DATA_L1) /*! Matrix holding the sign values for all estimates, all channels Dimension #MAXNRSBRCHANNELS * +#SBR_QMF_CHANNELS* #MAX_NO_OF_ESTIMATES */ -C_ALLOC_MEM2 (Ram_Sbr_signMatrix, INT, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (6)) +C_ALLOC_MEM2 (Ram_Sbr_signMatrix, INT, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (8)) /*! Frequency band table (low res)
Dimension #MAX_FREQ_COEFFS/2+1 */ -C_ALLOC_MEM2 (Ram_Sbr_freqBandTableLO, UCHAR, (MAX_FREQ_COEFFS/2+1), (6)) +C_ALLOC_MEM2 (Ram_Sbr_freqBandTableLO, UCHAR, (MAX_FREQ_COEFFS/2+1), (8)) /*! Frequency band table (high res)
Dimension #MAX_FREQ_COEFFS +1 */ -C_ALLOC_MEM2 (Ram_Sbr_freqBandTableHI, UCHAR, (MAX_FREQ_COEFFS+1), (6)) +C_ALLOC_MEM2 (Ram_Sbr_freqBandTableHI, UCHAR, (MAX_FREQ_COEFFS+1), (8)) /*! vk matser table
Dimension #MAX_FREQ_COEFFS +1 */ -C_ALLOC_MEM2 (Ram_Sbr_v_k_master, UCHAR, (MAX_FREQ_COEFFS+1), (6)) +C_ALLOC_MEM2 (Ram_Sbr_v_k_master, UCHAR, (MAX_FREQ_COEFFS+1), (8)) /* @@ -149,23 +149,23 @@ C_ALLOC_MEM2 (Ram_Sbr_v_k_master, UCHAR, (MAX_FREQ_COEFFS+1), (6)) /*! sbr_detectionVectors
Dimension #MAX_NUM_CHANNELS*#MAX_NO_OF_ESTIMATES*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_detectionVectors, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) +C_ALLOC_MEM2 (Ram_Sbr_detectionVectors, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) /*! sbr_prevCompVec[
Dimension #MAX_NUM_CHANNELS*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_prevEnvelopeCompensation, UCHAR, MAX_FREQ_COEFFS, (6)) +C_ALLOC_MEM2 (Ram_Sbr_prevEnvelopeCompensation, UCHAR, MAX_FREQ_COEFFS, (8)) /*! sbr_guideScfb[
Dimension #MAX_NUM_CHANNELS*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_guideScfb, UCHAR, MAX_FREQ_COEFFS, (6)) +C_ALLOC_MEM2 (Ram_Sbr_guideScfb, UCHAR, MAX_FREQ_COEFFS, (8)) /*! sbr_guideVectorDetected
Dimension #MAX_NUM_CHANNELS*#MAX_NO_OF_ESTIMATES*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_guideVectorDetected, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) -C_ALLOC_MEM2 (Ram_Sbr_guideVectorDiff, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) -C_ALLOC_MEM2 (Ram_Sbr_guideVectorOrig, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) +C_ALLOC_MEM2 (Ram_Sbr_guideVectorDetected, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) +C_ALLOC_MEM2 (Ram_Sbr_guideVectorDiff, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) +C_ALLOC_MEM2 (Ram_Sbr_guideVectorOrig, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) /* Static Parametric Stereo memory @@ -191,7 +191,7 @@ C_ALLOC_MEM (Ram_ParamStereo, PARAMETRIC_STEREO, 1) /*! Energy buffer for envelope extraction
Dimension #MAXNRSBRCHANNELS * +#SBR_QMF_SLOTS * #SBR_QMF_CHANNELS */ - C_ALLOC_MEM2 (Ram_Sbr_envYBuffer, FIXP_DBL, (QMF_MAX_TIME_SLOTS/2 * QMF_CHANNELS), (6)) + C_ALLOC_MEM2 (Ram_Sbr_envYBuffer, FIXP_DBL, (QMF_MAX_TIME_SLOTS/2 * QMF_CHANNELS), (8)) FIXP_DBL* GetRam_Sbr_envYBuffer (int n, UCHAR* dynamic_RAM) { FDK_ASSERT(dynamic_RAM!=0); diff --git a/libSBRenc/src/sbr_ram.h b/libSBRenc/src/sbr_ram.h index 0f9e9cc..7e3d0c8 100644 --- a/libSBRenc/src/sbr_ram.h +++ b/libSBRenc/src/sbr_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/sbr_rom.cpp b/libSBRenc/src/sbr_rom.cpp index c8b945f..a2b6527 100644 --- a/libSBRenc/src/sbr_rom.cpp +++ b/libSBRenc/src/sbr_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -506,216 +506,277 @@ const UCHAR bookSbrNoiseBalanceL11T[25] = /* tuningTable */ -const sbrTuningTable_t sbrTuningTable[SBRENC_TUNING_SIZE] = +const sbrTuningTable_t sbrTuningTable[] = { + /* Some of the low bitrates are commented out here, this is because the + encoder could lose frames at those bitrates and throw an error because + it has insufficient bits to encode for some test items. + */ - /*** AAC ***/ + /*** HE-AAC section ***/ /* sf,sfsp,sf,sfsp,nnb,nfo,saml,SM,FS*/ /*** mono ***/ /* 8/16 kHz dual rate */ - { 8000, 10000, 8000, 1, 7, 6, 11,10, 1, 0, 6, SBR_MONO, 3 }, - { 10000, 12000, 8000, 1, 11, 7, 13,12, 1, 0, 6, SBR_MONO, 3 }, - { 12000, 16001, 8000, 1, 14,10, 13,13, 1, 0, 6, SBR_MONO, 3 }, - { 16000, 24000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 24000, 32000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 32000, 48001, 8000, 1, 14,11, 15,15, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ /* bitrates higher than 48000 not supported by AAC core */ + { CODEC_AAC, 8000, 10000, 8000, 1, 7, 6, 11,10, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 10000, 12000, 8000, 1, 11, 7, 13,12, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 12000, 16001, 8000, 1, 14,10, 13,13, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 16000, 24000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 24000, 32000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 32000, 48001, 8000, 1, 14,11, 15,15, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ /* bitrates higher than 48000 not supported by AAC core */ /* 11/22 kHz dual rate */ - { 8000, 10000, 11025, 1, 5, 4, 6, 6, 1, 0, 6, SBR_MONO, 3 }, - { 10000, 12000, 11025, 1, 8, 5, 12, 9, 1, 0, 6, SBR_MONO, 3 }, - { 12000, 16000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, - { 16000, 20000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* at such "high" bitrates it's better to upsample the input */ - { 20000, 24001, 11025, 1, 13, 9, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* signal by a factor of 2 before sending it into the encoder */ - { 24000, 32000, 11025, 1, 14,10, 14, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 32000, 48000, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 48000, 64001, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ + { CODEC_AAC, 8000, 10000, 11025, 1, 5, 4, 6, 6, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 10000, 12000, 11025, 1, 8, 5, 12, 9, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 12000, 16000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 16000, 20000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* at such "high" bitrates it's better to upsample the input */ + { CODEC_AAC, 20000, 24001, 11025, 1, 13, 9, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* signal by a factor of 2 before sending it into the encoder */ + { CODEC_AAC, 24000, 32000, 11025, 1, 14,10, 14, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 32000, 48000, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 48000, 64001, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ /* 12/24 kHz dual rate */ - { 8000, 10000, 12000, 1, 4, 3, 6, 6, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ - { 10000, 12000, 12000, 1, 7, 4, 11, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ - { 12000, 16000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 20000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ /* at such "high" bitrates it's better to upsample the input */ - { 20000, 24001, 12000, 1, 12, 8, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 20 kbit/s */ /* signal by a factor of 2 before sending it into the encoder */ - { 24000, 32000, 12000, 1, 13, 9, 13, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 32000, 48000, 12000, 1, 14,10, 14,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 48000, 64001, 12000, 1, 15,11, 15,11, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ + { CODEC_AAC, 8000, 10000, 12000, 1, 4, 3, 6, 6, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ + { CODEC_AAC, 10000, 12000, 12000, 1, 7, 4, 11, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ + { CODEC_AAC, 12000, 16000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 20000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ /* at such "high" bitrates it's better to upsample the input */ + { CODEC_AAC, 20000, 24001, 12000, 1, 12, 8, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 20 kbit/s */ /* signal by a factor of 2 before sending it into the encoder */ + { CODEC_AAC, 24000, 32000, 12000, 1, 13, 9, 13, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 32000, 48000, 12000, 1, 14,10, 14,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 48000, 64001, 12000, 1, 14,11, 15,11, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ /* 16/32 kHz dual rate */ - { 8000, 10000, 16000, 1, 1, 1, 0, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ - { 10000, 12000, 16000, 1, 2, 1, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ - { 12000, 16000, 16000, 1, 4, 2, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 18000, 16000, 1, 4, 2, 8, 3, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ - { 18000, 22000, 16000, 1, 6, 5,11, 7, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 16000, 1, 10, 9,12, 8, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 16000, 1, 12,12,13,13, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 16000, 1, 14,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 64001, 16000, 1, 15,15,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 8000, 10000, 16000, 1, 1, 1, 0, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ + { CODEC_AAC, 10000, 12000, 16000, 1, 2, 1, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ + { CODEC_AAC, 12000, 16000, 16000, 1, 4, 2, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 18000, 16000, 1, 4, 2, 8, 3, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ + { CODEC_AAC, 18000, 22000, 16000, 1, 6, 5,11, 7, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 22000, 28000, 16000, 1, 10, 9,12, 8, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 16000, 1, 12,12,13,13, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 16000, 1, 14,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 64001, 16000, 1, 14,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ /* 22.05/44.1 kHz dual rate */ - /* { 8000, 11369, 22050, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ - { 11369, 16000, 22050, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 18000, 22050, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ - { 18000, 22000, 22050, 1, 4, 4, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 22050, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 22050, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 64001, 22050, 1, 13,13,12,12, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + /* { CODEC_AAC, 8000, 11369, 22050, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ + { CODEC_AAC, 11369, 16000, 22050, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 18000, 22050, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ + { CODEC_AAC, 18000, 22000, 22050, 1, 4, 4, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 22000, 28000, 22050, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 22050, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 22050, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 64001, 22050, 1, 13,13,12,12, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ /* 24/48 kHz dual rate */ - /* { 8000, 12000, 24000, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ - { 12000, 16000, 24000, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 18000, 24000, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ - { 18000, 22000, 24000, 1, 4, 3, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 24000, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 24000, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 64001, 24000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + /* { CODEC_AAC, 8000, 12000, 24000, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ + { CODEC_AAC, 12000, 16000, 24000, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 18000, 24000, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ + { CODEC_AAC, 18000, 22000, 24000, 1, 4, 3, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 22000, 28000, 24000, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 24000, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 24000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 64001, 24000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ /* 32/64 kHz dual rate */ /* placebo settings */ - { 24000, 36000, 32000, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range */ - { 36000, 60000, 32000, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range */ - { 60000, 72000, 32000, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ - { 72000,100000, 32000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ - { 100000,160001, 32000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ + { CODEC_AAC, 24000, 36000, 32000, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range */ + { CODEC_AAC, 36000, 60000, 32000, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range */ + { CODEC_AAC, 60000, 72000, 32000, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ + { CODEC_AAC, 72000,100000, 32000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 100000,160001, 32000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ /* 44.1/88.2 kHz dual rate */ /* placebo settings */ - { 24000, 36000, 44100, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ - { 36000, 60000, 44100, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range (multichannel rear) */ - { 60000, 72000, 44100, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ - { 72000,100000, 44100, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ - { 100000,160001, 44100, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ + { CODEC_AAC, 24000, 36000, 44100, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 36000, 60000, 44100, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 72000, 44100, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ + { CODEC_AAC, 72000,100000, 44100, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 100000,160001, 44100, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ /* 48/96 kHz dual rate */ /* not yet finally tuned */ - { 32000, 36000, 48000, 1, 4, 4, 9, 9, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ - { 36000, 60000, 48000, 1, 7, 7,10,10, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ - { 60000, 72000, 48000, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ - { 72000,100000, 48000, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ - { 100000,160001, 48000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ + { CODEC_AAC, 32000, 36000, 48000, 1, 4, 4, 9, 9, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 36000, 60000, 48000, 1, 7, 7,10,10, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ + { CODEC_AAC, 60000, 72000, 48000, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ + { CODEC_AAC, 72000,100000, 48000, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ + { CODEC_AAC, 100000,160001, 48000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ /*** stereo ***/ /* 08/16 kHz dual rate */ - { 16000, 24000, 8000, 2, 6, 6, 9, 7, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ - { 24000, 28000, 8000, 2, 9, 9, 11, 9, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 8000, 2, 11, 9, 11, 9, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 8000, 2, 13,11, 13,11, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 8000, 2, 14,12, 13,12, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 8000, 2, 15,15, 13,13, 3, 0,-3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 8000, 2, 15,15, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 8000, 2, 15,15, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 8000, 2, 6, 6, 9, 7, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ + { CODEC_AAC, 24000, 28000, 8000, 2, 9, 9, 11, 9, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 8000, 2, 11, 9, 11, 9, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 8000, 2, 13,11, 13,11, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 8000, 2, 14,12, 13,12, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 8000, 2, 14,14, 13,13, 3, 0,-3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 8000, 2, 14,14, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 8000, 2, 14,14, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 11/22 kHz dual rate */ - { 16000, 24000, 11025, 2, 7, 5, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ - { 24000, 28000, 11025, 2, 10, 8,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 11025, 2, 12, 8,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 11025, 2, 13, 9,13, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 11025, 2, 14,11,13,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 11025, 2, 7, 5, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ + { CODEC_AAC, 24000, 28000, 11025, 2, 10, 8,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 11025, 2, 12, 8,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 11025, 2, 13, 9,13, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 11025, 2, 14,11,13,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 12/24 kHz dual rate */ - { 16000, 24000, 12000, 2, 6, 4, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ - { 24000, 28000, 12000, 2, 9, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 12000, 2, 11, 7,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 12000, 2, 12, 9,12, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 12000, 2, 13,12,13,12, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 12000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 12000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 12000, 2, 6, 4, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ + { CODEC_AAC, 24000, 28000, 12000, 2, 9, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 12000, 2, 11, 7,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 12000, 2, 12, 9,12, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 12000, 2, 13,12,13,12, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 16/32 kHz dual rate */ - { 16000, 24000, 16000, 2, 4, 2, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ - { 24000, 28000, 16000, 2, 8, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 16000, 2, 10, 9,12,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 16000, 2, 13,13,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 16000, 2, 15,15,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 16000, 2, 15,15,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 16000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 16000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 16000, 2, 4, 2, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 24000, 28000, 16000, 2, 8, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 16000, 2, 10, 9,12,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 16000, 2, 13,13,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 16000, 2, 14,14,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 22.05/44.1 kHz dual rate */ - { 16000, 24000, 22050, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ - { 24000, 28000, 22050, 2, 5, 4, 6, 5, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 32000, 22050, 2, 5, 4, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 28 kbit/s */ - { 32000, 36000, 22050, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 22050, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 22050, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 22050, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 24000, 28000, 22050, 2, 5, 4, 6, 5, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 32000, 22050, 2, 5, 4, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 28 kbit/s */ + { CODEC_AAC, 32000, 36000, 22050, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 22050, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 22050, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 22050, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 24/48 kHz dual rate */ - { 16000, 24000, 24000, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ - { 24000, 28000, 24000, 2, 5, 5, 6, 6, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 24000, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 24000, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 24000, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 24000, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 24000, 2, 15,15,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 24000, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 24000, 28000, 24000, 2, 5, 5, 6, 6, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 24000, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 24000, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 24000, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 24000, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 24000, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 24000, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 32/64 kHz dual rate */ /* placebo settings */ - { 32000, 60000, 32000, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ - { 60000, 80000, 32000, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ - { 80000,112000, 32000, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ - { 112000,144000, 32000, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ - { 144000,256001, 32000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + { CODEC_AAC, 32000, 60000, 32000, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 80000, 32000, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 80000,112000, 32000, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ + { CODEC_AAC, 112000,144000, 32000, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 144000,256001, 32000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ /* 44.1/88.2 kHz dual rate */ /* placebo settings */ - { 32000, 60000, 44100, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ - { 60000, 80000, 44100, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ - { 80000,112000, 44100, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ - { 112000,144000, 44100, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ - { 144000,256001, 44100, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + { CODEC_AAC, 32000, 60000, 44100, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 80000, 44100, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 80000,112000, 44100, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ + { CODEC_AAC, 112000,144000, 44100, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 144000,256001, 44100, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ /* 48/96 kHz dual rate */ /* not yet finally tuned */ - { 36000, 60000, 48000, 2, 4, 4, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ - { 60000, 80000, 48000, 2, 7, 7, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 */ - { 80000,112000, 48000, 2, 9, 9,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 96 */ - { 112000,144000, 48000, 2, 11,11,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 128 */ - { 144000,256001, 48000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 192 */ + { CODEC_AAC, 36000, 60000, 48000, 2, 4, 4, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 80000, 48000, 2, 7, 7, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 */ + { CODEC_AAC, 80000,112000, 48000, 2, 9, 9,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 96 */ + { CODEC_AAC, 112000,144000, 48000, 2, 11,11,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 128 */ + { CODEC_AAC, 144000,256001, 48000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 192 */ + /** AAC LOW DELAY SECTION **/ - /* 22.05/44.1 kHz dual rate */ - { 18000, 22000, 22050, 1, 4, 4, 5, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 22050, 1, 4, 4, 6, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 22050, 1, 7, 8, 8, 8, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 1, 9, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 22050, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ - { 52000, 64001, 22050, 1, 12,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 56 kbit/s */ - - /* 24/48 kHz dual rate */ - { 20000, 22000, 24000, 1, 4, 4, 5, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 24000, 1, 4, 4, 6, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 24000, 1, 6, 8, 8, 8, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 1, 8, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 24000, 1, 12,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ - { 52000, 64001, 24000, 1, 13,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + /*** mono ***/ + /* 16/32 kHz dual rate not yet tuned ->alb copied from non LD tables*/ + { CODEC_AACLD, 16000, 18000, 16000, 1, 4, 5, 9, 7, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s wrr: tuned */ + { CODEC_AACLD, 18000, 22000, 16000, 1, 7, 7,12,12, 1, 6, 9, SBR_MONO, 3 }, /* nominal: 20 kbit/s wrr: tuned */ + { CODEC_AACLD, 22000, 28000, 16000, 1, 6, 6, 9, 9, 2, 3, 6, SBR_MONO, 3 }, /* nominal: 24 kbit/s wrr: tuned */ + { CODEC_AACLD, 28000, 36000, 16000, 1, 8, 8,12, 7, 2, 9,12, SBR_MONO, 3 }, /* jgr: special */ /* wrr: tuned */ + { CODEC_AACLD, 36000, 44000, 16000, 1, 10,14,12,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 64001, 16000, 1, 11,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ /* 22.05/44.1 kHz dual rate */ - { 32000, 36000, 22050, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 2, 5, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 22050, 2, 7,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 22050, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 22050, 2, 10,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000, 82000, 22050, 2, 12,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ - { 82000,128001, 22050, 2, 13,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AACLD, 18000, 22000, 22050, 1, 4, 4, 5, 5, 2, 0, 6, SBR_MONO, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AACLD, 22000, 28000, 22050, 1, 5, 5, 6, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AACLD, 28000, 36000, 22050, 1, 7, 8, 8, 8, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 22050, 1, 9, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 22050, 1, 12,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 64001, 22050, 1, 13,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 56 kbit/s */ /* 24/48 kHz dual rate */ - { 32000, 36000, 24000, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 2, 4, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 24000, 2, 6,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 24000, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 24000, 2, 11,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000, 88000, 24000, 2, 12,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ - { 88000,128001, 24000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 92 kbit/s */ + { CODEC_AACLD, 20000, 22000, 24000, 1, 4, 1, 8, 4, 2, 3, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AACLD, 22000, 28000, 24000, 1, 3, 8, 8, 7, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AACLD, 28000, 36000, 24000, 1, 4, 8, 8, 7, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 56000, 24000, 1, 8, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 56000, 64001, 24000, 1, 13,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 kbit/s */ + /* 32/64 kHz dual rate */ /* placebo settings */ /*jgr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 24000, 36000, 32000, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range */ + { CODEC_AACLD, 36000, 60000, 32000, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range */ + { CODEC_AACLD, 60000, 72000, 32000, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ + { CODEC_AACLD, 72000,100000, 32000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ + { CODEC_AACLD, 100000,160001, 32000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ + + /* 44/88 kHz dual rate */ /* not yet finally tuned */ + { CODEC_AACLD, 36000, 60000, 44100, 1, 8, 7, 6, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ + { CODEC_AACLD, 60000, 72000, 44100, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ + { CODEC_AACLD, 72000,100000, 44100, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ + { CODEC_AACLD, 100000,160001, 44100, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ + + /* 48/96 kHz dual rate */ /* 32 and 40kbps line tuned for dual-rate SBR */ + { CODEC_AACLD, 36000, 60000, 48000, 1, 8, 7, 6, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ + { CODEC_AACLD, 60000, 72000, 48000, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ + { CODEC_AACLD, 72000,100000, 48000, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ + { CODEC_AACLD, 100000,160001, 48000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ + + /*** stereo ***/ + /* 16/32 kHz dual rate not yet tuned ->alb copied from non LD tables*/ + { CODEC_AACLD, 32000, 36000, 16000, 2, 10, 9,12,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 16000, 2, 13,13,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 16000, 2, 10, 9,11, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* tune12 nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 60000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AACLD, 60000, 76000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AACLD, 76000,128001, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + + /* 22.05/44.1 kHz dual rate */ + { CODEC_AACLD, 32000, 36000, 22050, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 22050, 2, 5, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 22050, 2, 7,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 60000, 22050, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AACLD, 60000, 76000, 22050, 2, 10,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AACLD, 76000, 82000, 22050, 2, 12,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AACLD, 82000,128001, 22050, 2, 13,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + + /* 24/48 kHz dual rate */ + { CODEC_AACLD, 32000, 36000, 24000, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 24000, 2, 4, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 24000, 2, 6,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 60000, 24000, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AACLD, 60000, 76000, 24000, 2, 11,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AACLD, 76000, 88000, 24000, 2, 12,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AACLD, 88000,128001, 24000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 92 kbit/s */ + + /* 32/64 kHz dual rate */ /* placebo settings */ /*jgr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 60000, 80000, 32000, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AACLD, 80000,112000, 32000, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ + { CODEC_AACLD, 112000,144000, 32000, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ + { CODEC_AACLD, 144000,256001, 32000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + + /* 44.1/88.2 kHz dual rate */ /* placebo settings */ /*wrr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 60000, 80000, 44100, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AACLD, 80000,112000, 44100, 2, 10,10, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 11-08-29 */ + { CODEC_AACLD, 112000,144000, 44100, 2, 12,12,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 11-08-29 */ + { CODEC_AACLD, 144000,256001, 44100, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + + /* 48/96 kHz dual rate */ /* not yet finally tuned */ /*wrr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 60000, 80000, 48000, 2, 7, 7,10,10, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 */ + { CODEC_AACLD, 80000,112000, 48000, 2, 9, 9,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 96 */ + { CODEC_AACLD, 112000,144000, 48000, 2, 11,11,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 128 */ + { CODEC_AACLD, 144000,176000, 48000, 2, 12,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 09-10-19 */ + { CODEC_AACLD, 176000,256001, 48000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 09-10-19 */ }; +const int sbrTuningTableSize = sizeof(sbrTuningTable)/sizeof(sbrTuningTable[0]); + const psTuningTable_t psTuningTable[4] = { { 8000, 22000, PSENC_STEREO_BANDS_10, PSENC_NENV_1, FL2FXCONST_DBL(3.0f/4.0f) }, diff --git a/libSBRenc/src/sbr_rom.h b/libSBRenc/src/sbr_rom.h index e79a730..afa924e 100644 --- a/libSBRenc/src/sbr_rom.h +++ b/libSBRenc/src/sbr_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -118,13 +118,8 @@ extern const UCHAR v_Huff_NoiseLevelL11T[63]; extern const INT bookSbrNoiseBalanceC11T[25]; extern const UCHAR bookSbrNoiseBalanceL11T[25]; -#define SBRENC_AACLC_TUNING_SIZE 124 -#define SBRENC_AACELD_TUNING_SIZE (26) -#define SBRENC_AACELD2_TUNING_SIZE (26) - -#define SBRENC_TUNING_SIZE (SBRENC_AACLC_TUNING_SIZE + SBRENC_AACELD_TUNING_SIZE) - -extern const sbrTuningTable_t sbrTuningTable[SBRENC_TUNING_SIZE]; +extern const sbrTuningTable_t sbrTuningTable[]; +extern const int sbrTuningTableSize; extern const psTuningTable_t psTuningTable[4]; diff --git a/libSBRenc/src/sbrenc_freq_sca.cpp b/libSBRenc/src/sbrenc_freq_sca.cpp index bbcb29e..30bc5ca 100644 --- a/libSBRenc/src/sbrenc_freq_sca.cpp +++ b/libSBRenc/src/sbrenc_freq_sca.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -84,6 +84,7 @@ amm-info@iis.fraunhofer.de /*! \file \brief frequency scale + \author Tobias Chalupka */ #include "sbrenc_freq_sca.h" @@ -92,10 +93,10 @@ amm-info@iis.fraunhofer.de #include "genericStds.h" /* StartFreq */ -static INT getStartFreq(INT fs, const INT start_freq); +static INT getStartFreq(INT fsCore, const INT start_freq); /* StopFreq */ -static INT getStopFreq(INT fs, const INT stop_freq, const INT noChannels); +static INT getStopFreq(INT fsCore, const INT stop_freq); static INT numberOfBands(INT b_p_o, INT start, INT stop, FIXP_DBL warp_factor); static void CalcBands(INT * diff, INT start , INT stop , INT num_bands); @@ -115,7 +116,7 @@ static void cumSum(INT start_value, INT* diff, INT length, UCHAR *start_adress) *******************************************************************************/ INT -FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs) +FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT fsCore) { INT result; @@ -123,9 +124,9 @@ FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs) return -1; } /* Update startFreq struct */ - result = getStartFreq(fs, startFreq); + result = getStartFreq(fsCore, startFreq); - result = (result*fs/QMFbands+1)>>1; + result = (result*(fsCore>>5)+1)>>1; /* (result*fsSBR/QMFbands+1)>>1; */ return (result); @@ -141,17 +142,16 @@ FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs) Return: *******************************************************************************/ -INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT QMFbands, INT fs) +INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT fsCore) { INT result; if ( stopFreq < 0 || stopFreq > 13) return -1; - /* Uppdate stopFreq struct */ - result = getStopFreq( fs, stopFreq, QMFbands); - result = (result*fs/QMFbands+1)>>1; + result = getStopFreq(fsCore, stopFreq); + result = (result*(fsCore>>5)+1)>>1; /* (result*fsSBR/QMFbands+1)>>1; */ return (result); } /* End getSbrStopFreq */ @@ -162,69 +162,73 @@ INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT QMFbands, INT fs) ******************************************************************************* Description: - Arguments: + Arguments: fsCore - core sampling rate + Return: *******************************************************************************/ static INT -getStartFreq(INT fs, const INT start_freq) +getStartFreq(INT fsCore, const INT start_freq) { INT k0_min; - switch(fs){ - case 16000: k0_min = 24; + switch(fsCore){ + case 8000: k0_min = 24; /* (3000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 22050: k0_min = 17; + case 11025: k0_min = 17; /* (3000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 24000: k0_min = 16; + case 12000: k0_min = 16; /* (3000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 32000: k0_min = 16; + case 16000: k0_min = 16; /* (4000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 44100: k0_min = 12; + case 22050: k0_min = 12; /* (4000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 48000: k0_min = 11; + case 24000: k0_min = 11; /* (4000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 64000: k0_min = 10; + case 32000: k0_min = 10; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 88200: k0_min = 7; + case 44100: k0_min = 7; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 96000: k0_min = 7; + case 48000: k0_min = 7; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ + break; + case 96000: k0_min = 3; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ break; default: k0_min=11; /* illegal fs */ } - switch (fs) { + switch (fsCore) { - case 16000: + case 8000: { INT v_offset[]= {-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}; return (k0_min + v_offset[start_freq]); } - case 22050: + case 11025: { INT v_offset[]= {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13}; return (k0_min + v_offset[start_freq]); } - case 24000: + case 12000: { INT v_offset[]= {-5, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16}; return (k0_min + v_offset[start_freq]); } - case 32000: + case 16000: { INT v_offset[]= {-6, -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16}; return (k0_min + v_offset[start_freq]); } - case 44100: - case 48000: - case 64000: + case 22050: + case 24000: + case 32000: { INT v_offset[]= {-4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20}; return (k0_min + v_offset[start_freq]); } - case 88200: + case 44100: + case 48000: case 96000: { INT v_offset[]= {-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24}; @@ -249,13 +253,12 @@ getStartFreq(INT fs, const INT start_freq) Return: *******************************************************************************/ static INT -getStopFreq(INT fs, const INT stop_freq, const INT noChannels) +getStopFreq(INT fsCore, const INT stop_freq) { INT result,i; INT k1_min; INT v_dstop[13]; - INT *v_stop_freq = NULL; INT v_stop_freq_16[14] = {48,49,50,51,52,54,55,56,57,59,60,61,63,64}; INT v_stop_freq_22[14] = {35,37,38,40,42,44,46,48,51,53,56,58,61,64}; @@ -266,40 +269,45 @@ getStopFreq(INT fs, const INT stop_freq, const INT noChannels) INT v_stop_freq_64[14] = {20,22,24,26,29,31,34,37,41,45,49,54,59,64}; INT v_stop_freq_88[14] = {15,17,19,21,23,26,29,33,37,41,46,51,57,64}; INT v_stop_freq_96[14] = {13,15,17,19,21,24,27,31,35,39,44,50,57,64}; + INT v_stop_freq_192[14] = {7, 8,10,12,14,16,19,23,27,32,38,46,54,64}; - switch(fs){ - case 16000: k1_min = 48; + switch(fsCore){ + case 8000: k1_min = 48; v_stop_freq =v_stop_freq_16; break; - case 22050: k1_min = 35; + case 11025: k1_min = 35; v_stop_freq =v_stop_freq_22; break; - case 24000: k1_min = 32; + case 12000: k1_min = 32; v_stop_freq =v_stop_freq_24; break; - case 32000: k1_min = 32; + case 16000: k1_min = 32; v_stop_freq =v_stop_freq_32; break; - case 44100: k1_min = 23; + case 22050: k1_min = 23; v_stop_freq =v_stop_freq_44; break; - case 48000: k1_min = 21; + case 24000: k1_min = 21; v_stop_freq =v_stop_freq_48; break; - case 64000: k1_min = 20; + case 32000: k1_min = 20; v_stop_freq =v_stop_freq_64; break; - case 88200: k1_min = 15; + case 44100: k1_min = 15; v_stop_freq =v_stop_freq_88; break; - case 96000: k1_min = 13; + case 48000: k1_min = 13; v_stop_freq =v_stop_freq_96; break; + case 96000: k1_min = 7; + v_stop_freq =v_stop_freq_192; + break; default: k1_min = 21; /* illegal fs */ } - + /* if no valid core samplingrate is used this loop produces + a segfault, because v_stop_freq is not initialized */ /* Ensure increasing bandwidth */ for(i = 0; i <= 12; i++) { v_dstop[i] = v_stop_freq[i+1] - v_stop_freq[i]; @@ -322,34 +330,41 @@ getStopFreq(INT fs, const INT stop_freq, const INT noChannels) ******************************************************************************* Description: - Arguments: + Arguments: srSbr SBR sampling freqency + srCore AAC core sampling freqency + noChannels Number of QMF channels + startFreq SBR start frequency in QMF bands + stopFreq SBR start frequency in QMF bands - Return: + *k0 Output parameter + *k2 Output parameter + + Return: Error code (0 is OK) *******************************************************************************/ INT -FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, - const INT noChannels, - const INT startFreq, - const INT stopFreq, - const SR_MODE sampleRateMode, - INT *k0, - INT *k2) +FDKsbrEnc_FindStartAndStopBand( + const INT srSbr, + const INT srCore, + const INT noChannels, + const INT startFreq, + const INT stopFreq, + INT *k0, + INT *k2 + ) { /* Update startFreq struct */ - *k0 = getStartFreq(samplingFreq, startFreq); + *k0 = getStartFreq(srCore, startFreq); /* Test if start freq is outside corecoder range */ - if( ( sampleRateMode == 1 ) && - ( samplingFreq*noChannels < - 2**k0 * samplingFreq) ) { + if( srSbr*noChannels < *k0 * srCore ) { return (1); /* raise the cross-over frequency and/or lower the number of target bands per octave (or lower the sampling frequency) */ } /*Update stopFreq struct */ if ( stopFreq < 14 ) { - *k2 = getStopFreq(samplingFreq, stopFreq, noChannels); + *k2 = getStopFreq(srCore, stopFreq); } else if( stopFreq == 14 ) { *k2 = 2 * *k0; } else { @@ -364,10 +379,10 @@ FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, /* Test for invalid k0 k2 combinations */ - if ( (samplingFreq == 44100) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS44100 ) ) + if ( (srCore == 22050) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS44100 ) ) return (1); /* Number of bands exceeds valid range of MAX_FREQ_COEFFS for fs=44.1kHz */ - if ( (samplingFreq >= 48000) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS48000 ) ) + if ( (srCore >= 24000) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS48000 ) ) return (1); /* Number of bands exceeds valid range of MAX_FREQ_COEFFS for fs>=48kHz */ if ((*k2 - *k0) > MAX_FREQ_COEFFS) @@ -390,15 +405,19 @@ FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, Return: *******************************************************************************/ INT -FDKsbrEnc_UpdateFreqScale(UCHAR *v_k_master, INT *h_num_bands, - const INT k0, const INT k2, - const INT freqScale, - const INT alterScale) +FDKsbrEnc_UpdateFreqScale( + UCHAR *v_k_master, + INT *h_num_bands, + const INT k0, + const INT k2, + const INT freqScale, + const INT alterScale + ) { INT b_p_o = 0; /* bands_per_octave */ - FIXP_DBL warp = FL2FXCONST_DBL(0.0f); + FIXP_DBL warp = FL2FXCONST_DBL(0.0f); INT dk = 0; /* Internal variables */ @@ -426,7 +445,7 @@ FDKsbrEnc_UpdateFreqScale(UCHAR *v_k_master, INT *h_num_bands, warp = FL2FXCONST_DBL(1.0f/2.6f); /* 1.0/(1.3*2.0); */ - if(4*k2 >= 9*k0) /*two or more regions*/ + if(4*k2 >= 9*k0) /*two or more regions (how many times the basis band is copied)*/ { k1=2*k0; @@ -592,30 +611,31 @@ modifyBands(INT max_band_previous, INT * diff, INT length) ******************************************************************************* Description: + Arguments: Return: *******************************************************************************/ INT -FDKsbrEnc_UpdateHiRes(UCHAR *h_hires, INT *num_hires,UCHAR * v_k_master, - INT num_master , INT *xover_band, SR_MODE drOrSr, - INT noQMFChannels) +FDKsbrEnc_UpdateHiRes( + UCHAR *h_hires, + INT *num_hires, + UCHAR *v_k_master, + INT num_master, + INT *xover_band + ) { INT i; - INT divider; INT max1,max2; - /* Check if we use a Dual rate => diver=2 else 1 */ - divider = (drOrSr == DUAL_RATE) ? 2 : 1; - - if( (v_k_master[*xover_band] > (noQMFChannels/divider) ) || + if( (v_k_master[*xover_band] > 32 ) || /* v_k_master[*xover_band] > noQMFChannels(dualRate)/divider */ ( *xover_band > num_master ) ) { /* xover_band error, too big for this startFreq. Will be clipped */ /* Calculate maximum value for xover_band */ max1=0; max2=num_master; - while( (v_k_master[max1+1] < (noQMFChannels/divider)) && + while( (v_k_master[max1+1] < 32 ) && /* noQMFChannels(dualRate)/divider */ ( (max1+1) < max2) ) { max1++; diff --git a/libSBRenc/src/sbrenc_freq_sca.h b/libSBRenc/src/sbrenc_freq_sca.h index 613694a..6f2bb84 100644 --- a/libSBRenc/src/sbrenc_freq_sca.h +++ b/libSBRenc/src/sbrenc_freq_sca.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -96,34 +96,42 @@ amm-info@iis.fraunhofer.de INT -FDKsbrEnc_UpdateFreqScale(UCHAR *v_k_master, INT *h_num_bands, - const INT k0, const INT k2, - const INT freq_scale, - const INT alter_scale); +FDKsbrEnc_UpdateFreqScale( + UCHAR *v_k_master, + INT *h_num_bands, + const INT k0, + const INT k2, + const INT freq_scale, + const INT alter_scale + ); INT -FDKsbrEnc_UpdateHiRes(UCHAR *h_hires, - INT *num_hires, - UCHAR *v_k_master, - INT num_master , - INT *xover_band, - SR_MODE drOrSr, - INT noQMFChannels); +FDKsbrEnc_UpdateHiRes( + UCHAR *h_hires, + INT *num_hires, + UCHAR *v_k_master, + INT num_master, + INT *xover_band + ); -void FDKsbrEnc_UpdateLoRes(UCHAR * v_lores, - INT *num_lores, - UCHAR * v_hires, - INT num_hires); +void FDKsbrEnc_UpdateLoRes( + UCHAR *v_lores, + INT *num_lores, + UCHAR *v_hires, + INT num_hires + ); INT -FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, - const INT noChannels, - const INT startFreq, - const INT stop_freq, - const SR_MODE sampleRateMode, - INT *k0, - INT *k2); +FDKsbrEnc_FindStartAndStopBand( + const INT srSbr, + const INT srCore, + const INT noChannels, + const INT startFreq, + const INT stop_freq, + INT *k0, + INT *k2 + ); -INT FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs ); -INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT QMFbands, INT fs); +INT FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT fsCore); +INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT fsCore); #endif diff --git a/libSBRenc/src/ton_corr.cpp b/libSBRenc/src/ton_corr.cpp index 3142870..224da11 100644 --- a/libSBRenc/src/ton_corr.cpp +++ b/libSBRenc/src/ton_corr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -303,8 +303,6 @@ FDKsbrEnc_CalculateTonalityQuotas( HANDLE_SBR_TON_CORR_EST hTonCorr, /*!< H } } - FDK_ASSERT(noEstPerFrame == 2); - C_ALLOC_SCRATCH_END(realBuf, FIXP_DBL, 2*BAND_V_SIZE*NUM_V_COMBINE); C_ALLOC_SCRATCH_END(ac, ACORR_COEFS, 1); diff --git a/libSBRenc/src/ton_corr.h b/libSBRenc/src/ton_corr.h index a37eca5..8c8425c 100644 --- a/libSBRenc/src/ton_corr.h +++ b/libSBRenc/src/ton_corr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/tran_det.cpp b/libSBRenc/src/tran_det.cpp index b6cde99..1e0a59f 100644 --- a/libSBRenc/src/tran_det.cpp +++ b/libSBRenc/src/tran_det.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/tran_det.h b/libSBRenc/src/tran_det.h index 7e9a93c..95b5d2e 100644 --- a/libSBRenc/src/tran_det.h +++ b/libSBRenc/src/tran_det.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/FDK_audio.h b/libSYS/include/FDK_audio.h index 8e7041d..c8d9c19 100644 --- a/libSYS/include/FDK_audio.h +++ b/libSYS/include/FDK_audio.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -144,6 +144,12 @@ typedef enum } TRANSPORT_TYPE; +#define TT_IS_PACKET(x) \ + ( ((x) == TT_MP4_RAW) \ + || ((x) == TT_DRM) \ + || ((x) == TT_MP4_LATM_MCP0) \ + || ((x) == TT_MP4_LATM_MCP1) ) + /** * Audio Object Type definitions. */ @@ -228,28 +234,32 @@ typedef enum /** Channel Mode ( 1-7 equals MPEG channel configurations, others are arbitrary). */ typedef enum { - MODE_INVALID = -1, - MODE_UNKNOWN = 0, - MODE_1 = 1, /**< SCE */ - MODE_2 = 2, /**< CPE */ - MODE_1_2 = 3, /**< SCE,CPE */ - MODE_1_2_1 = 4, /**< SCE,CPE,SCE */ - MODE_1_2_2 = 5, /**< SCE,CPE,CPE */ - MODE_1_2_2_1 = 6, /**< SCE,CPE,CPE,LFE */ - MODE_1_2_2_2_1 = 7, /**< SCE,CPE,CPE,CPE,LFE */ + MODE_INVALID = -1, + MODE_UNKNOWN = 0, + MODE_1 = 1, /**< C */ + MODE_2 = 2, /**< L+R */ + MODE_1_2 = 3, /**< C, L+R */ + MODE_1_2_1 = 4, /**< C, L+R, Rear */ + MODE_1_2_2 = 5, /**< C, L+R, LS+RS */ + MODE_1_2_2_1 = 6, /**< C, L+R, LS+RS, LFE */ + MODE_1_2_2_2_1 = 7, /**< C, LC+RC, L+R, LS+RS, LFE */ - MODE_1_1 = 16, /**< 2 SCEs (dual mono) */ - MODE_1_1_1_1 = 17, /**< 4 SCEs */ - MODE_1_1_1_1_1_1 = 18, /**< 6 SCEs */ - MODE_1_1_1_1_1_1_1_1 = 19, /**< 8 SCEs */ - MODE_1_1_1_1_1_1_1_1_1_1_1_1 = 20, /**< 12 SCEs */ - MODE_2_2 = 21, /**< 2 CPEs */ - MODE_2_2_2 = 22, /**< 3 CPEs */ - MODE_2_2_2_2 = 23, /**< 4 CPEs */ - MODE_2_2_2_2_2_2 = 24, /**< 6 CPEs */ + MODE_1_1 = 16, /**< 2 SCEs (dual mono) */ + MODE_1_1_1_1 = 17, /**< 4 SCEs */ + MODE_1_1_1_1_1_1 = 18, /**< 6 SCEs */ + MODE_1_1_1_1_1_1_1_1 = 19, /**< 8 SCEs */ + MODE_1_1_1_1_1_1_1_1_1_1_1_1 = 20, /**< 12 SCEs */ - MODE_2_1 = 30 /**< CPE,SCE (ARIB standard) */ + MODE_2_2 = 21, /**< 2 CPEs */ + MODE_2_2_2 = 22, /**< 3 CPEs */ + MODE_2_2_2_2 = 23, /**< 4 CPEs */ + MODE_2_2_2_2_2_2 = 24, /**< 6 CPEs */ + + MODE_2_1 = 30, /**< CPE,SCE (ARIB standard B32) */ + + MODE_7_1_REAR_SURROUND = 33, /**< C, L+R, LS+RS, Lrear+Rrear, LFE */ + MODE_7_1_FRONT_CENTER = 34 /**< C, LC+RC, L+R, LS+RS, LFE */ } CHANNEL_MODE; @@ -266,6 +276,15 @@ typedef enum { ACT_TOP /* Ts */ } AUDIO_CHANNEL_TYPE; +typedef enum +{ + SIG_UNKNOWN = -1, + SIG_IMPLICIT = 0, + SIG_EXPLICIT_BW_COMPATIBLE = 1, + SIG_EXPLICIT_HIERARCHICAL = 2 + +} SBR_PS_SIGNALING; + /** * Audio Codec flags. */ @@ -328,6 +347,10 @@ typedef struct { UCHAR stereoConfigIndex; /**< USAC MPS stereo mode */ UCHAR sbrMode; /**< USAC SBR mode */ + SBR_PS_SIGNALING sbrSignaling;/**< 0: implicit signaling, 1: backwards compatible explicit signaling, 2: hierarcical explicit signaling */ + + UCHAR sbrPresent; + UCHAR psPresent; } CODER_CONFIG; /** MP4 Element IDs. */ diff --git a/libSYS/include/audio.h b/libSYS/include/audio.h index 7a827cb..6ef83ae 100644 --- a/libSYS/include/audio.h +++ b/libSYS/include/audio.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/cmdl_parser.h b/libSYS/include/cmdl_parser.h index 86f20df..266e41d 100644 --- a/libSYS/include/cmdl_parser.h +++ b/libSYS/include/cmdl_parser.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/conv_string.h b/libSYS/include/conv_string.h index 1280ae6..0409dc0 100644 --- a/libSYS/include/conv_string.h +++ b/libSYS/include/conv_string.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/genericStds.h b/libSYS/include/genericStds.h index 6adf689..fe4dc36 100644 --- a/libSYS/include/genericStds.h +++ b/libSYS/include/genericStds.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/machine_type.h b/libSYS/include/machine_type.h index d04a8e8..4745e43 100644 --- a/libSYS/include/machine_type.h +++ b/libSYS/include/machine_type.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/wav_file.h b/libSYS/include/wav_file.h index e9c4e70..2bc43b2 100644 --- a/libSYS/include/wav_file.h +++ b/libSYS/include/wav_file.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -111,16 +111,36 @@ amm-info@iis.fraunhofer.de extern "C" { #endif +#define SPEAKER_FRONT_LEFT 0x1 +#define SPEAKER_FRONT_RIGHT 0x2 +#define SPEAKER_FRONT_CENTER 0x4 +#define SPEAKER_LOW_FREQUENCY 0x8 +#define SPEAKER_BACK_LEFT 0x10 +#define SPEAKER_BACK_RIGHT 0x20 +#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 +#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 +#define SPEAKER_BACK_CENTER 0x100 +#define SPEAKER_SIDE_LEFT 0x200 +#define SPEAKER_SIDE_RIGHT 0x400 +#define SPEAKER_TOP_CENTER 0x800 +#define SPEAKER_TOP_FRONT_LEFT 0x1000 +#define SPEAKER_TOP_FRONT_CENTER 0x2000 +#define SPEAKER_TOP_FRONT_RIGHT 0x4000 +#define SPEAKER_TOP_BACK_LEFT 0x8000 +#define SPEAKER_TOP_BACK_CENTER 0x10000 +#define SPEAKER_TOP_BACK_RIGHT 0x20000 +#define SPEAKER_RESERVED 0x80000000 + /*! * RIFF WAVE file struct. * For details see WAVE file format documentation (for example at http://www.wotsit.org). */ typedef struct WAV_HEADER { - char riffType[4]; + char riffType[4]; UINT riffSize; - char waveType[4]; - char formatType[4]; + char waveType[4]; + char formatType[4]; UINT formatSize; USHORT compressionCode; USHORT numChannels; @@ -128,7 +148,7 @@ typedef struct WAV_HEADER UINT bytesPerSecond; USHORT blockAlign; USHORT bitsPerSample; - char dataType[4]; + char dataType[4]; UINT dataSize; } WAV_HEADER; @@ -136,6 +156,7 @@ struct WAV { WAV_HEADER header; FDKFILE *fp; + UINT channelMask; }; typedef struct WAV *HANDLE_WAV; diff --git a/libSYS/src/cmdl_parser.cpp b/libSYS/src/cmdl_parser.cpp index bf020ee..24ec0d5 100644 --- a/libSYS/src/cmdl_parser.cpp +++ b/libSYS/src/cmdl_parser.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -465,7 +465,7 @@ INT CheckArg(TEXTCHAR* arg, TEXTCHAR* str, UINT numArgs, TEXTCHAR type, TEXTCHAR for ( i = 0; i < _tcslen(arg); ++i ) { - if ( (type == 'd') && !_istdigit(arg[i]) && arg[i] != 'x' ) + if ( (type == 'd') && !_istdigit(arg[i]) && arg[i] != 'x' && arg[i] != '-') { #ifdef _UNICODE _ftprintf(stderr, _TEXT("\n\nError: Argument '%ls' for switch '%ls' is not a valid number.\n" ), arg, cur_str); @@ -549,7 +549,7 @@ int IIS_ProcessCmdlList(const char* param_filename, int (*pFunction)(int, TEXTCH /* Skip consecutive blanks. */ while (*line_ptr == ' ' && line_ptr < line+CMDL_MAX_STRLEN) line_ptr++; - /* Assign argument. TODO: maybe handle quotes */ + /* Assign argument. */ argv_ptr[argc] = line_ptr; /* Get pointer to next blank. */ line_ptr = (char*)FDKstrchr(line_ptr, ' '); diff --git a/libSYS/src/conv_string.cpp b/libSYS/src/conv_string.cpp index f730337..28cbc83 100644 --- a/libSYS/src/conv_string.cpp +++ b/libSYS/src/conv_string.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/genericStds.cpp b/libSYS/src/genericStds.cpp index 6bc4bd2..f0199fb 100644 --- a/libSYS/src/genericStds.cpp +++ b/libSYS/src/genericStds.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -98,8 +98,8 @@ amm-info@iis.fraunhofer.de /* library info */ #define SYS_LIB_VL0 1 -#define SYS_LIB_VL1 2 -#define SYS_LIB_VL2 2 +#define SYS_LIB_VL1 3 +#define SYS_LIB_VL2 4 #define SYS_LIB_TITLE "System Integration Library" #define SYS_LIB_BUILD_DATE __DATE__ #define SYS_LIB_BUILD_TIME __TIME__ diff --git a/libSYS/src/linux/FDK_stackload_linux.cpp b/libSYS/src/linux/FDK_stackload_linux.cpp index 549d99d..82fa9ab 100644 --- a/libSYS/src/linux/FDK_stackload_linux.cpp +++ b/libSYS/src/linux/FDK_stackload_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/audio_linux.cpp b/libSYS/src/linux/audio_linux.cpp index d99f876..835b27b 100644 --- a/libSYS/src/linux/audio_linux.cpp +++ b/libSYS/src/linux/audio_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/coresup_linux.cpp b/libSYS/src/linux/coresup_linux.cpp index 49a042b..9e6fa85 100644 --- a/libSYS/src/linux/coresup_linux.cpp +++ b/libSYS/src/linux/coresup_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/genericStds_linux.cpp b/libSYS/src/linux/genericStds_linux.cpp index f28def7..da375c0 100644 --- a/libSYS/src/linux/genericStds_linux.cpp +++ b/libSYS/src/linux/genericStds_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/uart_linux.cpp b/libSYS/src/linux/uart_linux.cpp index 31e0419..dee5694 100644 --- a/libSYS/src/linux/uart_linux.cpp +++ b/libSYS/src/linux/uart_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/mips/genericStds_mips.cpp b/libSYS/src/mips/genericStds_mips.cpp index 98a30c3..e08ec48 100644 --- a/libSYS/src/mips/genericStds_mips.cpp +++ b/libSYS/src/mips/genericStds_mips.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/wav_file.cpp b/libSYS/src/wav_file.cpp index 8764be9..58bcfaa 100644 --- a/libSYS/src/wav_file.cpp +++ b/libSYS/src/wav_file.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -174,7 +174,6 @@ INT WAV_InputOpen (HANDLE_WAV *pWav, const char *filename) 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }; USHORT extraFormatBytes, validBitsPerSample; - UINT channelMask; UCHAR guid[16]; INT i; @@ -184,7 +183,7 @@ INT WAV_InputOpen (HANDLE_WAV *pWav, const char *filename) if (extraFormatBytes >= 22) { FDKfread_EL(&(validBitsPerSample), 2, 1, wav->fp); - FDKfread_EL(&(channelMask), 4, 1, wav->fp); + FDKfread_EL(&(wav->channelMask), 4, 1, wav->fp); FDKfread_EL(&(guid), 16, 1, wav->fp); /* check for PCM GUID */ @@ -228,12 +227,12 @@ INT WAV_InputOpen (HANDLE_WAV *pWav, const char *filename) /* Error path */ error: - if (wav->fp) { - FDKfclose(wav->fp); - wav->fp = NULL; - } if (wav) { + if (wav->fp) { + FDKfclose(wav->fp); + wav->fp = NULL; + } FDKfree(wav); } @@ -388,6 +387,11 @@ INT WAV_OutputOpen(HANDLE_WAV *pWav, const char *outputFilename, INT sampleRate, HANDLE_WAV wav = (HANDLE_WAV)FDKcalloc(1, sizeof(struct WAV)); UINT size = 0; + if (wav == NULL) { + FDKprintfErr("WAV_OutputOpen(): Unable to allocate WAV struct.\n"); + goto bail; + } + if (bitsPerSample != 16 && bitsPerSample != 24 && bitsPerSample != 32) { FDKprintfErr("WAV_OutputOpen(): Invalid argument (bitsPerSample).\n"); @@ -433,10 +437,12 @@ INT WAV_OutputOpen(HANDLE_WAV *pWav, const char *outputFilename, INT sampleRate, return 0; bail: - if (wav->fp) - FDKfclose(wav->fp); - if (wav) + if (wav) { + if (wav->fp) { + FDKfclose(wav->fp); + } FDKfree(wav); + } pWav = NULL;