From nicholas at mxc.ca Mon May 25 00:30:01 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 05:30:01 -0000 Subject: [llvm-commits] [llvm] r72377 - /llvm/trunk/tools/bugpoint/CrashDebugger.cpp Message-ID: <200905250530.n4P5U1Je017300@zion.cs.uiuc.edu> Author: nicholas Date: Mon May 25 00:30:00 2009 New Revision: 72377 URL: http://llvm.org/viewvc/llvm-project?rev=72377&view=rev Log: Add a bisection step on the list of instructions before doing the linear simplification. It's not clear to me whether this can replace the first of the linear instruction simplification stages or not, so I left it in. Modified: llvm/trunk/tools/bugpoint/CrashDebugger.cpp Modified: llvm/trunk/tools/bugpoint/CrashDebugger.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/CrashDebugger.cpp?rev=72377&r1=72376&r2=72377&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/CrashDebugger.cpp (original) +++ llvm/trunk/tools/bugpoint/CrashDebugger.cpp Mon May 25 00:30:00 2009 @@ -342,6 +342,82 @@ return false; } +namespace { + /// ReduceCrashingInstructions reducer - This works by removing the specified + /// non-terminator instructions and replacing them with undef. + /// + class ReduceCrashingInstructions : public ListReducer { + BugDriver &BD; + bool (*TestFn)(BugDriver &, Module *); + public: + ReduceCrashingInstructions(BugDriver &bd, bool (*testFn)(BugDriver &, + Module *)) + : BD(bd), TestFn(testFn) {} + + virtual TestResult doTest(std::vector &Prefix, + std::vector &Kept) { + if (!Kept.empty() && TestInsts(Kept)) + return KeepSuffix; + if (!Prefix.empty() && TestInsts(Prefix)) + return KeepPrefix; + return NoFailure; + } + + bool TestInsts(std::vector &Prefix); + }; +} + +bool ReduceCrashingInstructions::TestInsts(std::vector + &Insts) { + // Clone the program to try hacking it apart... + DenseMap ValueMap; + Module *M = CloneModule(BD.getProgram(), ValueMap); + + // Convert list to set for fast lookup... + SmallPtrSet Instructions; + for (unsigned i = 0, e = Insts.size(); i != e; ++i) { + assert(!isa(Insts[i])); + Instructions.insert(cast(ValueMap[Insts[i]])); + } + + std::cout << "Checking for crash with only " << Instructions.size(); + if (Instructions.size() == 1) + std::cout << " instruction: "; + else + std::cout << " instructions: "; + + for (Module::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) + for (Function::iterator FI = MI->begin(), FE = MI->end(); FI != FE; ++FI) + for (BasicBlock::iterator I = FI->begin(), E = FI->end(); I != E;) { + Instruction *Inst = I++; + if (!Instructions.count(Inst) && !isa(Inst)) { + if (Inst->getType() != Type::VoidTy) + Inst->replaceAllUsesWith(UndefValue::get(Inst->getType())); + Inst->eraseFromParent(); + } + } + + // Verify that this is still valid. + PassManager Passes; + Passes.add(createVerifierPass()); + Passes.run(*M); + + // Try running on the hacked up program... + if (TestFn(BD, M)) { + BD.setNewProgram(M); // It crashed, keep the trimmed version... + + // Make sure to use instruction pointers that point into the now-current + // module, and that they don't include any deleted blocks. + Insts.clear(); + for (SmallPtrSet::const_iterator I = Instructions.begin(), + E = Instructions.end(); I != E; ++I) + Insts.push_back(*I); + return true; + } + delete M; // It didn't crash, try something else. + return false; +} + /// DebugACrash - Given a predicate that determines whether a component crashes /// on a program, try to destructively reduce the program while still keeping /// the predicate true. @@ -432,6 +508,22 @@ BD.EmitProgressBitcode("reduced-blocks"); } + // Attempt to delete instructions using bisection. This should help out nasty + // cases with large basic blocks where the problem is at one end. + if (!BugpointIsInterrupted) { + std::vector Insts; + for (Module::const_iterator MI = BD.getProgram()->begin(), + ME = BD.getProgram()->end(); MI != ME; ++MI) + for (Function::const_iterator FI = MI->begin(), FE = MI->end(); FI != FE; + ++FI) + for (BasicBlock::const_iterator I = FI->begin(), E = FI->end(); + I != E; ++I) + if (!isa(I)) + Insts.push_back(I); + + ReduceCrashingInstructions(BD, TestFn).reduceList(Insts); + } + // FIXME: This should use the list reducer to converge faster by deleting // larger chunks of instructions at a time! unsigned Simplification = 2; From eli.friedman at gmail.com Mon May 25 00:30:50 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Sun, 24 May 2009 22:30:50 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1A1FBE.5090902@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> Message-ID: On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: > This pass eliminates dead calls to __cxa_guard_acquire and > __cxa_guard_release. Those two functions are defined by the Itanium ABI as > part of the thread-safe one-time construction ABI for static variables in > functions. > > For example, this program: > > ?struct X { > ? ?X(int) {} > ?}; > > ?void foo() { > ? ?static X x(10); > ?} > > would have calls to cxa_guard_* in foo, and this pass detects that there is > no real work being done between the guards and therefore it is safe to > eliminate them. This isn't completely a question about your patch, but why are we loading and storing an i8 from an i64 global? -Eli From eli.friedman at gmail.com Mon May 25 00:45:27 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Sun, 24 May 2009 22:45:27 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> Message-ID: On Sun, May 24, 2009 at 10:30 PM, Eli Friedman wrote: > This isn't completely a question about your patch, but why are we > loading and storing an i8 from an i64 global? Never mind; I didn't read the patch carefully enough. -Eli From nicholas at mxc.ca Mon May 25 00:46:26 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Sun, 24 May 2009 22:46:26 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> Message-ID: <4A1A30B2.4080207@mxc.ca> Eli Friedman wrote: > On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >> This pass eliminates dead calls to __cxa_guard_acquire and >> __cxa_guard_release. Those two functions are defined by the Itanium ABI as >> part of the thread-safe one-time construction ABI for static variables in >> functions. >> >> For example, this program: >> >> struct X { >> X(int) {} >> }; >> >> void foo() { >> static X x(10); >> } >> >> would have calls to cxa_guard_* in foo, and this pass detects that there is >> no real work being done between the guards and therefore it is safe to >> eliminate them. > > This isn't completely a question about your patch, but why are we > loading and storing an i8 from an i64 global? Because the ABI says so. 1. "The size of the guard variable is 64 bits. The first byte (i.e. the byte at the address of the full variable) shall contain the value 0 prior to initialization of the associated variable, and 1 after initialization is complete. Usage of the other bytes of the guard variable is implementation-defined." -- http://www.codesourcery.com/public/cxx-abi/abi.html#guards 2. "extern "C" void __cxa_guard_release ( __int64_t *guard_object ); "Sets the first byte of the guard object to a non-zero value. ..." -- http://www.codesourcery.com/public/cxx-abi/abi.html#once-ctor Nick From eli.friedman at gmail.com Mon May 25 01:15:29 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Sun, 24 May 2009 23:15:29 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1A1FBE.5090902@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> Message-ID: On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: > However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an > example of what happens after this optimization is applied on the above > program. We may decide that PR4261 is too hard to fix in general and just > add some extra logic to this pass, but I'd rather have this committed for a > start. Couldn't you just change AcquireRet from a constant 1 to a constant 0? If it's safe to remove the guard, I don't see how the chosen path could make a difference. -Eli From nicholas at mxc.ca Mon May 25 01:25:10 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Sun, 24 May 2009 23:25:10 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> Message-ID: <4A1A39C6.8080302@mxc.ca> Eli Friedman wrote: > On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >> example of what happens after this optimization is applied on the above >> program. We may decide that PR4261 is too hard to fix in general and just >> add some extra logic to this pass, but I'd rather have this committed for a >> start. > > Couldn't you just change AcquireRet from a constant 1 to a constant 0? > If it's safe to remove the guard, I don't see how the chosen path > could make a difference. Release has to run. It has the visible effect of changing the guard variable to a 1. Nowhere in this pass do we prove those two calls are the only places looking at the guard variable. Visible to who? Well, I'm not sure. There is a "__cxa_guard_abort" that could be used. I'm not sure what C++ input you would need to create in order to make it depend on this and be broken by the change, but I'm opting for the relatively safe transform. ALSO, AcquireRet is used twice, once when we've decided to delete the guards but also earlier when following the flow from acquire() to release(). If we used the wrong value there we would flow directly into the "ret void" even if there were interesting code being guarded. (Note that currently "ret void" means that we didn't find the release() call and therefore wouldn't eliminate it anyways.) Nick From nicholas at mxc.ca Mon May 25 01:29:57 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 06:29:57 -0000 Subject: [llvm-commits] [llvm] r72378 - /llvm/trunk/tools/bugpoint/CrashDebugger.cpp Message-ID: <200905250629.n4P6Tvk7020317@zion.cs.uiuc.edu> Author: nicholas Date: Mon May 25 01:29:56 2009 New Revision: 72378 URL: http://llvm.org/viewvc/llvm-project?rev=72378&view=rev Log: Fix the crash debugger to actually bisect globals once it's determined that it can't just eliminate all global initializers. Modified: llvm/trunk/tools/bugpoint/CrashDebugger.cpp Modified: llvm/trunk/tools/bugpoint/CrashDebugger.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/CrashDebugger.cpp?rev=72378&r1=72377&r2=72378&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/CrashDebugger.cpp (original) +++ llvm/trunk/tools/bugpoint/CrashDebugger.cpp Mon May 25 01:29:56 2009 @@ -150,7 +150,7 @@ // playing with... for (Module::global_iterator I = M->global_begin(), E = M->global_end(); I != E; ++I) - if (I->hasInitializer()) { + if (I->hasInitializer() && !GVSet.count(I)) { I->setInitializer(0); I->setLinkage(GlobalValue::ExternalLinkage); } From eli.friedman at gmail.com Mon May 25 01:54:04 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Sun, 24 May 2009 23:54:04 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1A39C6.8080302@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> Message-ID: On Sun, May 24, 2009 at 11:25 PM, Nick Lewycky wrote: > Eli Friedman wrote: >> On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >>> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >>> example of what happens after this optimization is applied on the above >>> program. We may decide that PR4261 is too hard to fix in general and just >>> add some extra logic to this pass, but I'd rather have this committed for a >>> start. >> >> Couldn't you just change AcquireRet from a constant 1 to a constant 0? >> ?If it's safe to remove the guard, I don't see how the chosen path >> could make a difference. > > Release has to run. It has the visible effect of changing the guard > variable to a 1. Nowhere in this pass do we prove those two calls are > the only places looking at the guard variable. Assuming it's actually a guard, nothing besides the guard should care whether the guard variable initialized or not in the current call. The pass as written already makes assumptions that agree with that: for example, it doesn't bother to check for instructions with side-effects after the call to __cxa_guard_release. > Visible to who? Well, I'm not sure. There is a "__cxa_guard_abort" that > could be used. I'm not sure what C++ input you would need to create in > order to make it depend on this and be broken by the change, but I'm > opting for the relatively safe transform. __cxa_guard_abort only gets triggered if the constructor throws an exception, which shouldn't be possible here. > ALSO, AcquireRet is used twice, once when we've decided to delete the > guards but also earlier when following the flow from acquire() to > release(). If we used the wrong value there we would flow directly into > the "ret void" even if there were interesting code being guarded. (Note > that currently "ret void" means that we didn't find the release() call > and therefore wouldn't eliminate it anyways.) Ah, oops, I wasn't suggesting to change that use. -Eli From nicholas at mxc.ca Mon May 25 02:15:02 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 00:15:02 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> Message-ID: <4A1A4576.4010204@mxc.ca> Eli Friedman wrote: > On Sun, May 24, 2009 at 11:25 PM, Nick Lewycky wrote: >> Eli Friedman wrote: >>> On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >>>> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >>>> example of what happens after this optimization is applied on the above >>>> program. We may decide that PR4261 is too hard to fix in general and just >>>> add some extra logic to this pass, but I'd rather have this committed for a >>>> start. >>> Couldn't you just change AcquireRet from a constant 1 to a constant 0? >>> If it's safe to remove the guard, I don't see how the chosen path >>> could make a difference. >> Release has to run. It has the visible effect of changing the guard >> variable to a 1. Nowhere in this pass do we prove those two calls are >> the only places looking at the guard variable. > > Assuming it's actually a guard, nothing besides the guard should care > whether the guard variable initialized or not in the current call. The > pass as written already makes assumptions that agree with that: for > example, it doesn't bother to check for instructions with side-effects > after the call to __cxa_guard_release. > >> Visible to who? Well, I'm not sure. There is a "__cxa_guard_abort" that >> could be used. I'm not sure what C++ input you would need to create in >> order to make it depend on this and be broken by the change, but I'm >> opting for the relatively safe transform. > > __cxa_guard_abort only gets triggered if the constructor throws an > exception, which shouldn't be possible here. Okay then! I'm not going to bother reattaching a new patch, the only change is this new implementation: void CXAGuardElimination::removeGuardPair(CallInst *A, CallInst *R) { A->replaceAllUsesWith(AcquireRet); A->eraseFromParent(); R->eraseFromParent(); } It still replaces the call to acquire with 1 but because there's no store on the release the whole function does in fact melt away. Which brings me to my next point: this patch needs some testing. This transform doesn't trigger on llvm-test but does pass an llvm-gcc bootstrap. I'd appreciate it if people who have code that uses this would try it out. Nick >> ALSO, AcquireRet is used twice, once when we've decided to delete the >> guards but also earlier when following the flow from acquire() to >> release(). If we used the wrong value there we would flow directly into >> the "ret void" even if there were interesting code being guarded. (Note >> that currently "ret void" means that we didn't find the release() call >> and therefore wouldn't eliminate it anyways.) > > Ah, oops, I wasn't suggesting to change that use. > > -Eli > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From baldrick at free.fr Mon May 25 02:15:13 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 25 May 2009 09:15:13 +0200 Subject: [llvm-commits] [llvm] r72361 - /llvm/trunk/tools/bugpoint/CrashDebugger.cpp In-Reply-To: <200905240931.n4O9VZZi016732@zion.cs.uiuc.edu> References: <200905240931.n4O9VZZi016732@zion.cs.uiuc.edu> Message-ID: <4A1A4581.8070105@free.fr> Hi Edwin, > Add -disable-global-remove option to bugpoint. > Sometimes when bugpointing a crash the bugpoint-reduced-simplified.bc reproduces > a totally different bug than the original one ("GV doesn't have initializer"). > Although its useful to report that bug too, I need a way to reduce the original > bug, hence I introduced -disable-global-remove. it sounds like a bug in bugpoint. Wouldn't it be better to fix bugpoint instead? Ciao, Duncan. From edwintorok at gmail.com Mon May 25 02:18:50 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Mon, 25 May 2009 10:18:50 +0300 Subject: [llvm-commits] [llvm] r72361 - /llvm/trunk/tools/bugpoint/CrashDebugger.cpp In-Reply-To: <4A1A4581.8070105@free.fr> References: <200905240931.n4O9VZZi016732@zion.cs.uiuc.edu> <4A1A4581.8070105@free.fr> Message-ID: <4A1A465A.1050300@gmail.com> On 2009-05-25 10:15, Duncan Sands wrote: > Hi Edwin, > > >> Add -disable-global-remove option to bugpoint. >> Sometimes when bugpointing a crash the bugpoint-reduced-simplified.bc reproduces >> a totally different bug than the original one ("GV doesn't have initializer"). >> Although its useful to report that bug too, I need a way to reduce the original >> bug, hence I introduced -disable-global-remove. >> > > it sounds like a bug in bugpoint. Wouldn't it be better to fix bugpoint > instead? > Yes, I opened PR4255. However I don't think it is harmful to keep -disable-global-remove in bugpoint even after the bug is fixed, there already are flags like disable-loop-extraction, disable-simplifycfg. Best regards, --Edwin From baldrick at free.fr Mon May 25 02:22:49 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 25 May 2009 09:22:49 +0200 Subject: [llvm-commits] [llvm] r72325 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp In-Reply-To: References: <200905231235.n4NCZgvT018589@zion.cs.uiuc.edu> <4A19A74A.80801@free.fr> Message-ID: <4A1A4749.1020903@free.fr> Hi Eli, >>> + // The legalize process is inherently a bottom-up recursive process (users >>> + // legalize their uses before themselves). >> can you do this non-recursively? The type legalizer is not recursive... > > Possibly; I took the current approach from the DAG legalizer. Taking > a quick look, the type legalizer's logic to deal with nodes being > inserted during legalization seems complicated enough that I wouldn't > want to duplicate it... perhaps some sort of general legalizer base > class would be appropriate? I think Chris wants to redesign LegalizeDAG. Hopefully at that point all the different legalizers will be able to share some generic infrastructure. I suspect the type legalizer could be simplified a lot by using an SDAG equivalent of CallbackVH. >> I don't understand what this routine is doing. Got an example? > > I added a comment in r72374. Thanks. Ciao, Duncan. From baldrick at free.fr Mon May 25 02:58:35 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 25 May 2009 09:58:35 +0200 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1A1FBE.5090902@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> Message-ID: <4A1A4FAB.2050404@free.fr> Hi Nick, > + CallInst *A = dyn_cast(I); > + if (!A) continue; > + > + // TODO: __cxa_guard_acquire returns a value, then makes a conditional > + // branch off of it. We need to handle this. the acquire function may be being passed as a parameter to some other function rather than being called. > + if (I->mayReadFromMemory() || I->mayWriteToMemory()) Maybe you should use mayHaveSideEffects rather than mayWriteToMemory, since a "const" function can still throw an exception. On the other hand, since such a function doesn't read or write memory it shouldn't need to be wrapped in guards anyway. > +BasicBlock *CXAGuardElimination::getUniqueSuccessor(TerminatorInst *TI, > + CallInst *Acquire) { > + if (TI->getNumSuccessors() == 1) > + return TI->getSuccessor(0); What about this: bb1: acquire br bbr bb2: acquire br bbr bbr: release Aren't you going to eliminate the first acquire and the release, but not the second acquire? > + addPass(PM, createCXAGuardEliminationPass()); // Remove __cxa_guard_* calls. Are you going to add this to llvm-gcc too? > + This pass deletes dead calls to __cxa_guard_acquire and __cxa_guard_release > + which are part of the Itanium C++ ABI. T hese are used to prevent a function T hese -> These Ciao, Duncan. From baldrick at free.fr Mon May 25 04:44:12 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 25 May 2009 09:44:12 -0000 Subject: [llvm-commits] [klee] r72380 - /klee/trunk/include/klee/Statistic.h Message-ID: <200905250944.n4P9iPqY007261@zion.cs.uiuc.edu> Author: baldrick Date: Mon May 25 04:43:40 2009 New Revision: 72380 URL: http://llvm.org/viewvc/llvm-project?rev=72380&view=rev Log: Add include for uint64_t, needed when building with gcc-4.4. Modified: klee/trunk/include/klee/Statistic.h Modified: klee/trunk/include/klee/Statistic.h URL: http://llvm.org/viewvc/llvm-project/klee/trunk/include/klee/Statistic.h?rev=72380&r1=72379&r2=72380&view=diff ============================================================================== --- klee/trunk/include/klee/Statistic.h (original) +++ klee/trunk/include/klee/Statistic.h Mon May 25 04:43:40 2009 @@ -10,6 +10,7 @@ #ifndef KLEE_STATISTIC_H #define KLEE_STATISTIC_H +#include "llvm/Support/DataTypes.h" #include namespace klee { From baldrick at free.fr Mon May 25 04:51:13 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 25 May 2009 09:51:13 -0000 Subject: [llvm-commits] [klee] r72381 - in /klee/trunk/lib/Solver: STPBuilder.cpp Solver.cpp Message-ID: <200905250951.n4P9pE1K007581@zion.cs.uiuc.edu> Author: baldrick Date: Mon May 25 04:50:55 2009 New Revision: 72381 URL: http://llvm.org/viewvc/llvm-project?rev=72381&view=rev Log: Add includes to get sprintf (STPBuilder) and fprintf, stderr etc (Solver) when compiling with gcc-4.4. Modified: klee/trunk/lib/Solver/STPBuilder.cpp klee/trunk/lib/Solver/Solver.cpp Modified: klee/trunk/lib/Solver/STPBuilder.cpp URL: http://llvm.org/viewvc/llvm-project/klee/trunk/lib/Solver/STPBuilder.cpp?rev=72381&r1=72380&r2=72381&view=diff ============================================================================== --- klee/trunk/lib/Solver/STPBuilder.cpp (original) +++ klee/trunk/lib/Solver/STPBuilder.cpp Mon May 25 04:50:55 2009 @@ -18,6 +18,8 @@ #include "llvm/Support/CommandLine.h" +#include + #define vc_bvBoolExtract IAMTHESPAWNOFSATAN // unclear return #define vc_bvLeftShiftExpr IAMTHESPAWNOFSATAN Modified: klee/trunk/lib/Solver/Solver.cpp URL: http://llvm.org/viewvc/llvm-project/klee/trunk/lib/Solver/Solver.cpp?rev=72381&r1=72380&r2=72381&view=diff ============================================================================== --- klee/trunk/lib/Solver/Solver.cpp (original) +++ klee/trunk/lib/Solver/Solver.cpp Mon May 25 04:50:55 2009 @@ -24,6 +24,7 @@ #define vc_bvBoolExtract IAMTHESPAWNOFSATAN #include +#include #include #include From howard0su at gmail.com Mon May 25 07:58:50 2009 From: howard0su at gmail.com (Howard Su) Date: Mon, 25 May 2009 20:58:50 +0800 Subject: [llvm-commits] [llvm] r72366 - in /llvm/trunk: include/llvm/Analysis/ScalarEvolutionExpander.h lib/Analysis/ScalarEvolutionExpander.cpp test/Transforms/IndVarSimplify/addrec-gep.ll test/Transforms/IndVarSimplify/gep-with-mul-base.ll In-Reply-To: <200905241806.n4OI6WdF024693@zion.cs.uiuc.edu> References: <200905241806.n4OI6WdF024693@zion.cs.uiuc.edu> Message-ID: SCEVHandle RestArray[1] = Rest; should change to SCEVHandle RestArray[1] = {Rest}; otherwise MSVC will complain this. On Mon, May 25, 2009 at 2:06 AM, Dan Gohman wrote: > Author: djg > Date: Sun May 24 13:06:31 2009 > New Revision: 72366 > > URL: http://llvm.org/viewvc/llvm-project?rev=72366&view=rev > Log: > Generalize SCEVExpander::visitAddRecExpr's GEP persuit, and avoid > sending SCEVUnknowns to expandAddToGEP. This avoids the need for > expandAddToGEP to bend the rules and peek into SCEVUnknown > expressions. > > Factor out the code for testing whether a SCEV can be factored by > a constant for use in a GEP index. This allows it to handle > SCEVAddRecExprs, by recursing. > > As a result, SCEVExpander can now put more things in GEP indices, > so it emits fewer explicit mul instructions. > > Added: > llvm/trunk/test/Transforms/IndVarSimplify/addrec-gep.ll > Modified: > llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h > llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp > llvm/trunk/test/Transforms/IndVarSimplify/gep-with-mul-base.ll > > Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h?rev=72366&r1=72365&r2=72366&view=diff > > > ============================================================================== > --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h (original) > +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h Sun May 24 > 13:06:31 2009 > @@ -110,8 +110,8 @@ > private: > /// expandAddToGEP - Expand a SCEVAddExpr with a pointer type into a > GEP > /// instead of using ptrtoint+arithmetic+inttoptr. > - Value *expandAddToGEP(const SCEVAddExpr *S, const PointerType *PTy, > - const Type *Ty, Value *V); > + Value *expandAddToGEP(const SCEVHandle *op_begin, const SCEVHandle > *op_end, > + const PointerType *PTy, const Type *Ty, Value > *V); > > Value *expand(const SCEV *S); > > > Modified: llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp?rev=72366&r1=72365&r2=72366&view=diff > > > ============================================================================== > --- llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp (original) > +++ llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp Sun May 24 13:06:31 > 2009 > @@ -144,17 +144,89 @@ > return BO; > } > > +/// FactorOutConstant - Test if S is evenly divisible by Factor, using > signed > +/// division. If so, update S with Factor divided out and return true. > +/// TODO: When ScalarEvolution gets a SCEVSDivExpr, this can be made > +/// unnecessary; in its place, just signed-divide Ops[i] by the scale and > +/// check to see if the divide was folded. > +static bool FactorOutConstant(SCEVHandle &S, > + const APInt &Factor, > + ScalarEvolution &SE) { > + // Everything is divisible by one. > + if (Factor == 1) > + return true; > + > + // For a Constant, check for a multiple of the given factor. > + if (const SCEVConstant *C = dyn_cast(S)) > + if (!C->getValue()->getValue().srem(Factor)) { > + ConstantInt *CI = > + ConstantInt::get(C->getValue()->getValue().sdiv(Factor)); > + SCEVHandle Div = SE.getConstant(CI); > + S = Div; > + return true; > + } > + > + // In a Mul, check if there is a constant operand which is a multiple > + // of the given factor. > + if (const SCEVMulExpr *M = dyn_cast(S)) > + if (const SCEVConstant *C = dyn_cast(M->getOperand(0))) > + if (!C->getValue()->getValue().srem(Factor)) { > + std::vector NewMulOps(M->getOperands()); > + NewMulOps[0] = > + SE.getConstant(C->getValue()->getValue().sdiv(Factor)); > + S = SE.getMulExpr(NewMulOps); > + return true; > + } > + > + // In an AddRec, check if both start and step are divisible. > + if (const SCEVAddRecExpr *A = dyn_cast(S)) { > + SCEVHandle Start = A->getStart(); > + if (!FactorOutConstant(Start, Factor, SE)) > + return false; > + SCEVHandle Step = A->getStepRecurrence(SE); > + if (!FactorOutConstant(Step, Factor, SE)) > + return false; > + S = SE.getAddRecExpr(Start, Step, A->getLoop()); > + return true; > + } > + > + return false; > +} > + > /// expandAddToGEP - Expand a SCEVAddExpr with a pointer type into a GEP > -/// instead of using ptrtoint+arithmetic+inttoptr. > -Value *SCEVExpander::expandAddToGEP(const SCEVAddExpr *S, > +/// instead of using ptrtoint+arithmetic+inttoptr. This helps > +/// BasicAliasAnalysis analyze the result. However, it suffers from the > +/// underlying bug described in PR2831. Addition in LLVM currently always > +/// has two's complement wrapping guaranteed. However, the semantics for > +/// getelementptr overflow are ambiguous. In the common case though, this > +/// expansion gets used when a GEP in the original code has been converted > +/// into integer arithmetic, in which case the resulting code will be no > +/// more undefined than it was originally. > +/// > +/// Design note: It might seem desirable for this function to be more > +/// loop-aware. If some of the indices are loop-invariant while others > +/// aren't, it might seem desirable to emit multiple GEPs, keeping the > +/// loop-invariant portions of the overall computation outside the loop. > +/// However, there are a few reasons this is not done here. Hoisting > simple > +/// arithmetic is a low-level optimization that often isn't very > +/// important until late in the optimization process. In fact, passes > +/// like InstructionCombining will combine GEPs, even if it means > +/// pushing loop-invariant computation down into loops, so even if the > +/// GEPs were split here, the work would quickly be undone. The > +/// LoopStrengthReduction pass, which is usually run quite late (and > +/// after the last InstructionCombining pass), takes care of hoisting > +/// loop-invariant portions of expressions, after considering what > +/// can be folded using target addressing modes. > +/// > +Value *SCEVExpander::expandAddToGEP(const SCEVHandle *op_begin, > + const SCEVHandle *op_end, > const PointerType *PTy, > const Type *Ty, > Value *V) { > const Type *ElTy = PTy->getElementType(); > SmallVector GepIndices; > - std::vector Ops = S->getOperands(); > + std::vector Ops(op_begin, op_end); > bool AnyNonZeroIndices = false; > - Ops.pop_back(); > > // Decend down the pointer's type and attempt to convert the other > // operands into GEP indices, at each level. The first index in a GEP > @@ -167,45 +239,27 @@ > std::vector NewOps; > std::vector ScaledOps; > for (unsigned i = 0, e = Ops.size(); i != e; ++i) { > + // Split AddRecs up into parts as either of the parts may be usable > + // without the other. > + if (const SCEVAddRecExpr *A = dyn_cast(Ops[i])) > + if (!A->getStart()->isZero()) { > + SCEVHandle Start = A->getStart(); > + Ops.push_back(SE.getAddRecExpr(SE.getIntegerSCEV(0, > A->getType()), > + A->getStepRecurrence(SE), > + A->getLoop())); > + Ops[i] = Start; > + ++e; > + } > + // If the scale size is not 0, attempt to factor out a scale. > if (ElSize != 0) { > - // For a Constant, check for a multiple of the pointer type's > - // scale size. > - if (const SCEVConstant *C = dyn_cast(Ops[i])) > - if (!C->getValue()->getValue().srem(ElSize)) { > - ConstantInt *CI = > - ConstantInt::get(C->getValue()->getValue().sdiv(ElSize)); > - SCEVHandle Div = SE.getConstant(CI); > - ScaledOps.push_back(Div); > - continue; > - } > - // In a Mul, check if there is a constant operand which is a > multiple > - // of the pointer type's scale size. > - if (const SCEVMulExpr *M = dyn_cast(Ops[i])) > - if (const SCEVConstant *C = > dyn_cast(M->getOperand(0))) > - if (!C->getValue()->getValue().srem(ElSize)) { > - std::vector NewMulOps(M->getOperands()); > - NewMulOps[0] = > - SE.getConstant(C->getValue()->getValue().sdiv(ElSize)); > - ScaledOps.push_back(SE.getMulExpr(NewMulOps)); > - continue; > - } > - // In an Unknown, check if the underlying value is a Mul by a > constant > - // which is equal to the pointer type's scale size. > - if (const SCEVUnknown *U = dyn_cast(Ops[i])) > - if (BinaryOperator *BO = > dyn_cast(U->getValue())) > - if (BO->getOpcode() == Instruction::Mul) > - if (ConstantInt *CI = > dyn_cast(BO->getOperand(1))) > - if (CI->getValue() == ElSize) { > - ScaledOps.push_back(SE.getUnknown(BO->getOperand(0))); > - continue; > - } > - // If the pointer type's scale size is 1, no scaling is necessary > - // and any value can be used. > - if (ElSize == 1) { > - ScaledOps.push_back(Ops[i]); > + SCEVHandle Op = Ops[i]; > + if (FactorOutConstant(Op, ElSize, SE)) { > + ScaledOps.push_back(Op); // Op now has ElSize factored out. > continue; > } > } > + // If the operand was not divisible, add it to the list of operands > + // we'll scan next iteration. > NewOps.push_back(Ops[i]); > } > Ops = NewOps; > @@ -292,17 +346,14 @@ > const Type *Ty = SE.getEffectiveSCEVType(S->getType()); > Value *V = expand(S->getOperand(S->getNumOperands()-1)); > > - // Turn things like ptrtoint+arithmetic+inttoptr into GEP. This helps > - // BasicAliasAnalysis analyze the result. However, it suffers from the > - // underlying bug described in PR2831. Addition in LLVM currently always > - // has two's complement wrapping guaranteed. However, the semantics for > - // getelementptr overflow are ambiguous. In the common case though, this > - // expansion gets used when a GEP in the original code has been > converted > - // into integer arithmetic, in which case the resulting code will be no > - // more undefined than it was originally. > + // Turn things like ptrtoint+arithmetic+inttoptr into GEP. See the > + // comments on expandAddToGEP for details. > if (SE.TD ) > - if (const PointerType *PTy = dyn_cast(V->getType())) > - return expandAddToGEP(S, PTy, Ty, V); > + if (const PointerType *PTy = dyn_cast(V->getType())) { > + const std::vector &Ops = S->getOperands(); > + return expandAddToGEP(Ops.data(), Ops.data() + Ops.size() - 1, > + PTy, Ty, V); > + } > > V = InsertNoopCastOfTo(V, Ty); > > @@ -357,6 +408,27 @@ > return InsertBinop(Instruction::UDiv, LHS, RHS, InsertPt); > } > > +/// Move parts of Base into Rest to leave Base with the minimal > +/// expression that provides a pointer operand suitable for a > +/// GEP expansion. > +static void ExposePointerBase(SCEVHandle &Base, SCEVHandle &Rest, > + ScalarEvolution &SE) { > + while (const SCEVAddRecExpr *A = dyn_cast(Base)) { > + Base = A->getStart(); > + Rest = SE.getAddExpr(Rest, > + SE.getAddRecExpr(SE.getIntegerSCEV(0, > A->getType()), > + A->getStepRecurrence(SE), > + A->getLoop())); > + } > + if (const SCEVAddExpr *A = dyn_cast(Base)) { > + Base = A->getOperand(A->getNumOperands()-1); > + std::vector NewAddOps(A->op_begin(), A->op_end()); > + NewAddOps.back() = Rest; > + Rest = SE.getAddExpr(NewAddOps); > + ExposePointerBase(Base, Rest, SE); > + } > +} > + > Value *SCEVExpander::visitAddRecExpr(const SCEVAddRecExpr *S) { > const Type *Ty = SE.getEffectiveSCEVType(S->getType()); > const Loop *L = S->getLoop(); > @@ -365,8 +437,25 @@ > if (!S->getStart()->isZero()) { > std::vector NewOps(S->getOperands()); > NewOps[0] = SE.getIntegerSCEV(0, Ty); > - Value *Rest = expand(SE.getAddRecExpr(NewOps, L)); > - return expand(SE.getAddExpr(S->getStart(), SE.getUnknown(Rest))); > + SCEVHandle Rest = SE.getAddRecExpr(NewOps, L); > + > + // Turn things like ptrtoint+arithmetic+inttoptr into GEP. See the > + // comments on expandAddToGEP for details. > + if (SE.TD ) { > + SCEVHandle Base = S->getStart(); > + SCEVHandle RestArray[1] = Rest; > + // Dig into the expression to find the pointer base for a GEP. > + ExposePointerBase(Base, RestArray[0], SE); > + // If we found a pointer, expand the AddRec with a GEP. > + if (const PointerType *PTy = dyn_cast(Base->getType())) > { > + Value *StartV = expand(Base); > + assert(StartV->getType() == PTy && "Pointer type mismatch for > GEP!"); > + return expandAddToGEP(RestArray, RestArray+1, PTy, Ty, StartV); > + } > + } > + > + Value *RestV = expand(Rest); > + return expand(SE.getAddExpr(S->getStart(), SE.getUnknown(RestV))); > } > > // {0,+,1} --> Insert a canonical induction variable into the loop! > > Added: llvm/trunk/test/Transforms/IndVarSimplify/addrec-gep.ll > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/addrec-gep.ll?rev=72366&view=auto > > > ============================================================================== > --- llvm/trunk/test/Transforms/IndVarSimplify/addrec-gep.ll (added) > +++ llvm/trunk/test/Transforms/IndVarSimplify/addrec-gep.ll Sun May 24 > 13:06:31 2009 > @@ -0,0 +1,78 @@ > +; RUN: llvm-as < %s | opt -indvars | llvm-dis > %t > +; RUN: grep getelementptr %t | count 1 > +; RUN: grep {mul .*, 37} %t | count 1 > +; RUN: grep {add .*, 5203} %t | count 1 > +; RUN: not grep cast %t > + > +; This test tests several things. The load and store should use the > +; same address instead of having it computed twice, and SCEVExpander > should > +; be able to reconstruct the full getelementptr, despite it having a few > +; obstacles set in its way. > + > +target datalayout = "e-p:64:64:64" > + > +define void @foo(i64 %n, i64 %m, i64 %o, i64 %q, double* nocapture %p) > nounwind { > +entry: > + %tmp = icmp sgt i64 %n, 0 ; [#uses=1] > + br i1 %tmp, label %bb.nph3, label %return > + > +bb.nph: ; preds = %bb2.preheader > + %tmp1 = mul i64 %tmp16, %i.02 ; [#uses=1] > + %tmp2 = mul i64 %tmp19, %i.02 ; [#uses=1] > + br label %bb1 > + > +bb1: ; preds = %bb2, %bb.nph > + %j.01 = phi i64 [ %tmp9, %bb2 ], [ 0, %bb.nph ] ; > [#uses=3] > + %tmp3 = add i64 %j.01, %tmp1 ; [#uses=1] > + %tmp4 = add i64 %j.01, %tmp2 ; [#uses=1] > + %z0 = add i64 %tmp4, 5203 > + %tmp5 = getelementptr double* %p, i64 %z0 ; > [#uses=1] > + %tmp6 = load double* %tmp5, align 8 ; > [#uses=1] > + %tmp7 = fdiv double %tmp6, 2.100000e+00 ; > [#uses=1] > + %z1 = add i64 %tmp4, 5203 > + %tmp8 = getelementptr double* %p, i64 %z1 ; > [#uses=1] > + store double %tmp7, double* %tmp8, align 8 > + %tmp9 = add i64 %j.01, 1 ; [#uses=2] > + br label %bb2 > + > +bb2: ; preds = %bb1 > + %tmp10 = icmp slt i64 %tmp9, %m ; [#uses=1] > + br i1 %tmp10, label %bb1, label %bb2.bb3_crit_edge > + > +bb2.bb3_crit_edge: ; preds = %bb2 > + br label %bb3 > + > +bb3: ; preds = %bb2.preheader, %bb2.bb3_crit_edge > + %tmp11 = add i64 %i.02, 1 ; [#uses=2] > + br label %bb4 > + > +bb4: ; preds = %bb3 > + %tmp12 = icmp slt i64 %tmp11, %n ; [#uses=1] > + br i1 %tmp12, label %bb2.preheader, label %bb4.return_crit_edge > + > +bb4.return_crit_edge: ; preds = %bb4 > + br label %bb4.return_crit_edge.split > + > +bb4.return_crit_edge.split: ; preds = %bb.nph3, > %bb4.return_crit_edge > + br label %return > + > +bb.nph3: ; preds = %entry > + %tmp13 = icmp sgt i64 %m, 0 ; [#uses=1] > + %tmp14 = mul i64 %n, 37 ; [#uses=1] > + %tmp15 = mul i64 %tmp14, %o ; [#uses=1] > + %tmp16 = mul i64 %tmp15, %q ; [#uses=1] > + %tmp17 = mul i64 %n, 37 ; [#uses=1] > + %tmp18 = mul i64 %tmp17, %o ; [#uses=1] > + %tmp19 = mul i64 %tmp18, %q ; [#uses=1] > + br i1 %tmp13, label %bb.nph3.split, label > %bb4.return_crit_edge.split > + > +bb.nph3.split: ; preds = %bb.nph3 > + br label %bb2.preheader > + > +bb2.preheader: ; preds = %bb.nph3.split, %bb4 > + %i.02 = phi i64 [ %tmp11, %bb4 ], [ 0, %bb.nph3.split ] ; > [#uses=3] > + br i1 true, label %bb.nph, label %bb3 > + > +return: ; preds = %bb4.return_crit_edge.split, %entry > + ret void > +} > > Modified: llvm/trunk/test/Transforms/IndVarSimplify/gep-with-mul-base.ll > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/gep-with-mul-base.ll?rev=72366&r1=72365&r2=72366&view=diff > > > ============================================================================== > --- llvm/trunk/test/Transforms/IndVarSimplify/gep-with-mul-base.ll > (original) > +++ llvm/trunk/test/Transforms/IndVarSimplify/gep-with-mul-base.ll Sun May > 24 13:06:31 2009 > @@ -1,6 +1,6 @@ > ; RUN: llvm-as < %s | opt -indvars | llvm-dis > %t > ; RUN: grep add %t | count 8 > -; RUN: grep mul %t | count 9 > +; RUN: grep mul %t | count 7 > > define void @foo(i64 %n, i64 %m, i64 %o, double* nocapture %p) nounwind { > entry: > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > -- -Howard -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090525/916c89bf/attachment.html From howard0su at gmail.com Mon May 25 10:11:54 2009 From: howard0su at gmail.com (Howard Su) Date: Mon, 25 May 2009 23:11:54 +0800 Subject: [llvm-commits] [Patch] Consolidate COFF definitions Message-ID: I noticed there are two pieces of COFF definitions in the tree. not sure if we can merge them. The patch only be tested by compiling. -- -Howard -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090525/af5255e5/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: consolidate coff.patch Type: application/octet-stream Size: 14912 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090525/af5255e5/attachment.obj From anton at korobeynikov.info Mon May 25 10:20:34 2009 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Mon, 25 May 2009 19:20:34 +0400 Subject: [llvm-commits] [Patch] Consolidate COFF definitions In-Reply-To: References: Message-ID: Hello, Howard > I noticed there are two pieces of COFF definitions in the tree. not sure if > we can merge them. The patch only be tested by compiling. Please use the common code style for the whole file. The second part (machine type) is definitely formatted improperly. -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From howard0su at gmail.com Mon May 25 10:25:17 2009 From: howard0su at gmail.com (Howard Su) Date: Mon, 25 May 2009 23:25:17 +0800 Subject: [llvm-commits] [Patch] Consolidate COFF definitions In-Reply-To: References: Message-ID: I will if we think this is right direction. Thank you point out. On Mon, May 25, 2009 at 11:20 PM, Anton Korobeynikov < anton at korobeynikov.info> wrote: > Hello, Howard > > > I noticed there are two pieces of COFF definitions in the tree. not sure > if > > we can merge them. The patch only be tested by compiling. > Please use the common code style for the whole file. The second part > (machine type) is definitely formatted improperly. > > -- > With best regards, Anton Korobeynikov > Faculty of Mathematics and Mechanics, Saint Petersburg State University > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > -- -Howard -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090525/6c7b2ef4/attachment.html From sabre at nondot.org Mon May 25 11:34:48 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 16:34:48 -0000 Subject: [llvm-commits] [llvm] r72387 - /llvm/trunk/lib/Target/X86/README.txt Message-ID: <200905251634.n4PGYnK1022383@zion.cs.uiuc.edu> Author: lattner Date: Mon May 25 11:34:44 2009 New Revision: 72387 URL: http://llvm.org/viewvc/llvm-project?rev=72387&view=rev Log: we should eventually add -march=atom and the new atom movbe instruction. Modified: llvm/trunk/lib/Target/X86/README.txt Modified: llvm/trunk/lib/Target/X86/README.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/README.txt?rev=72387&r1=72386&r2=72387&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/README.txt (original) +++ llvm/trunk/lib/Target/X86/README.txt Mon May 25 11:34:44 2009 @@ -2,6 +2,8 @@ // Random ideas for the X86 backend. //===---------------------------------------------------------------------===// +We should add support for the "movbe" instruction, which does a byte-swapping +copy (3-addr bswap + memory support?) This is available on Atom processors. //===---------------------------------------------------------------------===// From evan.cheng at apple.com Mon May 25 13:25:41 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 25 May 2009 11:25:41 -0700 Subject: [llvm-commits] [llvm] r72336 - in /llvm/trunk/lib/Target/ARM: ARMBuildAttrs.h AsmPrinter/ARMAsmPrinter.cpp In-Reply-To: <200905231951.n4NJpKgo001853@zion.cs.uiuc.edu> References: <200905231951.n4NJpKgo001853@zion.cs.uiuc.edu> Message-ID: <56CF3E38-89FD-4E34-B30E-AA6D4AA2E91D@apple.com> On May 23, 2009, at 12:51 PM, Anton Korobeynikov wrote: > Author: asl > Date: Sat May 23 14:51:20 2009 > New Revision: 72336 > > URL: http://llvm.org/viewvc/llvm-project?rev=72336&view=rev > Log: > Emit ARM Build Attributes > > Added: > llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h > Modified: > llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp > > Added: llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h?rev=72336&view=auto > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h (added) > +++ llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h Sat May 23 14:51:20 2009 > @@ -0,0 +1,64 @@ > +//===-------- ARMBuildAttrs.h - ARM Build Attributes ------------*- > C++ -*-===// > +// > +// The LLVM Compiler Infrastructure > +// > +// This file is distributed under the University of Illinois Open > Source > +// License. See LICENSE.TXT for details. > +// > +// > = > = > = > ----------------------------------------------------------------------= > ==// > +// > +// This file contains enumerations amd support routines for ARM > build attributes "amd"? What does it stand for? Evan > > +// as defined in ARM ABI addenda document (ABI release 2.07). > +// > +// > = > = > = > ----------------------------------------------------------------------= > ==// > + > +#ifndef __TARGET_ARMBUILDATTRS_H__ > +#define __TARGET_ARMBUILDATTRS_H__ > + > +namespace ARMBuildAttrs { > + enum { > + File = 1, > + Section = 2, > + Symbol = 3, > + CPU_raw_name = 4, > + CPU_name = 5, > + CPU_arch = 6, > + CPU_arch_profile = 7, > + ARM_ISA_use = 8, > + THUMB_ISA_use = 9, > + VFP_arch = 10, > + WMMX_arch = 11, > + Advanced_SIMD_arch = 12, > + PCS_config = 13, > + ABI_PCS_R9_use = 14, > + ABI_PCS_RW_data = 15, > + ABI_PCS_RO_data = 16, > + ABI_PCS_GOT_use = 17, > + ABI_PCS_wchar_t = 18, > + ABI_FP_rounding = 19, > + ABI_FP_denormal = 20, > + ABI_FP_exceptions = 21, > + ABI_FP_user_exceptions = 22, > + ABI_FP_number_model = 23, > + ABI_align8_needed = 24, > + ABI_align8_preserved = 25, > + ABI_enum_size = 26, > + ABI_HardFP_use = 27, > + ABI_VFP_args = 28, > + ABI_WMMX_args = 29, > + ABI_optimization_goals = 30, > + ABI_FP_optimization_goals = 31, > + compatibility = 32, > + CPU_unaligned_access = 34, > + VFP_HP_extension = 36, > + ABI_FP_16bit_format = 38, > + nodefaults = 64, > + also_compatible_with = 65, > + T2EE_use = 66, > + conformance = 67, > + Virtualization_use = 68, > + MPextension_use = 70 > + }; > +} > + > +#endif // __TARGET_ARMBUILDATTRS_H__ > > Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=72336&r1=72335&r2=72336&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original) > +++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Sat May > 23 14:51:20 2009 > @@ -14,6 +14,7 @@ > > #define DEBUG_TYPE "asm-printer" > #include "ARM.h" > +#include "ARMBuildAttrs.h" > #include "ARMTargetMachine.h" > #include "ARMAddressingModes.h" > #include "ARMConstantPoolValue.h" > @@ -816,6 +817,32 @@ > if (Subtarget->isTargetDarwin()) > Mang->setUseQuotes(true); > > + // Emit ARM Build Attributes > + if (Subtarget->isTargetELF()) { > + // CPU Type > + O << "\t.cpu " << Subtarget->getCPUString() << '\n'; > + > + // FIXME: Emit FPU type > + if (Subtarget->hasVFP2()) > + O << "\t.eabi_attribute " << ARMBuildAttrs::VFP_arch << ", > 2\n"; > + > + // Signal various FP modes. > + if (!UnsafeFPMath) > + O << "\t.eabi_attribute " << ARMBuildAttrs::ABI_FP_denormal > << ", 1\n" > + << "\t.eabi_attribute " << ARMBuildAttrs::ABI_FP_exceptions > << ", 1\n"; > + > + if (FiniteOnlyFPMath()) > + O << "\t.eabi_attribute " << > ARMBuildAttrs::ABI_FP_number_model << ", 1\n"; > + else > + O << "\t.eabi_attribute " << > ARMBuildAttrs::ABI_FP_number_model << ", 3\n"; > + > + // 8-bytes alignment stuff. > + O << "\t.eabi_attribute " << ARMBuildAttrs::ABI_align8_needed > << ", 1\n" > + << "\t.eabi_attribute " << > ARMBuildAttrs::ABI_align8_preserved << ", 1\n"; > + > + // FIXME: Should we signal R9 usage? > + } > + > return Result; > } > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From anton at korobeynikov.info Mon May 25 13:33:19 2009 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Mon, 25 May 2009 22:33:19 +0400 Subject: [llvm-commits] [llvm] r72336 - in /llvm/trunk/lib/Target/ARM: ARMBuildAttrs.h AsmPrinter/ARMAsmPrinter.cpp In-Reply-To: <56CF3E38-89FD-4E34-B30E-AA6D4AA2E91D@apple.com> References: <200905231951.n4NJpKgo001853@zion.cs.uiuc.edu> <56CF3E38-89FD-4E34-B30E-AA6D4AA2E91D@apple.com> Message-ID: > "amd"? What does it stand for? It stands for "and" :) -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From sabre at nondot.org Mon May 25 14:51:24 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 19:51:24 -0000 Subject: [llvm-commits] [llvm] r72395 - /llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h Message-ID: <200905251951.n4PJpSjM030026@zion.cs.uiuc.edu> Author: lattner Date: Mon May 25 14:51:07 2009 New Revision: 72395 URL: http://llvm.org/viewvc/llvm-project?rev=72395&view=rev Log: fix typo Modified: llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h Modified: llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h?rev=72395&r1=72394&r2=72395&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h (original) +++ llvm/trunk/lib/Target/ARM/ARMBuildAttrs.h Mon May 25 14:51:07 2009 @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file contains enumerations amd support routines for ARM build attributes +// This file contains enumerations and support routines for ARM build attributes // as defined in ARM ABI addenda document (ABI release 2.07). // //===----------------------------------------------------------------------===// From sabre at nondot.org Mon May 25 15:28:45 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 20:28:45 -0000 Subject: [llvm-commits] [llvm] r72396 - /llvm/trunk/lib/Target/X86/README.txt Message-ID: <200905252028.n4PKSljV031663@zion.cs.uiuc.edu> Author: lattner Date: Mon May 25 15:28:19 2009 New Revision: 72396 URL: http://llvm.org/viewvc/llvm-project?rev=72396&view=rev Log: add some late optimizations that GCC does. It thinks these are a win even on Core2, not just AMD processors which was a surprise to me. Modified: llvm/trunk/lib/Target/X86/README.txt Modified: llvm/trunk/lib/Target/X86/README.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/README.txt?rev=72396&r1=72395&r2=72396&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/README.txt (original) +++ llvm/trunk/lib/Target/X86/README.txt Mon May 25 15:28:19 2009 @@ -1883,3 +1883,17 @@ fall back to lower-granularity chunks. //===---------------------------------------------------------------------===// + +Implement processor-specific optimizations for parity with GCC on these +processors. GCC does two optimizations: + +1. ix86_pad_returns inserts a noop before ret instructions if immediately + preceeded by a conditional branch or is the target of a jump. +2. ix86_avoid_jump_misspredicts inserts noops in cases where a 16-byte block of + code contains more than 3 branches. + +The first one is done for all AMDs, Core2, and "Generic" +The second one is done for: Atom, Pentium Pro, all AMDs, Pentium 4, Nocona, + Core 2, and "Generic" + +//===---------------------------------------------------------------------===// From mai4 at uiuc.edu Mon May 25 15:57:02 2009 From: mai4 at uiuc.edu (Haohui Mai) Date: Mon, 25 May 2009 20:57:02 -0000 Subject: [llvm-commits] [poolalloc] r72397 - /poolalloc/trunk/lib/DSA/Local.cpp Message-ID: <200905252057.n4PKv2tV032713@zion.cs.uiuc.edu> Author: mai4 Date: Mon May 25 15:57:01 2009 New Revision: 72397 URL: http://llvm.org/viewvc/llvm-project?rev=72397&view=rev Log: Preliminary handling of global aliases. Modified: poolalloc/trunk/lib/DSA/Local.cpp Modified: poolalloc/trunk/lib/DSA/Local.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/Local.cpp?rev=72397&r1=72396&r2=72397&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/Local.cpp (original) +++ poolalloc/trunk/lib/DSA/Local.cpp Mon May 25 15:57:01 2009 @@ -216,7 +216,12 @@ } else if (isa(C)) { G.eraseNodeForValue(V); return 0; + } else if (isa(C)) { + // XXX: Need more investigation + NH = getValueDest(*(dynamic_cast(C)->getAliasee())); + return 0; } else { + llvm::cerr << "Unknown constant: " << *C << std::endl; assert(0 && "Unknown constant type!"); } N = createNode(); // just create a shadow node @@ -335,8 +340,8 @@ } void GraphBuilder::visitIntToPtrInst(IntToPtrInst &I) { - std::cerr << "cast in " << I.getParent()->getParent()->getName() << "\n"; - I.dump(); +// std::cerr << "cast in " << I.getParent()->getParent()->getName() << "\n"; +// I.dump(); setDestTo(I, createNode()->setUnknownMarker()->setIntToPtrMarker()); } From mai4 at uiuc.edu Mon May 25 15:58:52 2009 From: mai4 at uiuc.edu (Haohui Mai) Date: Mon, 25 May 2009 20:58:52 -0000 Subject: [llvm-commits] [poolalloc] r72398 - in /poolalloc/trunk: include/dsa/DataStructure.h lib/DSA/Basic.cpp Message-ID: <200905252058.n4PKwqmv000332@zion.cs.uiuc.edu> Author: mai4 Date: Mon May 25 15:58:52 2009 New Revision: 72398 URL: http://llvm.org/viewvc/llvm-project?rev=72398&view=rev Log: Add a basic version of DSA which assumes all pointers points to every possible objects. Added: poolalloc/trunk/lib/DSA/Basic.cpp Modified: poolalloc/trunk/include/dsa/DataStructure.h Modified: poolalloc/trunk/include/dsa/DataStructure.h URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/include/dsa/DataStructure.h?rev=72398&r1=72397&r2=72398&view=diff ============================================================================== --- poolalloc/trunk/include/dsa/DataStructure.h (original) +++ poolalloc/trunk/include/dsa/DataStructure.h Mon May 25 15:58:52 2009 @@ -170,6 +170,24 @@ void copyValue(Value *From, Value *To); }; +// BasicDataStructures - The analysis is a dummy one -- all pointers can points +// to all possible locations. +// +class BasicDataStructures : public DataStructures { +public: + static char ID; + BasicDataStructures() : DataStructures((intptr_t)&ID, "basic.") {} + ~BasicDataStructures() { releaseMemory(); } + + virtual bool runOnModule(Module &M); + + /// getAnalysisUsage - This obviously provides a data structure graph. + /// + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired(); + AU.setPreservesAll(); + } +}; // LocalDataStructures - The analysis that computes the local data structure // graphs for all of the functions in the program. Added: poolalloc/trunk/lib/DSA/Basic.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/Basic.cpp?rev=72398&view=auto ============================================================================== --- poolalloc/trunk/lib/DSA/Basic.cpp (added) +++ poolalloc/trunk/lib/DSA/Basic.cpp Mon May 25 15:58:52 2009 @@ -0,0 +1,73 @@ +//===- Basic.cpp ----------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Implementation of the basic data structure analysis pass. It simply assumes +// that all pointers can points to all possible locations. +// +//===----------------------------------------------------------------------===// + +#include "dsa/DataStructure.h" +#include "dsa/DSGraph.h" + +#include "llvm/Module.h" +#include "llvm/DerivedTypes.h" +#include "llvm/Constants.h" +#include "llvm/Instructions.h" +#include "llvm/Intrinsics.h" +#include "llvm/Support/InstIterator.h" +#include "llvm/Support/InstVisitor.h" +#include "llvm/Support/GetElementPtrTypeIterator.h" + +using namespace llvm; + +static RegisterPass +X("dsa-basic", "Basic Data Structure Analysis(No Analysis)"); + +char BasicDataStructures::ID = 0; + +bool BasicDataStructures::runOnModule(Module &M) { + init(&getAnalysis()); + + DSNode * GVNodeInternal = new DSNode(PointerType::getUnqual(Type::Int8Ty), GlobalsGraph); + DSNode * GVNodeExternal = new DSNode(PointerType::getUnqual(Type::Int8Ty), GlobalsGraph); + for (Module::global_iterator I = M.global_begin(), E = M.global_end(); + I != E; ++I) { + if (I->isDeclaration()) { + GlobalsGraph->getNodeForValue(&*I).mergeWith(GVNodeExternal); + } else { + GlobalsGraph->getNodeForValue(&*I).mergeWith(GVNodeInternal); + } + } + + GVNodeInternal->foldNodeCompletely(); + GVNodeInternal->maskNodeTypes(DSNode::IncompleteNode); + + GVNodeExternal->foldNodeCompletely(); + + // Next step, iterate through the nodes in the globals graph, unioning + // together the globals into equivalence classes. + formGlobalECs(); + + for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) { + if (!F->isDeclaration()) { + DSGraph* G = new DSGraph(GlobalECs, getTargetData(), GlobalsGraph); + DSNode * Node = new DSNode(PointerType::getUnqual(Type::Int8Ty), G); + for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) { + G->getNodeForValue(&*I).mergeWith(Node); + } + + Node->foldNodeCompletely(); + Node->maskNodeTypes(DSNode::IncompleteNode); + + setDSGraph(*F, G); + } + } + + return false; +} From mai4 at uiuc.edu Mon May 25 15:59:22 2009 From: mai4 at uiuc.edu (Haohui Mai) Date: Mon, 25 May 2009 20:59:22 -0000 Subject: [llvm-commits] [poolalloc] r72399 - in /poolalloc/trunk: include/poolalloc/PoolAllocate.h lib/PoolAllocate/PASimple.cpp Message-ID: <200905252059.n4PKxMMA000362@zion.cs.uiuc.edu> Author: mai4 Date: Mon May 25 15:59:22 2009 New Revision: 72399 URL: http://llvm.org/viewvc/llvm-project?rev=72399&view=rev Log: Made simple pool allocation work with basic DSA analysis. Modified: poolalloc/trunk/include/poolalloc/PoolAllocate.h poolalloc/trunk/lib/PoolAllocate/PASimple.cpp Modified: poolalloc/trunk/include/poolalloc/PoolAllocate.h URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/include/poolalloc/PoolAllocate.h?rev=72399&r1=72398&r2=72399&view=diff ============================================================================== --- poolalloc/trunk/include/poolalloc/PoolAllocate.h (original) +++ poolalloc/trunk/include/poolalloc/PoolAllocate.h Mon May 25 15:59:22 2009 @@ -431,9 +431,10 @@ DSGraph * CombinedDSGraph; EquivalenceClasses GlobalECs; TargetData * TD; + bool CompleteDSA; public: static char ID; - PoolAllocateSimple(bool passAllArgs=false, bool SAFECode = true) + PoolAllocateSimple(bool passAllArgs=false, bool SAFECode = true, bool CompleteDSA = true) : PoolAllocate (passAllArgs, SAFECode, (intptr_t)&ID) {} ~PoolAllocateSimple() {return;} void getAnalysisUsage(AnalysisUsage &AU) const; @@ -458,7 +459,8 @@ virtual Value * getPool (const DSNode * N, Function & F) { return TheGlobalPool; } - }; +}; + } #endif Modified: poolalloc/trunk/lib/PoolAllocate/PASimple.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PASimple.cpp?rev=72399&r1=72398&r2=72399&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PASimple.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PASimple.cpp Mon May 25 15:59:22 2009 @@ -72,9 +72,14 @@ void PoolAllocateSimple::getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); - AU.addRequiredTransitive(); - - AU.addPreserved(); + // Get the Target Data information and the Graphs + if (CompleteDSA) { + AU.addRequiredTransitive(); + AU.addPreserved(); + } else { + AU.addRequiredTransitive(); + AU.addPreserved(); + } AU.setPreservesAll(); } @@ -100,22 +105,17 @@ if (M.begin() == M.end()) return false; // Get the Target Data information and the Graphs - Graphs = &getAnalysis(); // folded inlined CBU graphs - assert (Graphs && "No ECGraphs pass available!\n"); + if (CompleteDSA) { + Graphs = &getAnalysis(); + } else { + Graphs = &getAnalysis(); + } + assert (Graphs && "No DSA pass available!\n"); TargetData & TD = getAnalysis(); // Add the pool* prototypes to the module AddPoolPrototypes(&M); - // Get the main function to insert the poolinit calls. - Function *MainFunc = (M.getFunction("main") ? M.getFunction("main") - : M.getFunction("MAIN__")); - if (MainFunc == 0 || MainFunc->isDeclaration()) { - std::cerr << "Cannot pool allocate this program: it has global " - << "pools but no 'main' function yet!\n"; - return true; - } - // // Merge all of the DSNodes in the DSGraphs. // @@ -370,4 +370,3 @@ ReturnInst::Create(BB); return GV; } - From anton at korobeynikov.info Mon May 25 16:01:25 2009 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Tue, 26 May 2009 01:01:25 +0400 Subject: [llvm-commits] [poolalloc] r72397 - /poolalloc/trunk/lib/DSA/Local.cpp In-Reply-To: <200905252057.n4PKv2tV032713@zion.cs.uiuc.edu> References: <200905252057.n4PKv2tV032713@zion.cs.uiuc.edu> Message-ID: Hello, > + ? ?} else if (isa(C)) { > + ? ? ?// XXX: Need more investigation > + ? ? ?NH = getValueDest(*(dynamic_cast(C)->getAliasee())); I think you want to use cast<> here (see http://llvm.org/docs/ProgrammersManual.html#isa) -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From mai4 at uiuc.edu Mon May 25 16:19:12 2009 From: mai4 at uiuc.edu (Haohui Mai) Date: Mon, 25 May 2009 21:19:12 -0000 Subject: [llvm-commits] [poolalloc] r72400 - /poolalloc/trunk/lib/DSA/Local.cpp Message-ID: <200905252119.n4PLJCpm001839@zion.cs.uiuc.edu> Author: mai4 Date: Mon May 25 16:19:11 2009 New Revision: 72400 URL: http://llvm.org/viewvc/llvm-project?rev=72400&view=rev Log: Add some comments to describle the patch more concretely. Replace dynamic_cast<> with cast<> to match the coding convetions. Thanks to Anton Korobeynikov. Modified: poolalloc/trunk/lib/DSA/Local.cpp Modified: poolalloc/trunk/lib/DSA/Local.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/Local.cpp?rev=72400&r1=72399&r2=72400&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/Local.cpp (original) +++ poolalloc/trunk/lib/DSA/Local.cpp Mon May 25 16:19:11 2009 @@ -218,7 +218,10 @@ return 0; } else if (isa(C)) { // XXX: Need more investigation - NH = getValueDest(*(dynamic_cast(C)->getAliasee())); + // According to Andrew, DSA is broken on global aliasing, since it does + // not handle the aliases of parameters correctly. Here is only a quick + // fix for some special cases. + NH = getValueDest(*(cast(C)->getAliasee())); return 0; } else { llvm::cerr << "Unknown constant: " << *C << std::endl; From haohui.mai at gmail.com Mon May 25 16:09:40 2009 From: haohui.mai at gmail.com (Mai, Haohui) Date: Mon, 25 May 2009 16:09:40 -0500 Subject: [llvm-commits] [poolalloc] r72397 - /poolalloc/trunk/lib/DSA/Local.cpp In-Reply-To: References: <200905252057.n4PKv2tV032713@zion.cs.uiuc.edu> Message-ID: <1243285780.6616.0.camel@haohui-laptop> I think you're right. Thanks for pointing out the issue. Haohui On Tue, 2009-05-26 at 01:01 +0400, Anton Korobeynikov wrote: > Hello, > > > + } else if (isa(C)) { > > + // XXX: Need more investigation > > + NH = getValueDest(*(dynamic_cast(C)->getAliasee())); > I think you want to use cast<> here (see > http://llvm.org/docs/ProgrammersManual.html#isa) > From nicholas at mxc.ca Mon May 25 16:28:11 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 21:28:11 -0000 Subject: [llvm-commits] [llvm] r72402 - /llvm/trunk/lib/VMCore/Type.cpp Message-ID: <200905252128.n4PLSBQQ002224@zion.cs.uiuc.edu> Author: nicholas Date: Mon May 25 16:28:11 2009 New Revision: 72402 URL: http://llvm.org/viewvc/llvm-project?rev=72402&view=rev Log: Audit the type constructors. Previously it was possible to create [0 x void] or use labels as members of structures for example. Also included a couple of whitespace fixes. Modified: llvm/trunk/lib/VMCore/Type.cpp Modified: llvm/trunk/lib/VMCore/Type.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Type.cpp?rev=72402&r1=72401&r2=72402&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Type.cpp (original) +++ llvm/trunk/lib/VMCore/Type.cpp Mon May 25 16:28:11 2009 @@ -322,15 +322,15 @@ ContainedTys = reinterpret_cast(this+1); NumContainedTys = Params.size() + 1; // + 1 for result type assert(isValidReturnType(Result) && "invalid return type for function"); - - + + bool isAbstract = Result->isAbstract(); new (&ContainedTys[0]) PATypeHandle(Result, this); for (unsigned i = 0; i != Params.size(); ++i) { assert((Params[i]->isFirstClassType() || isa(Params[i])) && "Function arguments must be value types!"); - new (&ContainedTys[i+1]) PATypeHandle(Params[i],this); + new (&ContainedTys[i+1]) PATypeHandle(Params[i], this); isAbstract |= Params[i]->isAbstract(); } @@ -345,8 +345,10 @@ setSubclassData(isPacked); bool isAbstract = false; for (unsigned i = 0; i < Types.size(); ++i) { - assert(Types[i] != Type::VoidTy && "Void type for structure field!!"); - new (&ContainedTys[i]) PATypeHandle(Types[i], this); + assert(Types[i] && " type for structure field!"); + assert(Types[i] != Type::VoidTy && "Void type for structure field!"); + assert(Types[i] != Type::LabelTy && "Label type for structure field!"); + new (&ContainedTys[i]) PATypeHandle(Types[i], this); isAbstract |= Types[i]->isAbstract(); } @@ -1038,7 +1040,9 @@ ArrayType *ArrayType::get(const Type *ElementType, uint64_t NumElements) { - assert(ElementType && "Can't get array of null types!"); + assert(ElementType && "Can't get array of types!"); + assert(ElementType != Type::VoidTy && "Array of void is not valid!"); + assert(ElementType != Type::LabelTy && "Array of labels is not valid!"); ArrayValType AVT(ElementType, NumElements); ArrayType *AT = ArrayTypes->get(AVT); @@ -1082,7 +1086,7 @@ VectorType *VectorType::get(const Type *ElementType, unsigned NumElements) { - assert(ElementType && "Can't get vector of null types!"); + assert(ElementType && "Can't get vector of types!"); VectorValType PVT(ElementType, NumElements); VectorType *PT = VectorTypes->get(PVT); From sabre at nondot.org Mon May 25 16:28:56 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 21:28:56 -0000 Subject: [llvm-commits] [llvm] r72403 - in /llvm/trunk: lib/Analysis/MemoryDependenceAnalysis.cpp test/Transforms/GVN/load-constant-mem.ll Message-ID: <200905252128.n4PLSuO0002261@zion.cs.uiuc.edu> Author: lattner Date: Mon May 25 16:28:56 2009 New Revision: 72403 URL: http://llvm.org/viewvc/llvm-project?rev=72403&view=rev Log: make memdep use the getModRefInfo method for stores instead of the low-level alias() method, allowing it to reason more aggressively about pointers into constant memory. PR4189 Added: llvm/trunk/test/Transforms/GVN/load-constant-mem.ll Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=72403&r1=72402&r2=72403&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Mon May 25 16:28:56 2009 @@ -202,9 +202,17 @@ } if (StoreInst *SI = dyn_cast(Inst)) { + // If alias analysis can tell that this store is guaranteed to not modify + // the query pointer, ignore it. Use getModRefInfo to handle cases where + // the query pointer points to constant memory etc. + if (AA->getModRefInfo(SI, MemPtr, MemSize) == AliasAnalysis::NoModRef) + continue; + + // Ok, this store might clobber the query pointer. Check to see if it is + // a must alias: in this case, we want to return this as a def. Value *Pointer = SI->getPointerOperand(); uint64_t PointerSize = TD->getTypeStoreSize(SI->getOperand(0)->getType()); - + // If we found a pointer, check if it could be the same as our pointer. AliasAnalysis::AliasResult R = AA->alias(Pointer, PointerSize, MemPtr, MemSize); Added: llvm/trunk/test/Transforms/GVN/load-constant-mem.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/load-constant-mem.ll?rev=72403&view=auto ============================================================================== --- llvm/trunk/test/Transforms/GVN/load-constant-mem.ll (added) +++ llvm/trunk/test/Transforms/GVN/load-constant-mem.ll Mon May 25 16:28:56 2009 @@ -0,0 +1,13 @@ +; RUN: llvm-as < %s | opt -gvn -instcombine | llvm-dis | grep {ret i32 0} +; PR4189 + at G = external constant [4 x i32] + +define i32 @test(i8* %p, i32 %i) nounwind { +entry: + %P = getelementptr [4 x i32]* @G, i32 0, i32 %i + %A = load i32* %P + store i8 4, i8* %p + %B = load i32* %P + %C = sub i32 %A, %B + ret i32 %C +} From nicholas at mxc.ca Mon May 25 17:33:34 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 15:33:34 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1A4FAB.2050404@free.fr> References: <4A1A1FBE.5090902@mxc.ca> <4A1A4FAB.2050404@free.fr> Message-ID: <4A1B1CBE.2030804@mxc.ca> Duncan Sands wrote: > Hi Nick, > >> + CallInst *A = dyn_cast(I); >> + if (!A) continue; >> + >> + // TODO: __cxa_guard_acquire returns a value, then makes a conditional >> + // branch off of it. We need to handle this. > > the acquire function may be being passed as a parameter to some other > function rather than being called. Right. Well, that should never happen in a real program so if it ever does then how about we abort the transform across the whole module. >> + if (I->mayReadFromMemory() || I->mayWriteToMemory()) > > Maybe you should use mayHaveSideEffects rather than mayWriteToMemory, > since a "const" function can still throw an exception. On the other > hand, since such a function doesn't read or write memory it shouldn't > need to be wrapped in guards anyway. Good idea. Done. >> +BasicBlock *CXAGuardElimination::getUniqueSuccessor(TerminatorInst *TI, >> + CallInst *Acquire) { >> + if (TI->getNumSuccessors() == 1) >> + return TI->getSuccessor(0); > > What about this: > > bb1: acquire > br bbr > bb2: acquire > br bbr > bbr: release > > Aren't you going to eliminate the first acquire and the release, but > not the second acquire? No, it'll eliminate the second acquire and the release, but not the first acquire. Note that there's code to detect this case in deadGuardElim (see the comments). As far as I can tell that's valid behaviour for this transform so long as we don't mind removing infinite loops (note that these infinite loops can't be deliberately constructed by the user code, the calls to __cxa_guard are always emitted by the compiler...). >> + addPass(PM, createCXAGuardEliminationPass()); // Remove __cxa_guard_* calls. > > Are you going to add this to llvm-gcc too? Yes. >> + This pass deletes dead calls to __cxa_guard_acquire and __cxa_guard_release >> + which are part of the Itanium C++ ABI. T hese are used to prevent a function > > T hese -> These That line is gone. Updated patch attached. Thanks for the review! Nick -------------- next part -------------- A non-text attachment was scrubbed... Name: cxaguardelim-2.patch Type: text/x-diff Size: 13074 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090525/f7760236/attachment.bin From clattner at apple.com Mon May 25 17:44:49 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 25 May 2009 15:44:49 -0700 Subject: [llvm-commits] [llvm] r72329 - /llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp In-Reply-To: <200905231624.n4NGO6o0027749@zion.cs.uiuc.edu> References: <200905231624.n4NGO6o0027749@zion.cs.uiuc.edu> Message-ID: <5E69C061-20B9-4F73-90C9-F89585D06B79@apple.com> On May 23, 2009, at 9:24 AM, Torok Edwin wrote: > Author: edwin > Date: Sat May 23 11:23:59 2009 > New Revision: 72329 > > URL: http://llvm.org/viewvc/llvm-project?rev=72329&view=rev > Log: > stat64/open64/lseek64 for the interpreter stat64 was already listed. Maybe the \1 isn't being stripped correctly? -Chris > > > Modified: > llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp > > Modified: llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp?rev=72329&r1=72328&r2=72329&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp (original) > +++ llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp Sat May 23 > 11:23:59 2009 > @@ -51,7 +51,7 @@ > #if defined(HAVE_SYS_STAT_H) > #include > #endif > - > +#include > /* stat functions are redirecting to __xstat with a version number. > On x86-64 > * linking with libc_nonshared.a and -Wl,--export-dynamic doesn't > make 'stat' > * available as an exported symbol, so we have to add it explicitly. > @@ -63,6 +63,9 @@ > sys::DynamicLibrary::AddSymbol("fstat", (void*)(intptr_t)fstat); > sys::DynamicLibrary::AddSymbol("lstat", (void*)(intptr_t)lstat); > sys::DynamicLibrary::AddSymbol("stat64", (void*)(intptr_t)stat64); > + sys::DynamicLibrary::AddSymbol("\x1stat64", (void*) > (intptr_t)stat64); > + sys::DynamicLibrary::AddSymbol("\x1open64", (void*) > (intptr_t)open64); > + sys::DynamicLibrary::AddSymbol("\x1lseek64", (void*) > (intptr_t)lseek64); > sys::DynamicLibrary::AddSymbol("fstat64", (void*) > (intptr_t)fstat64); > sys::DynamicLibrary::AddSymbol("lstat64", (void*) > (intptr_t)lstat64); > sys::DynamicLibrary::AddSymbol("atexit", (void*)(intptr_t)atexit); > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From nicholas at mxc.ca Mon May 25 17:59:37 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 15:59:37 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> Message-ID: <4A1B22D9.6000607@mxc.ca> Eli Friedman wrote: > On Sun, May 24, 2009 at 11:25 PM, Nick Lewycky wrote: >> Eli Friedman wrote: >>> On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >>>> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >>>> example of what happens after this optimization is applied on the above >>>> program. We may decide that PR4261 is too hard to fix in general and just >>>> add some extra logic to this pass, but I'd rather have this committed for a >>>> start. >>> Couldn't you just change AcquireRet from a constant 1 to a constant 0? >>> If it's safe to remove the guard, I don't see how the chosen path >>> could make a difference. >> Release has to run. It has the visible effect of changing the guard >> variable to a 1. Nowhere in this pass do we prove those two calls are >> the only places looking at the guard variable. > > Assuming it's actually a guard, nothing besides the guard should care > whether the guard variable initialized or not in the current call. The > pass as written already makes assumptions that agree with that: for > example, it doesn't bother to check for instructions with side-effects > after the call to __cxa_guard_release. I'm going to change my mind on this one. That's not safe. Here's my example. We have a function that calls __cxa_guard_acquire/release on a single guard variable. Then we decide to clone it as part of partial specialization. The initialization being guarded depends on some global variable -- if it's zero it does nothing, else it prints "foo". When cloneA is run we know that the global is always 0 so the initialization does nothing and we eliminate the guards. In cloneB the global is always non-zero, so it always prints "foo" to the screen and we keep the guards. When cloneA runs it needs to mark the guard variable as being "already initialized" or else when cloneB runs it will go ahead and print "foo" and it's not supposed to. You've changed the behaviour of the program. I'm going to put removeGuardPair back the way it was before. Nick >> Visible to who? Well, I'm not sure. There is a "__cxa_guard_abort" that >> could be used. I'm not sure what C++ input you would need to create in >> order to make it depend on this and be broken by the change, but I'm >> opting for the relatively safe transform. > > __cxa_guard_abort only gets triggered if the constructor throws an > exception, which shouldn't be possible here. > >> ALSO, AcquireRet is used twice, once when we've decided to delete the >> guards but also earlier when following the flow from acquire() to >> release(). If we used the wrong value there we would flow directly into >> the "ret void" even if there were interesting code being guarded. (Note >> that currently "ret void" means that we didn't find the release() call >> and therefore wouldn't eliminate it anyways.) > > Ah, oops, I wasn't suggesting to change that use. > > -Eli > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From clattner at apple.com Mon May 25 18:12:10 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 25 May 2009 16:12:10 -0700 Subject: [llvm-commits] [llvm] r72325 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp In-Reply-To: <200905231235.n4NCZgvT018589@zion.cs.uiuc.edu> References: <200905231235.n4NCZgvT018589@zion.cs.uiuc.edu> Message-ID: <2E4DA060-7225-419D-AB83-0E5FF6FAA7DE@apple.com> On May 23, 2009, at 5:35 AM, Eli Friedman wrote: > URL: http://llvm.org/viewvc/llvm-project?rev=72325&view=rev > Log: > Add a new step to legalization to legalize vector math operations. > This > will allow simplifying LegalizeDAG to eliminate type legalization. (I > have a patch to do that, but it's not quite finished; I'll commit it > once it's finished and I've fixed any review comments for this patch.) > See the comment at the beginning of > lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp for more details on the > motivation for this patch. Hi Eli, I initially really didn't like the idea of adding a new legalize pass, but I agree that this is currently needed and it does seem like the right short-term approach. As Duncan said, please convert this from recursive to iterative. One known-problem with the existing legalizedag stuff is that the recursive parts quickly run out of stack space when run on a thread (which often has a smaller stack than the main process), it would be nice to keep improving this: legalizetypes is iterative. In any case, allowing the type legalization code to finally be ripped out of legalize dag is awesome! > + /// This returns true if it made any changes; in that case, > LegalizeTypes > + /// is called again before Legalize. > + /// > + /// Note that this is an involved process that may invalidate > pointers into > + /// the graph. > + bool LegalizeVectors(); Would it make sense to change this to only return true when an illegal type is created? > > +// This file implements the SelectionDAG::LegalizeVectors method. > +// > +// The vector legalizer looks for vector operations which might > need to be > +// unrolled and legalizes them. s/unroll/scalarize/g? This should never do any "splitting" of vectors, right? >> Possibly; I took the current approach from the DAG legalizer. Taking >> a quick look, the type legalizer's logic to deal with nodes being >> inserted during legalization seems complicated enough that I wouldn't >> want to duplicate it... perhaps some sort of general legalizer base >> class would be appropriate? > > I think Chris wants to redesign LegalizeDAG. Hopefully at that point > all the different legalizers will be able to share some generic > infrastructure. I suspect the type legalizer could be simplified a > lot > by using an SDAG equivalent of CallbackVH. Now that you disabled the type legalization code from LegalizeDAG, there are several steps I think we should take: 1. Finish ripping the dead code out of LegalizeDAG. 2. The remaining pieces of LegalizeDAG should be rewritten, both to make it iterative, and also to simplify it. There is a ton of duplicated code that happens for each operation. Making it iterative would allow us to simplify a bunch of this away I think. 3. Duncan is right: something like CallbackVH/AssertingVH would be a huge boon to legalize. Adding it should not be too hard (just use the same approach as CallbackVH) and would dramatically simplify legalizetypes. 4. Once that is done, I think we might be able to end up full circle back to a single unified LegalizeDAG pass. Basically, we could have a *single* top-down iterative walk that inspects each node once, and hands it off to the various appropriate routines: first, if it has any illegal types, call legalize types. If all types are legal, call into the operation legalization stuff, etc. The end result of this is that we have high efficiency (look at a #nodes visted = number of nodes + number of changes) but really being able to pull this off means that we need to get rid of most of the "reverse" temporary data structures that legalizetypes is holding onto. Does this seem like a sane plan? -Chris From eli.friedman at gmail.com Mon May 25 18:46:38 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 25 May 2009 16:46:38 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1B22D9.6000607@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> <4A1B22D9.6000607@mxc.ca> Message-ID: On Mon, May 25, 2009 at 3:59 PM, Nick Lewycky wrote: > Eli Friedman wrote: >> On Sun, May 24, 2009 at 11:25 PM, Nick Lewycky wrote: >>> Eli Friedman wrote: >>>> On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >>>>> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >>>>> example of what happens after this optimization is applied on the above >>>>> program. We may decide that PR4261 is too hard to fix in general and just >>>>> add some extra logic to this pass, but I'd rather have this committed for a >>>>> start. >>>> Couldn't you just change AcquireRet from a constant 1 to a constant 0? >>>> ?If it's safe to remove the guard, I don't see how the chosen path >>>> could make a difference. >>> Release has to run. It has the visible effect of changing the guard >>> variable to a 1. Nowhere in this pass do we prove those two calls are >>> the only places looking at the guard variable. >> >> Assuming it's actually a guard, nothing besides the guard should care >> whether the guard variable initialized or not in the current call. The >> pass as written already makes assumptions that agree with that: for >> example, it doesn't bother to check for instructions with side-effects >> after the call to __cxa_guard_release. > > I'm going to change my mind on this one. That's not safe. Here's my example. > > We have a function that calls __cxa_guard_acquire/release on a single > guard variable. Then we decide to clone it as part of partial > specialization. > > The initialization being guarded depends on some global variable -- if > it's zero it does nothing, else it prints "foo". When cloneA is run we > know that the global is always 0 so the initialization does nothing and > we eliminate the guards. In cloneB the global is always non-zero, so it > always prints "foo" to the screen and we keep the guards. > > When cloneA runs it needs to mark the guard variable as being "already > initialized" or else when cloneB runs it will go ahead and print "foo" > and it's not supposed to. You've changed the behaviour of the program. Ooh, that's right. Actually, it gets nastier than that: suppose something like the following: static int gval1 = 1; int gval2 = 1; struct A { A() { if (gval1) { printf("%d\n", gval2); } }; void a() { static A x(); gval2 = 0;} void b() { a(); } void c() { gval1 = 0; a(); } Then suppose b() and c() are called at the same time on separate threads, and we've inlined/optimized everything; if the guard is removed from c(), we can end up printing out "0", which shouldn't be possible because setting gval2 to zero only happens after the constructor for A finishes. -Eli From nicholas at mxc.ca Mon May 25 19:17:49 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 17:17:49 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> <4A1B22D9.6000607@mxc.ca> Message-ID: <4A1B352D.9050208@mxc.ca> Eli Friedman wrote: > On Mon, May 25, 2009 at 3:59 PM, Nick Lewycky wrote: >> Eli Friedman wrote: >>> On Sun, May 24, 2009 at 11:25 PM, Nick Lewycky wrote: >>>> Eli Friedman wrote: >>>>> On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >>>>>> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >>>>>> example of what happens after this optimization is applied on the above >>>>>> program. We may decide that PR4261 is too hard to fix in general and just >>>>>> add some extra logic to this pass, but I'd rather have this committed for a >>>>>> start. >>>>> Couldn't you just change AcquireRet from a constant 1 to a constant 0? >>>>> If it's safe to remove the guard, I don't see how the chosen path >>>>> could make a difference. >>>> Release has to run. It has the visible effect of changing the guard >>>> variable to a 1. Nowhere in this pass do we prove those two calls are >>>> the only places looking at the guard variable. >>> Assuming it's actually a guard, nothing besides the guard should care >>> whether the guard variable initialized or not in the current call. The >>> pass as written already makes assumptions that agree with that: for >>> example, it doesn't bother to check for instructions with side-effects >>> after the call to __cxa_guard_release. >> I'm going to change my mind on this one. That's not safe. Here's my example. >> >> We have a function that calls __cxa_guard_acquire/release on a single >> guard variable. Then we decide to clone it as part of partial >> specialization. >> >> The initialization being guarded depends on some global variable -- if >> it's zero it does nothing, else it prints "foo". When cloneA is run we >> know that the global is always 0 so the initialization does nothing and >> we eliminate the guards. In cloneB the global is always non-zero, so it >> always prints "foo" to the screen and we keep the guards. >> >> When cloneA runs it needs to mark the guard variable as being "already >> initialized" or else when cloneB runs it will go ahead and print "foo" >> and it's not supposed to. You've changed the behaviour of the program. > > Ooh, that's right. Actually, it gets nastier than that: suppose > something like the following: > > static int gval1 = 1; > int gval2 = 1; > struct A { A() { if (gval1) { printf("%d\n", gval2); } }; > void a() { static A x(); gval2 = 0;} > void b() { a(); } > void c() { gval1 = 0; a(); } > > Then suppose b() and c() are called at the same time on separate > threads, and we've inlined/optimized everything; if the guard is > removed from c(), we can end up printing out "0", which shouldn't be > possible because setting gval2 to zero only happens after the > constructor for A finishes. Right. deadGuardElim checks for memory *reads* as well as writes and unwinds in order to prevent this sort of thing from happening. In the example I gave above it only works because the "partial specialization" step also eliminated the dead read of that 'some global variable'. I'm still not sure what to do about the case where someone uses the result from the Acquire to do more than just perform initialization inside the release. You brought this up in an earlier email, something like: if (x = acquire()) { release(); return 1; } return 0; would break us because we see that there is nothing between acquire() and release() but we can't just eliminate it. We still need to return 1 the first time and 0 on subsequent calls. Nick From eli.friedman at gmail.com Mon May 25 19:49:04 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 25 May 2009 17:49:04 -0700 Subject: [llvm-commits] [llvm] r72325 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp In-Reply-To: <2E4DA060-7225-419D-AB83-0E5FF6FAA7DE@apple.com> References: <200905231235.n4NCZgvT018589@zion.cs.uiuc.edu> <2E4DA060-7225-419D-AB83-0E5FF6FAA7DE@apple.com> Message-ID: On Mon, May 25, 2009 at 4:12 PM, Chris Lattner wrote: > As Duncan said, please convert this from recursive to iterative. ?One > known-problem with the existing legalizedag stuff is that the > recursive parts quickly run out of stack space when run on a thread > (which often has a smaller stack than the main process), it would be > nice to keep improving this: legalizetypes is iterative. I don't really want to copy 500 lines of LegalizeTypes code into LegalizeVectorOps.cpp... do you have some other suggestion? >> + ?/// This returns true if it made any changes; in that case, >> LegalizeTypes >> + ?/// is called again before Legalize. >> + ?/// >> + ?/// Note that this is an involved process that may invalidate >> pointers into >> + ?/// the graph. >> + ?bool LegalizeVectors(); > > Would it make sense to change this to only return true when an illegal > type is created? Maybe; the downside is that we lose the extra DAGCombiner run. This significantly improves code generation for test/CodeGen/X86/widen_cast-4.ll, for example. >> +// This file implements the SelectionDAG::LegalizeVectors method. >> +// >> +// The vector legalizer looks for vector operations which might >> need to be >> +// unrolled and legalizes them. > > s/unroll/scalarize/g? ?This should never do any "splitting" of > vectors, right? Sure, I'll change that. >>> Possibly; I took the current approach from the DAG legalizer. ?Taking >>> a quick look, the type legalizer's logic to deal with nodes being >>> inserted during legalization seems complicated enough that I wouldn't >>> want to duplicate it... perhaps some sort of general legalizer base >>> class would be appropriate? >> >> I think Chris wants to redesign LegalizeDAG. ?Hopefully at that point >> all the different legalizers will be able to share some generic >> infrastructure. ?I suspect the type legalizer could be simplified a >> lot >> by using an SDAG equivalent of CallbackVH. > > Now that you disabled the type legalization code from LegalizeDAG, > there are several steps I think we should take: > > 1. Finish ripping the dead code out of LegalizeDAG. Of course :) > 2. The remaining pieces of LegalizeDAG should be rewritten, both to > make it iterative, and also to simplify it. ?There is a ton of > duplicated code that happens for each operation. ?Making it iterative > would allow us to simplify a bunch of this away I think. Yeah; there are also issues at the moment with inconsistently legalizing the operands of various operations. -Eli From eli.friedman at gmail.com Mon May 25 19:51:29 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 25 May 2009 17:51:29 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1B352D.9050208@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> <4A1B22D9.6000607@mxc.ca> <4A1B352D.9050208@mxc.ca> Message-ID: On Mon, May 25, 2009 at 5:17 PM, Nick Lewycky wrote: > Eli Friedman wrote: >> On Mon, May 25, 2009 at 3:59 PM, Nick Lewycky wrote: >>> Eli Friedman wrote: >>>> On Sun, May 24, 2009 at 11:25 PM, Nick Lewycky wrote: >>>>> Eli Friedman wrote: >>>>>> On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >>>>>>> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >>>>>>> example of what happens after this optimization is applied on the above >>>>>>> program. We may decide that PR4261 is too hard to fix in general and just >>>>>>> add some extra logic to this pass, but I'd rather have this committed for a >>>>>>> start. >>>>>> Couldn't you just change AcquireRet from a constant 1 to a constant 0? >>>>>> ?If it's safe to remove the guard, I don't see how the chosen path >>>>>> could make a difference. >>>>> Release has to run. It has the visible effect of changing the guard >>>>> variable to a 1. Nowhere in this pass do we prove those two calls are >>>>> the only places looking at the guard variable. >>>> Assuming it's actually a guard, nothing besides the guard should care >>>> whether the guard variable initialized or not in the current call. The >>>> pass as written already makes assumptions that agree with that: for >>>> example, it doesn't bother to check for instructions with side-effects >>>> after the call to __cxa_guard_release. >>> I'm going to change my mind on this one. That's not safe. Here's my example. >>> >>> We have a function that calls __cxa_guard_acquire/release on a single >>> guard variable. Then we decide to clone it as part of partial >>> specialization. >>> >>> The initialization being guarded depends on some global variable -- if >>> it's zero it does nothing, else it prints "foo". When cloneA is run we >>> know that the global is always 0 so the initialization does nothing and >>> we eliminate the guards. In cloneB the global is always non-zero, so it >>> always prints "foo" to the screen and we keep the guards. >>> >>> When cloneA runs it needs to mark the guard variable as being "already >>> initialized" or else when cloneB runs it will go ahead and print "foo" >>> and it's not supposed to. You've changed the behaviour of the program. >> >> Ooh, that's right. ?Actually, it gets nastier than that: suppose >> something like the following: >> >> static int gval1 = 1; >> int gval2 = 1; >> struct A { A() { if (gval1) { printf("%d\n", gval2); } }; >> void a() { static A x(); gval2 = 0;} >> void b() { a(); } >> void c() { gval1 = 0; a(); } >> >> Then suppose b() and c() are called at the same time on separate >> threads, and we've inlined/optimized everything; if the guard is >> removed from c(), we can end up printing out "0", which shouldn't be >> possible because setting gval2 to zero only happens after the >> constructor for A finishes. > > Right. deadGuardElim checks for memory *reads* as well as writes and > unwinds in order to prevent this sort of thing from happening. If a() gets inlined into c(), the load inside A() of gval1 can be eliminated; I'm not sure if we do that particular optimization at the moment, though. -Eli From sabre at nondot.org Mon May 25 20:05:22 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 20:05:22 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html Message-ID: <200905260105.n4Q15MOd010152@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2009-05-21-Thesis-Barrett-3c.html updated: 1.1 -> 1.2 --- Log message: fix buttons at the bottom. --- Diffs of the changes: (+4 -2) 2009-05-21-Thesis-Barrett-3c.html | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) Index: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html diff -u llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html:1.1 llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html:1.2 --- llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html:1.1 Mon May 25 20:03:36 2009 +++ llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html Mon May 25 20:04:57 2009 @@ -41,7 +41,9 @@
- Valid CSS! - Valid HTML 4.01! + Valid CSS! + Valid HTML 4.01! From sabre at nondot.org Mon May 25 20:05:24 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 20:05:24 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html 2009-05-21-Thesis-Barrett-3c.pdf Message-ID: <200905260105.n4Q15OKX010163@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2009-05-21-Thesis-Barrett-3c.html added (r1.1) 2009-05-21-Thesis-Barrett-3c.pdf added (r1.1) --- Log message: Add Edd Barrett's thesis. --- Diffs of the changes: (+15435 -0) 2009-05-21-Thesis-Barrett-3c.html | 47 2009-05-21-Thesis-Barrett-3c.pdf |15388 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 15435 insertions(+) Index: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html diff -c /dev/null llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html:1.1 *** /dev/null Mon May 25 20:03:46 2009 --- llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html Mon May 25 20:03:36 2009 *************** *** 0 **** --- 1,47 ---- + + + + + + 3c: A JIT Compiler with LLVM + + +
+ 3c: A JIT Compiler with LLVM +
+
+ Edd Barrett +
+ +

Abstract:

+
+ In the past, implementing virtual machines has either been a custom process or an endeavour into interfacing an existing virtual machine using (relatively) low level programming languages like C. Recently there has been a boom in high level scripting languages, which claim to make a programmer more productive, yet the field of compiler design is still rooted firmly with low level languages. It remains to be seen why language processors are not implemented in high level scripting languages. +
+ +
+ The following report presents an investigation into designing and implementing com puter languages using a modern compiler construction tool-kit called the "Low Level Virtual Machine" (LLVM), in combination with a modern scripting language. The report covers in detail traditional approaches to compiler construction, parsing and virtual machine theory. Comparisons are made between traditional approaches and the modern approach offered by LLVM, via an experimental object oriented language called 3c, developed using LLVM, the Aperiot parser, Python and an incremental de velopment methodology. +
+ +

BibTeX:

+
+ @techreport{EBARRETT:3C,
+ 	author = "Edward Barrett",
+ 	institution = "Bournemouth University",
+ 	year = 2009,
+ 	title = "3c - A {JIT} Compiler with {LLVM}",
+ 	url = "http://llvm.org/pubs/2009-05-21-Thesis-Barrett-3c.html"
+ }
+ 
+ +

Download:

+

Paper:

+ + + +
+ Valid CSS! + Valid HTML 4.01! + + Index: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.pdf diff -c /dev/null llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.pdf:1.1 *** /dev/null Mon May 25 20:05:14 2009 --- llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.pdf Mon May 25 20:03:36 2009 *************** *** 0 **** --- 1,16882 ---- + %PDF-1.4 + %???? + 5 0 obj + << /S /GoTo /D (chapter.1) >> + endobj + 8 0 obj + (Introduction) + endobj + 9 0 obj + << /S /GoTo /D (chapter.2) >> + endobj + 12 0 obj + (Background Study) + endobj + 13 0 obj + << /S /GoTo /D (section.2.1) >> + endobj + 16 0 obj + (What is a Compiler?) + endobj + 17 0 obj + << /S /GoTo /D (section.2.2) >> + endobj + 20 0 obj + (Compiler Sub-systems) + endobj + 21 0 obj + << /S /GoTo /D (subsection.2.2.1) >> + endobj + 24 0 obj + (Tokenisation) + endobj + 25 0 obj + << /S /GoTo /D (subsection.2.2.2) >> + endobj + 28 0 obj + (Syntax Analysis) + endobj + 29 0 obj + << /S /GoTo /D (subsection.2.2.3) >> + endobj + 32 0 obj + (Semantic Analysis Stage) + endobj + 33 0 obj + << /S /GoTo /D (subsection.2.2.4) >> + endobj + 36 0 obj + (The Synthesis Stage) + endobj + 37 0 obj + << /S /GoTo /D (section.2.3) >> + endobj + 40 0 obj + (Type Systems) + endobj + 41 0 obj + << /S /GoTo /D (section.2.4) >> + endobj + 44 0 obj + (Traditional Compiler Development) + endobj + 45 0 obj + << /S /GoTo /D (section.2.5) >> + endobj + 48 0 obj + (What is a Virtual Machine?) + endobj + 49 0 obj + << /S /GoTo /D (subsection.2.5.1) >> + endobj + 52 0 obj + (System Virtual Machines) + endobj + 53 0 obj + << /S /GoTo /D (subsection.2.5.2) >> + endobj + 56 0 obj + (Process Virtual Machines) + endobj + 57 0 obj + << /S /GoTo /D (section.2.6) >> + endobj + 60 0 obj + (The Low Level Virtual Machine) + endobj + 61 0 obj + << /S /GoTo /D (subsection.2.6.1) >> + endobj + 64 0 obj + (Introducing LLVM Assembler) + endobj + 65 0 obj + << /S /GoTo /D (subsection.2.6.2) >> + endobj + 68 0 obj + (The Structure of an LLVM IR Program) + endobj + 69 0 obj + << /S /GoTo /D (subsection.2.6.3) >> + endobj + 72 0 obj + (Tight Integration with the Operating System Libraries) + endobj + 73 0 obj + << /S /GoTo /D (subsection.2.6.4) >> + endobj + 76 0 obj + (LLVM APIs) + endobj + 77 0 obj + << /S /GoTo /D (subsection.2.6.5) >> + endobj + 80 0 obj + (The LLVM Optimiser and Profiler) + endobj + 81 0 obj + << /S /GoTo /D (section.2.7) >> + endobj + 84 0 obj + (Comparing LLVM to other Virtual Machines) + endobj + 85 0 obj + << /S /GoTo /D (subsection.2.7.1) >> + endobj + 88 0 obj + (The Java Virtual Machine) + endobj + 89 0 obj + << /S /GoTo /D (subsection.2.7.2) >> + endobj + 92 0 obj + (The Lua Virtual Machine) + endobj + 93 0 obj + << /S /GoTo /D (subsection.2.7.3) >> + endobj + 96 0 obj + (Comparison to LLVM) + endobj + 97 0 obj + << /S /GoTo /D (chapter.3) >> + endobj + 100 0 obj + (Software Engineering Technique) + endobj + 101 0 obj + << /S /GoTo /D (section.3.1) >> + endobj + 104 0 obj + (Development Model) + endobj + 105 0 obj + << /S /GoTo /D (section.3.2) >> + endobj + 108 0 obj + (Software Engineering Tools) + endobj + 109 0 obj + << /S /GoTo /D (chapter.4) >> + endobj + 112 0 obj + (3c Design and Implementation) + endobj + 113 0 obj + << /S /GoTo /D (section.4.1) >> + endobj + 116 0 obj + (System Overview) + endobj + 117 0 obj + << /S /GoTo /D (section.4.2) >> + endobj + 120 0 obj + (3c Source Code Design) + endobj + 121 0 obj + << /S /GoTo /D (section.4.3) >> + endobj + 124 0 obj + (Aperiot as a Tokeniser and Parser) + endobj + 125 0 obj + << /S /GoTo /D (subsection.4.3.1) >> + endobj + 128 0 obj + (LL\(1\) Limitations) + endobj + 129 0 obj + << /S /GoTo /D (section.4.4) >> + endobj + 132 0 obj + (The 3c Mid-Layer) + endobj + 133 0 obj + << /S /GoTo /D (section.4.5) >> + endobj + 136 0 obj + (3c Object Hierarchy) + endobj + 137 0 obj + << /S /GoTo /D (section.4.6) >> + endobj + 140 0 obj + (Basic Functionality) + endobj + 141 0 obj + << /S /GoTo /D (subsection.4.6.1) >> + endobj + 144 0 obj + (Constructing Built-in Types) + endobj + 145 0 obj + << /S /GoTo /D (subsection.4.6.2) >> + endobj + 148 0 obj + (Printing Values) + endobj + 149 0 obj + << /S /GoTo /D (subsection.4.6.3) >> + endobj + 152 0 obj + (Variable Assignment) + endobj + 153 0 obj + << /S /GoTo /D (subsection.4.6.4) >> + endobj + 156 0 obj + (Conditionals and Looping) + endobj + 157 0 obj + << /S /GoTo /D (subsection.4.6.5) >> + endobj + 160 0 obj + (Functions) + endobj + 161 0 obj + << /S /GoTo /D (section.4.7) >> + endobj + 164 0 obj + (IR Tables) + endobj + 165 0 obj + << /S /GoTo /D (subsection.4.7.1) >> + endobj + 168 0 obj + (The Type-Sym Table) + endobj + 169 0 obj + << /S /GoTo /D (subsection.4.7.2) >> + endobj + 172 0 obj + (The Virtual Function Table) + endobj + 173 0 obj + << /S /GoTo /D (subsection.4.7.3) >> + endobj + 176 0 obj + (Polymorphic Operator Tables) + endobj + 177 0 obj + << /S /GoTo /D (subsection.4.7.4) >> + endobj + 180 0 obj + (Example Table Usage) + endobj + 181 0 obj + << /S /GoTo /D (section.4.8) >> + endobj + 184 0 obj + (Optimisation) + endobj + 185 0 obj + << /S /GoTo /D (section.4.9) >> + endobj + 188 0 obj + (JIT) + endobj + 189 0 obj + << /S /GoTo /D (subsection.4.9.1) >> + endobj + 192 0 obj + (Run-Time Errors) + endobj + 193 0 obj + << /S /GoTo /D (chapter.5) >> + endobj + 196 0 obj + (3c in Practice - System Testing and Evaluation) + endobj + 197 0 obj + << /S /GoTo /D (section.5.1) >> + endobj + 200 0 obj + (Test Cases) + endobj + 201 0 obj + << /S /GoTo /D (subsection.5.1.1) >> + endobj + 204 0 obj + (Boundary Value Analysis Tests) + endobj + 205 0 obj + << /S /GoTo /D (subsection.5.1.2) >> + endobj + 208 0 obj + (Fibonacci Sequence) + endobj + 209 0 obj + << /S /GoTo /D (subsection.5.1.3) >> + endobj + 212 0 obj + (Nesting Test) + endobj + 213 0 obj + << /S /GoTo /D (section.5.2) >> + endobj + 216 0 obj + (Evaluation) + endobj + 217 0 obj + << /S /GoTo /D (subsection.5.2.1) >> + endobj + 220 0 obj + (Evaluation of Development Technique) + endobj + 221 0 obj + << /S /GoTo /D (subsection.5.2.2) >> + endobj + 224 0 obj + (Evaluation of Design and Implementation) + endobj + 225 0 obj + << /S /GoTo /D (subsection.5.2.3) >> + endobj + 228 0 obj + (Evaluation of Testing) + endobj + 229 0 obj + << /S /GoTo /D (section.5.3) >> + endobj + 232 0 obj + (Future Improvements) + endobj + 233 0 obj + << /S /GoTo /D (subsection.5.3.1) >> + endobj + 236 0 obj + (Critical Improvements) + endobj + 237 0 obj + << /S /GoTo /D (subsection.5.3.2) >> + endobj + 240 0 obj + (Non-Critical Improvements) + endobj + 241 0 obj + << /S /GoTo /D (subsection.5.3.3) >> + endobj + 244 0 obj + (Enhancements) + endobj + 245 0 obj + << /S /GoTo /D (section.5.4) >> + endobj + 248 0 obj + (Conclusion) + endobj + 249 0 obj + << /S /GoTo /D (appendix.A) >> + endobj + 252 0 obj + (References) + endobj + 253 0 obj + << /S /GoTo /D (appendix.B) >> + endobj + 256 0 obj + (3c Documentation) + endobj + 257 0 obj + << /S /GoTo /D (section.B.1) >> + endobj + 260 0 obj + (Installation Instructions) + endobj + 261 0 obj + << /S /GoTo /D (section.B.2) >> + endobj + 264 0 obj + (Manual Page) + endobj + 265 0 obj + << /S /GoTo /D (section.B.3) >> + endobj + 268 0 obj + (3c Syntax Reference) + endobj + 269 0 obj + << /S /GoTo /D (appendix.C) >> + endobj + 272 0 obj + (Testing Materials) + endobj + 273 0 obj + << /S /GoTo /D (section.C.1) >> + endobj + 276 0 obj + (Test Environment) + endobj + 277 0 obj + << /S /GoTo /D (section.C.2) >> + endobj + 280 0 obj + (Boundary Value Analysis Tests) + endobj + 281 0 obj + << /S /GoTo /D (subsection.C.2.1) >> + endobj + 284 0 obj + (Equality Operator Test) + endobj + 285 0 obj + << /S /GoTo /D (subsection.C.2.2) >> + endobj + 288 0 obj + (Less Than Operator Test) + endobj + 289 0 obj + << /S /GoTo /D (subsection.C.2.3) >> + endobj + 292 0 obj + (Greater Than Operator Test) + endobj + 293 0 obj + << /S /GoTo /D (subsection.C.2.4) >> + endobj + 296 0 obj + (Less Than or Equal Operator Test) + endobj + 297 0 obj + << /S /GoTo /D (subsection.C.2.5) >> + endobj + 300 0 obj + (Greater Than or Equal Operator Test) + endobj + 301 0 obj + << /S /GoTo /D (subsection.C.2.6) >> + endobj + 304 0 obj + (Inequality Operator Test) + endobj + 305 0 obj + << /S /GoTo /D (section.C.3) >> + endobj + 308 0 obj + (Fibonacci Tests) + endobj + 309 0 obj + << /S /GoTo /D (subsection.C.3.1) >> + endobj + 312 0 obj + (Program Listings) + endobj + 313 0 obj + << /S /GoTo /D (subsection.C.3.2) >> + endobj + 316 0 obj + (Results) + endobj + 317 0 obj + << /S /GoTo /D (section.C.4) >> + endobj + 320 0 obj + (Nesting Test) + endobj + 321 0 obj + << /S /GoTo /D (section.C.5) >> + endobj + 324 0 obj + (Contrived Optimiser Test) + endobj + 325 0 obj + << /S /GoTo /D [326 0 R /Fit ] >> + endobj + 329 0 obj << + /Length 930 + /Filter /FlateDecode + >> + stream + x??W?n1}?W??+????y???Z?%!??6???&[? -?x? ?? + ?E??gm??s|?????Iv0??Z@? X??? ??l2}Ia?C??6 ?u??I?U???p?E;z????????E???N$?b??TA?+?3gFil?={?wTnmig???u???F???<`?Y??o??l?fhN??????A?+ endstream + endobj + 326 0 obj << + /Type /Page + /Contents 329 0 R + /Resources 328 0 R + /MediaBox [0 0 612 792] + /Parent 343 0 R + >> endobj + 327 0 obj << + /Type /XObject + /Subtype /Image + /Width 650 + /Height 668 + /BitsPerComponent 8 + /Length 42347 + /ColorSpace /DeviceRGB + /Filter /DCTDecode + >> + stream + ????+  + +    ??+ ??+ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz???????????????????????????????????????????????????????????????????????????+ ??+ $4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????????????????????????????????????+ ?2???k????????,???+u?????????8u?B8????*??'u??X???r???????`(??+ ??+ (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + ???ZM??73Y^[???y rF??2???*??9?"?+ ??rx???K????O????+ ?.d??FjqR]O??+ ?????Z?????8?_??+ ?+ ???1??pU?=???IERQE+ o??????[???O??M~??7??x?????+ '??Z+;???A???) + x??????O?+ (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (??>U?+ (???P??(+ ??+ ???|?>+ (????93_?u?????#?+ (?? + (?? + ??!???_?\?+ (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (??>U?+ (????8?_????_?_??????8?b????\???+ ?? ?+ ??+ 0)\????_??+ `W???OA?????I?+ Q~?>????}?g??`?B?+ ?+ ???4??`;? + ?v?????1??,\??????7 ????????? ??g^q????VX? + ??c??_??????b???hH?6??z??(??=?W??g?:g?_?Wn??&?+ ?_A???????:??U?~???????y?"????????}?????j"?~C????l??X/?_??K??????m?Ss??}??+ k??+ ?+ ?8??+ ???}d????~????V???}G9??+V??4?o????l?P???V?W?+7???{???K?????5i?C6???H?B + ?;???6T$??????????R_?V??|D?????+??/???&???M??9"??H???9; ??????S??~yx?]??V?{??s?????i?n?}=`=+ ?????$:O???~l??????/?U?+ S?? + X??O ???k???c????O>?N?r~?x???????S?????B???m)??)? S?????&???,?Y????$~k???q\?SWE0?+ ?$?J?_???+ ???gw????YJ???}??+ }?|Q?????_t=???zO????????T???b#-??T?=??W?Z+?\????6MCX??????]_N???Wb+ ?o?/?????k?f?[?%??I?t??}?Ge~H??g??f,rO?Hm??O??C????H?|C??_j??t?W??&L:RD<?????"??????s??+ ????m?a?+ S??/?????m/E?m4?6??*????i???Q@,I8?Oz??+ KQ?~????? 4?Li???i??-'? ?M?? ???J?t?J?X????? ?9?|W? #?}U?}+????`?????|E??*??A?E??"?????u%+.z???9 ??'??Q?O????????.$?F??E???K?h1+??T???U?/%T??4??W??:(?????(+ ?~$x/\???l??>?g-??,3??J?=?A?! r+???6?/??[IF4nP???????bFw`?Ic??0?u??U?3???N?E?j?w?????;????:????????????x??_?^???{K????[k?????hI>??&?g??/ ?f???:?>???|=?+ ?????}???3?+ ??2???}+?_?#G??d?????b???????$6?,g?x???o?/?H'??+ ??? ?L???????+ Q}??|O{?j???? ??y?RG?+ )c?4h?^??????g?k?+??&??|y?S#|LF???m? ?????OF???{?x?J???k???l/?Y??}Xy???k?O??+ ??6?????s>?+ ?+ M?? ???T???_??????j??'?6?????????(?????\q??zw??+ ??r;W?O???x?>?+ 2v??q??_??o?g???;?2x?]?e??5?6??wm#)Ky?$??w??O?&O??x?=7R???????V?4??4?s?y??V1??X`e??F????E?>)~?_ ?w?2????????HcPK3?H;+ 3?N=?c?????~?+ n1?u??C??C?+ jF???+ ?T?/?2H?Q58 bz+ ?:????????? + ?\3Zy?W?????l????????????|?+ ?+ Y??O????EYu ?m?#&I%?1????????C??? ?/?~?????\2x???a]?7?[??-???R?K?C?/?+ ?????x?V??K??????U?#}h??????;???9??p?M???(BC????#??S??X??L??[?O???x???%??Y?-??t???3??s?? ???????+ \[?B??X?C+?? ??KmG???????_?e???I????[?o?\?+ ??#?+ ??t?????? ?> endobj + 331 0 obj << + /D [326 0 R /XYZ 90 726.045 null] + >> endobj + 333 0 obj << + /D [326 0 R /XYZ 90 304.75 null] + >> endobj + 334 0 obj << + /D [326 0 R /XYZ 90 283.121 null] + >> endobj + 336 0 obj << + /D [326 0 R /XYZ 90 268.874 null] + >> endobj + 337 0 obj << + /D [326 0 R /XYZ 90 254.627 null] + >> endobj + 338 0 obj << + /D [326 0 R /XYZ 90 240.381 null] + >> endobj + 339 0 obj << + /D [326 0 R /XYZ 90 226.134 null] + >> endobj + 340 0 obj << + /D [326 0 R /XYZ 90 211.888 null] + >> endobj + 341 0 obj << + /D [326 0 R /XYZ 90 197.641 null] + >> endobj + 342 0 obj << + /D [326 0 R /XYZ 90 183.395 null] + >> endobj + 328 0 obj << + /Font << /F21 332 0 R /F20 335 0 R >> + /XObject << /Im1 327 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 346 0 obj << + /Length 1157 + /Filter /FlateDecode + >> + stream + x???n?6????Qb???z?.?"A?a?e?Zblv%??h;???p(???@O?????d?????????_O??Z?e?~K*??y?-%O?M?5}hN?5??(W?'???.??y*kB/?????qM?g??M?????>???`????????a=?{???pz]f?|?????7?4?JX&?Ur + \]? g??9?}??=??#?d??+???jI??o?T??Y?? ?YU??% ???rE???|!s???&`?`?LM?ou?{B??8P-]:U?L???T?]????Q???> ?v?t?l??(e????h??l&+u?hu?dZ????? ??TM? + ??n?h7?.v?%?M??9O?I????Vys??n?DZ{???- ???S]G??????Am1? ??vfp???6Ht^???35???L?V?A0??ShzN&?1??Y ????j?^?,???Q?.??2&t???}?e^=??dU???l1???f ??m t?z?u????"A?>`? + ?1?R??>???2}|'??mt|?qmql???L?j?[?p??+ ??L-??? I?3&U??xI???????2?? ??q???7?B+ ?bM??-????D?DJ??M?M?0,?i\?l??????????????v=???@???0???l?{k??w?#?j?T??P????????????/s???,?? ??w&`???????t0uc??D?ZH?1:??UZ?UZ?0??y??1????Qc?INSq????????1hLp?j? N?? w???????K??A ?\??????a?4lEU^????????%K?? x?s*g??A??m?????O???'??6Q?W?(?7?Eo0~"m?tNI?????(???~?kg???E@???t?#?????j?9?b?J.a???C?P???1???]x??rr??XOX?$?K?F????.?$PC?@??k?GW?????F!??N????vS????????,?,????> endobj + 347 0 obj << + /D [345 0 R /XYZ 89 757 null] + >> endobj + 349 0 obj << + /D [345 0 R /XYZ 90 704.241 null] + >> endobj + 344 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 353 0 obj << + /Length 1526 + /Filter /FlateDecode + >> + stream + x??WK??6 ??W(?C???*Q/+?????M?N??4?DK?eR%?u?__P???w?I."? + g???F??j????v?e?f?b5?o?6???q?L2???> ? + ?o?0????vm???0?????YxlI 2? N22??A????'?F?]???m?0?^g???YE????k?9?|?:???Y??%s?????N:???l???#??M@?A????|>???VD?j?'??:S1???I@?V)/?Y?? G?#?S?_V???Q?@ ^a??t? G?O?Vj?{5h????oe?.?z?$!???, E??>????k+?Vv6??s>\?$(?|???{t??y??T?1?=?Ye9py??????9b???DPQ?q??_???}?????u+ ?w?W??H?N?M_YlK?*?$,????A]5??*?? + ???< ?x9E?b54+???a??Y???B??{ + ??8???`G??N + ??<?7?Cj'?f?6??1??} ????N????y?????k?&?v@< + ??N??????4???{?;R7???u??+ endstream + endobj + 352 0 obj << + /Type /Page + /Contents 353 0 R + /Resources 351 0 R + /MediaBox [0 0 612 792] + /Parent 343 0 R + >> endobj + 354 0 obj << + /D [352 0 R /XYZ 89 757 null] + >> endobj + 355 0 obj << + /D [352 0 R /XYZ 90 701.228 null] + >> endobj + 351 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 358 0 obj << + /Length 1395 + /Filter /FlateDecode + >> + stream + x???n?F??_?[?dSf????Jl??! x??n?mT?????{f???)+??s?sg???N????]:?????\??J?U\]qLG? ????M????)?S?????iX?Au?T??S?OA???>??k?:?e?Ct???_????O#???FWz7??i+?q??/])??I?5??)?B????+ ?????{?~EN???o5Aj??<;?:?c?E|?G-K?8??????@?(?????{???1 j<-=Q?4? i???f5?j?-?}???[E X2t"Z??&?yF:???<6Fj?ar? ?????"?0??H{?4??[GP?4??k??X~8??8x?9?~,>???p ?h? =M$?(?a?j?I?+?P???B?h???19?@q?1y????C????y?B??s?????H???v;?=??t?A{??|aM[vo?c~???????E?? ???RZL?5HgD-??|d??3]?????Xv?w9 w???????????????C???????J?~???q iX??d?????s??~?v cR?{760?51?oL????a???~?-?????'?O???m-Rr??q????S?t?#?KY) ??"?u?7Jq?\????P?E?D?t?t???k?V1???H??X?H??-??^GiO,/y+D??!????0???E?i??|???????e??mMm???9.?5b??/0n?W+ endstream + endobj + 357 0 obj << + /Type /Page + /Contents 358 0 R + /Resources 356 0 R + /MediaBox [0 0 612 792] + /Parent 343 0 R + >> endobj + 359 0 obj << + /D [357 0 R /XYZ 89 757 null] + >> endobj + 360 0 obj << + /D [357 0 R /XYZ 90 704.126 null] + >> endobj + 362 0 obj << + /D [357 0 R /XYZ 90 494.647 null] + >> endobj + 356 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F11 361 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 396 0 obj << + /Length 1268 + /Filter /FlateDecode + >> + stream + x??Z?r?6??+??fJ/??M'N??=?8?4???&??TH???? ?zE????e?@BH?s??? ?????~???0 + $? ???)?0??FP?O???? 5??D?`?????^??t+Y??1 ?t?L9&?sbQ?w%??H?H?l???k?????0H+ ?????bxwQ5?Z??>?xMUk?^O?l?U>?Uy???????? ???w%` ??????*?a???"#?r??kd?_E ?k???????i?'???S{?G)=?Gz|??]M??E$;fsE??{;???{7??%I???;?????"??0i?J???Q??T?T? + ^????L;g:?su? ????C9?!?????????.?&%\??t?|?? ?`??[???2? + R???F/=??????????mi??????An??/?^?'#?P?G?qLQ??>?;kE=?????;]?ez???)`??????B??$??i?hN?jFk??A ?i?t??W&? + g?????Riu3 ??,Te?#G !^M?|?????}?$?h??????M6??~3?C??/>?? ?\?p?E??fL?;???????D&????1$?_?0O???4r??Z]??,?_??i + endstream + endobj + 395 0 obj << + /Type /Page + /Contents 396 0 R + /Resources 394 0 R + /MediaBox [0 0 612 792] + /Parent 343 0 R + /Annots [ 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R ] + >> endobj + 363 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 573.304 164.042 582.769] + /A << /S /GoTo /D (chapter.1) >> + >> endobj + 364 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 544.328 190.413 555.885] + /A << /S /GoTo /D (chapter.2) >> + >> endobj + 365 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 528.495 216.924 540.037] + /A << /S /GoTo /D (section.2.1) >> + >> endobj + 366 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 512.678 224.735 524.219] + /A << /S /GoTo /D (section.2.2) >> + >> endobj + 367 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 498.952 215.758 508.402] + /A << /S /GoTo /D (subsection.2.2.1) >> + >> endobj + 368 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 481.042 228.6 492.584] + /A << /S /GoTo /D (subsection.2.2.2) >> + >> endobj + 369 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 465.225 265.97 476.766] + /A << /S /GoTo /D (subsection.2.2.3) >> + >> endobj + 370 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 449.407 247.479 460.949] + /A << /S /GoTo /D (subsection.2.2.4) >> + >> endobj + 371 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 433.589 187.016 444.588] + /A << /S /GoTo /D (section.2.3) >> + >> endobj + 372 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 417.772 279.29 429.313] + /A << /S /GoTo /D (section.2.4) >> + >> endobj + 373 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 403.752 246.254 413.496] + /A << /S /GoTo /D (section.2.5) >> + >> endobj + 374 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 386.121 266.099 397.678] + /A << /S /GoTo /D (subsection.2.5.1) >> + >> endobj + 375 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 372.117 266.558 381.86] + /A << /S /GoTo /D (subsection.2.5.2) >> + >> endobj + 376 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 356.478 263.728 366.043] + /A << /S /GoTo /D (section.2.6) >> + >> endobj + 377 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 338.683 285.517 350.225] + /A << /S /GoTo /D (subsection.2.6.1) >> + >> endobj + 378 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 322.865 324.381 334.407] + /A << /S /GoTo /D (subsection.2.6.2) >> + >> endobj + 379 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 307.048 393.88 318.589] + /A << /S /GoTo /D (subsection.2.6.3) >> + >> endobj + 380 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 293.028 206.593 302.508] + /A << /S /GoTo /D (subsection.2.6.4) >> + >> endobj + 381 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 275.412 303.28 286.954] + /A << /S /GoTo /D (subsection.2.6.5) >> + >> endobj + 382 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 259.595 316.829 271.136] + /A << /S /GoTo /D (section.2.7) >> + >> endobj + 383 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 245.575 271.36 255.319] + /A << /S /GoTo /D (subsection.2.7.1) >> + >> endobj + 384 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 229.758 267.813 239.501] + /A << /S /GoTo /D (subsection.2.7.2) >> + >> endobj + 385 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 212.142 251.136 223.419] + /A << /S /GoTo /D (subsection.2.7.3) >> + >> endobj + 386 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 185.273 255.559 196.829] + /A << /S /GoTo /D (chapter.3) >> + >> endobj + 387 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 169.44 216.505 180.982] + /A << /S /GoTo /D (section.3.1) >> + >> endobj + 388 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 153.622 248.077 165.164] + /A << /S /GoTo /D (section.3.2) >> + >> endobj + 389 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 126.753 247.967 138.31] + /A << /S /GoTo /D (chapter.4) >> + >> endobj + 390 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 110.921 203.883 122.198] + /A << /S /GoTo /D (section.4.1) >> + >> endobj + 391 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 95.103 228.491 106.645] + /A << /S /GoTo /D (section.4.2) >> + >> endobj + 392 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 79.285 273.233 90.827] + /A << /S /GoTo /D (section.4.3) >> + >> endobj + 397 0 obj << + /D [395 0 R /XYZ 89 757 null] + >> endobj + 394 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 439 0 obj << + /Length 1384 + /Filter /FlateDecode + >> + stream + x???]S?8???+|i??]}ZV?Hva???????8????)???,+??$]?????5i??????????;?A??1????|kpoq`1?<Ck0?n???G?????y???A?Gz????NO?????"?s}W"}??ggD??9w?N;?A?????{??h??????????y`???5??rL???????@???????x?????/?7@????w??(?Rdi??s?s\ + ?G??_???n] ?^????qH,R??p$?"??1??L4???{N????~@????.NM?p????yq?o???/?a=N???Z??Z?/q?k??? ??*?T???(%J_JYK?t-P?8?>?}??=??e^I?F???HJW??n?plO???????Jd?-??("?=?Hv*$?.$?R?D??????6??????????????l??)?Wfv??j8??b??B???\i%??j??1s??????"?1?5??0??0????9^??,?Q??\=\O?2??Z?????? ?9?????7??b?z??l0?5%K?L?EV?h????RF??k???%????fU: ?????r<-D1W???[???T?????4???.K?(?u?T??JmOt[y5????P???????d??[o~??V????A;??u\?U?B#?&up?v????4?.?4;????l????????{/?%q????Y?n??#c$-} e?j8???)?? h???^?FIUh?U?h~'?e????z?~$??pm???q?6Z???@???l?#??:?5? 6GW?Bhfs|??j?7?CdS??M?U??>I?2L????????_??|????n???J???0??,?td'P???'?Dz+a? ??p?S???z!?????l?BJv?????4?7?<,?\?'G0T??;?K?L?> endobj + 393 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 713.716 236.381 724.187] + /A << /S /GoTo /D (subsection.4.3.1) >> + >> endobj + 398 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 697.308 204.919 708.85] + /A << /S /GoTo /D (section.4.4) >> + >> endobj + 399 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 681.708 215.031 693.249] + /A << /S /GoTo /D (section.4.5) >> + >> endobj + 400 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 666.107 211.086 677.649] + /A << /S /GoTo /D (section.4.6) >> + >> endobj + 401 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 650.506 278.373 662.048] + /A << /S /GoTo /D (subsection.4.6.1) >> + >> endobj + 402 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 634.905 226.179 646.447] + /A << /S /GoTo /D (subsection.4.6.2) >> + >> endobj + 403 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 619.305 249.014 630.846] + /A << /S /GoTo /D (subsection.4.6.3) >> + >> endobj + 404 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 603.704 272.416 615.245] + /A << /S /GoTo /D (subsection.4.6.4) >> + >> endobj + 405 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 589.901 202.986 599.381] + /A << /S /GoTo /D (subsection.4.6.5) >> + >> endobj + 406 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 574.3 168.376 584.044] + /A << /S /GoTo /D (section.4.7) >> + >> endobj + 407 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 556.901 248.217 568.443] + /A << /S /GoTo /D (subsection.4.7.1) >> + >> endobj + 408 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 543.099 276.202 552.842] + /A << /S /GoTo /D (subsection.4.7.2) >> + >> endobj + 409 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 525.7 286.463 537.242] + /A << /S /GoTo /D (subsection.4.7.3) >> + >> endobj + 410 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 510.099 252.819 521.641] + /A << /S /GoTo /D (subsection.4.7.4) >> + >> endobj + 411 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 494.498 185.113 505.776] + /A << /S /GoTo /D (section.4.8) >> + >> endobj + 412 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 480.546 142.453 490.175] + /A << /S /GoTo /D (section.4.9) >> + >> endobj + 413 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 464.946 232.057 474.575] + /A << /S /GoTo /D (subsection.4.9.1) >> + >> endobj + 414 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 437.512 318.264 449.069] + /A << /S /GoTo /D (chapter.5) >> + >> endobj + 415 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 423.695 173.019 432.895] + /A << /S /GoTo /D (section.5.1) >> + >> endobj + 416 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 406.296 291.813 417.838] + /A << /S /GoTo /D (subsection.5.1.1) >> + >> endobj + 417 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 390.695 246.045 402.237] + /A << /S /GoTo /D (subsection.5.1.2) >> + >> endobj + 418 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 375.094 213.656 386.372] + /A << /S /GoTo /D (subsection.5.1.3) >> + >> endobj + 419 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 361.471 175.24 371.035] + /A << /S /GoTo /D (section.5.2) >> + >> endobj + 420 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 343.893 325.786 355.434] + /A << /S /GoTo /D (subsection.5.2.1) >> + >> endobj + 421 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 328.292 341.835 339.834] + /A << /S /GoTo /D (subsection.5.2.2) >> + >> endobj + 422 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 312.691 252.072 324.233] + /A << /S /GoTo /D (subsection.5.2.3) >> + >> endobj + 423 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 297.09 222.702 308.089] + /A << /S /GoTo /D (section.5.3) >> + >> endobj + 424 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 281.49 257.183 293.031] + /A << /S /GoTo /D (subsection.5.3.1) >> + >> endobj + 425 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 265.889 278.493 277.431] + /A << /S /GoTo /D (subsection.5.3.2) >> + >> endobj + 426 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 252.086 224.057 261.83] + /A << /S /GoTo /D (subsection.5.3.3) >> + >> endobj + 427 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 236.486 176.904 246.229] + /A << /S /GoTo /D (section.5.4) >> + >> endobj + 428 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 210.776 155.953 220.46] + /A << /S /GoTo /D (appendix.A) >> + >> endobj + 429 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 185.196 190.473 194.416] + /A << /S /GoTo /D (appendix.B) >> + >> endobj + 430 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 169.58 231.938 179.029] + /A << /S /GoTo /D (section.B.1) >> + >> endobj + 431 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 151.887 184.645 163.429] + /A << /S /GoTo /D (section.B.2) >> + >> endobj + 432 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 136.286 216.635 147.828] + /A << /S /GoTo /D (section.B.3) >> + >> endobj + 433 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 110.502 184.814 122.058] + /A << /S /GoTo /D (appendix.C) >> + >> endobj + 434 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 96.978 205.029 106.164] + /A << /S /GoTo /D (section.C.1) >> + >> endobj + 435 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 79.285 259.933 90.827] + /A << /S /GoTo /D (section.C.2) >> + >> endobj + 440 0 obj << + /D [438 0 R /XYZ 89 757 null] + >> endobj + 437 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 453 0 obj << + /Length 594 + /Filter /FlateDecode + >> + stream + x???[o?0???~4??|7???U?t??%?/C + I $??? ]a??Z??lO?l?8???1? ????{}J ?HK*A?h WH2???8????? + ?I\?????C?8w??[g&???V?u?0?{Z??r????O(??/??h??#??#v7?:C!? ?????O+ ?!????< ??Q/l????, ?S(????$?=h?A???l}????IJ?n3?w3#??1???0q???ql + ?A?>P??????O??GRU???e$?#0I!F:0?K???.??+??]????&?_?le + ?????2N?? ?&???y???Z?{?;??"?????b5/??i~?????1???Nj???>?F?zQ??tL> ??P???.???:?%?+?/?~ + ??X(??jY?????TeyV??n'????I?q??/?F?????ZZ)??V?4?V(D?.???O44?7?<?*??????i#(i<c??aOeRl?2?v??{?????IlZY??aI???????4h?5???{????)? + endstream + endobj + 452 0 obj << + /Type /Page + /Contents 453 0 R + /Resources 451 0 R + /MediaBox [0 0 612 792] + /Parent 456 0 R + /Annots [ 436 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 ] + >> endobj + 436 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 712.909 258.09 724.451] + /A << /S /GoTo /D (subsection.C.2.1) >> + >> endobj + 441 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 697.367 265.571 708.909] + /A << /S /GoTo /D (subsection.C.2.2) >> + >> endobj + 442 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 681.826 280.217 693.367] + /A << /S /GoTo /D (subsection.C.2.3) >> + >> endobj + 443 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 666.284 304.844 677.826] + /A << /S /GoTo /D (subsection.C.2.4) >> + >> endobj + 444 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 650.742 319.489 662.284] + /A << /S /GoTo /D (subsection.C.2.5) >> + >> endobj + 445 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 635.2 266.129 646.742] + /A << /S /GoTo /D (subsection.C.2.6) >> + >> endobj + 446 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 621.457 194.06 631.2] + /A << /S /GoTo /D (section.C.3) >> + >> endobj + 447 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 604.117 233.631 615.395] + /A << /S /GoTo /D (subsection.C.3.1) >> + >> endobj + 448 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [126.862 590.553 191.469 600.117] + /A << /S /GoTo /D (subsection.C.3.2) >> + >> endobj + 449 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 573.033 181.776 584.311] + /A << /S /GoTo /D (section.C.4) >> + >> endobj + 450 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.948 557.492 237.028 569.033] + /A << /S /GoTo /D (section.C.5) >> + >> endobj + 454 0 obj << + /D [452 0 R /XYZ 89 757 null] + >> endobj + 455 0 obj << + /D [452 0 R /XYZ 90 547.443 null] + >> endobj + 451 0 obj << + /Font << /F21 332 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 462 0 obj << + /Length 1619 + /Filter /FlateDecode + >> + stream + x??X???6 ??)t?NbE??[??v?I&M??K?-?k6??P?z???^{?4=??? H ???F?Q??xq?xv???I?2+??u??Q?WI?Yt?E??W?N??j?Uu?B#??I??y?[b/i???7?o?x??????????%?1+ ^Nz6??he?t?o???+ '#G?????R^?P?rV??]?V? ??sB????~??So??8??o{????,,???????c?.??z???r?u??7o?P?????m?3'`/3?? ?* + ??K???g??`?V?2???;??R?]/?"?);?RQ??5?#u78v????+ ?_??r???Z??e????f ??ngjXA?????????'? + .\??\r??l?U??z?mK?g>?+ endstream + endobj + 461 0 obj << + /Type /Page + /Contents 462 0 R + /Resources 460 0 R + /MediaBox [0 0 612 792] + /Parent 456 0 R + /Annots [ 457 0 R 458 0 R 459 0 R ] + >> endobj + 457 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [215.227 565.864 232.542 577.406] + /A << /S /GoTo /D (cite.LLVM) >> + >> endobj + 458 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [236.17 565.864 265.371 577.406] + /A << /S /GoTo /D (cite.LLVM) >> + >> endobj + 459 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [137.781 476.2 139.773 487.742] + /A << /S /GoTo /D (section*.3) >> + >> endobj + 6 0 obj << + /D [461 0 R /XYZ 90 726.045 null] + >> endobj + 460 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F14 463 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 475 0 obj << + /Length 2143 + /Filter /FlateDecode + >> + stream + x??X?o?8?_??????/}????v ??to????[?,????????CYv?{ ??8$???o>8???~?xw{???RD+R?F??Q??Lg,U"?]D???'?-fs???;?uv?#???*???7o}suy????zS????m_5KO~?8????g_o?.>?^|?? ???]?\?Q?????G ??8SE=9?u?????n.~??t??v/SH?2??L?,???`1 + UI??d/x\?%???R]????Pn?a ???|??0V8G?q??C???;C?;?4?l??`)??(??@??~?T 9 _???G???m`r?y????E???;??s???D.??~z?k????\rV?d? P??gIl=????7?? + ?u?$M'?ex??? L?,B?vc??? gV?A?!??? j!??p???????c2????X????=8P??]sm)hDr^???> endobj + 465 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [494.649 480.03 513.996 491.587] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 477 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 468.09 113.898 479.631] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 466 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [118.728 468.09 142.877 479.631] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 467 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [241.4 369.438 247.768 382.003] + /A << /S /GoTo /D (Hfootnote.1) >> + >> endobj + 468 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [316.759 357.482 332.6 369.024] + /A << /S /GoTo /D (section.2.4) >> + >> endobj + 469 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [193.811 326.691 209.651 336.14] + /A << /S /GoTo /D (section.2.2) >> + >> endobj + 476 0 obj << + /D [474 0 R /XYZ 89 757 null] + >> endobj + 10 0 obj << + /D [474 0 R /XYZ 90 726.045 null] + >> endobj + 14 0 obj << + /D [474 0 R /XYZ 90 546.73 null] + >> endobj + 18 0 obj << + /D [474 0 R /XYZ 90 303.659 null] + >> endobj + 478 0 obj << + /D [474 0 R /XYZ 104.346 94.762 null] + >> endobj + 473 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F14 463 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 496 0 obj << + /Length 2703 + /Filter /FlateDecode + >> + stream + x??YY???~?_1?_f? ??IW?*??\V?%E?JR%?????0??c{??t??!?]?*~?+ ???{???????Z?|?? y~R?M??c?v????iZ??=?}??2???I?"3=?qh?M?:+?&'???/x??Q???Ss?Uy};??X?{?:??r??e????sEV ^eF???e?;&?????>??P???????! @????????l]?`tF?p?;??:?"?B?????r?_??????`n?K???P?????G2?g?~? ??s?C??Y??s?:F]a?5j?Ub0Z?B???+ok ?]`??y;W?I?f7Bf??[[0zW???;v&m?l?{?0q??q?????M???qy*??3??????HH3.?[0HN?u?; + ?o?j?r????wp?????w????.???@?y????? ?Q?z<8Gw;T?;?Y??;??z?.4?I+ h(?"?v??RC??wKz??5??+ i?.F??????? "!\??f?!$V?~??~zX? $3?3?????x(J?5????ry??????J"Y?G@oe~??!I???+ab?ki?C*??T??L??G!??m?(?_w?(???W?d0??????5?a? ?*N?Q??L@;??<$?v??l?Ah???q#?????;d??8,?e?W??p?5?K?&+???(?)?{K/x??Z???F-??????4S???{??)$ ??k???:?H?9???hd8???9F?????Z?H??i??Y?????l??FN?8??,X/+ ?cyn+ endstream + endobj + 495 0 obj << + /Type /Page + /Contents 496 0 R + /Resources 494 0 R + /MediaBox [0 0 612 792] + /Parent 456 0 R + /Annots [ 470 0 R 471 0 R 472 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 ] + >> endobj + 470 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 651.908 104.844 663.45] + /A << /S /GoTo /D (figure.caption.6) >> + >> endobj + 471 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [325.186 651.908 341.026 663.45] + /A << /S /GoTo /D (figure.caption.7) >> + >> endobj + 472 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [237.745 639.953 244.113 652.518] + /A << /S /GoTo /D (Hfootnote.2) >> + >> endobj + 480 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [334.104 394.842 380.248 406.383] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 481 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [384.999 394.842 409.148 406.383] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 482 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [452.859 394.842 468.699 406.383] + /A << /S /GoTo /D (figure.caption.8) >> + >> endobj + 483 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [135.689 358.976 215.141 370.518] + /A << /S /GoTo /D (cite.PRACPARSE) >> + >> endobj + 484 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [218.687 358.976 242.837 370.518] + /A << /S /GoTo /D (cite.PRACPARSE) >> + >> endobj + 485 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [272.797 132.009 279.165 144.574] + /A << /S /GoTo /D (Hfootnote.3) >> + >> endobj + 486 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [283.506 77.771 318.893 89.352] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 487 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [322.472 77.771 342.19 89.352] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 488 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [361.055 77.771 425.015 89.352] + /A << /S /GoTo /D (cite.PRACPARSE) >> + >> endobj + 489 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [428.594 77.771 448.312 89.352] + /A << /S /GoTo /D (cite.PRACPARSE) >> + >> endobj + 497 0 obj << + /D [495 0 R /XYZ 89 757 null] + >> endobj + 22 0 obj << + /D [495 0 R /XYZ 90 726.045 null] + >> endobj + 499 0 obj << + /D [495 0 R /XYZ 90 625 null] + >> endobj + 501 0 obj << + /D [495 0 R /XYZ 90 571.192 null] + >> endobj + 26 0 obj << + /D [495 0 R /XYZ 90 468.994 null] + >> endobj + 502 0 obj << + /D [495 0 R /XYZ 90 355.978 null] + >> endobj + 503 0 obj << + /D [495 0 R /XYZ 104.346 117.668 null] + >> endobj + 504 0 obj << + /D [495 0 R /XYZ 104.346 107.066 null] + >> endobj + 494 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R /F58 500 0 R /F14 463 0 R /F11 361 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 514 0 obj << + /Length 2902 + /Filter /FlateDecode + >> + stream + x???r?8????Q??4"%???$?l%5S??kk?29???nm?RG;??_?+ ??T????+"/K?0??w????/?w?[_2??????0 at GFI??%?j?Q??? /????MG????-???r)d?????w7o.^?\|??M? ?=?$?????w???/ + ?"?????????????"??IDF???T?eG?????;?o;B??P??v?p??0??4x???$?i'?ro#?b??q???*??0\????mrf?.?:??w?&BW?k???R???&?p??????j???Z?S??bUS ??????A?????J??aB:?NP?pu/E?m??h,H?'????L???#??*?8M?Zv?J?+ ?d`&7?q? {\CeX??3?{?d]?????????????????I@?T?3?GnZ[??m?[p??????]?|???? ???Aog?}qv?? ?*??????c?q????QnK=??q????n?#?? + ?QdG?f??+j??$??tbQ@??G?N?"L?j?0?th??V?????????????k?????SY0?,??_? ?8j?????+ K???{Ba??#a??!?*??????>???"?? R??=Q$$?s???#ZS???1?????3YC???c?&??????nM?p?????)U ?I?qr$> endobj + 490 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [224.128 688.999 239.969 700.54] + /A << /S /GoTo /D (figure.caption.8) >> + >> endobj + 491 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [357.367 688.999 373.207 700.54] + /A << /S /GoTo /D (figure.caption.9) >> + >> endobj + 492 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [134.128 641.163 271.645 652.72] + /A << /S /GoTo /D (cite.CACWC) >> + >> endobj + 493 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [275.355 641.163 299.504 652.72] + /A << /S /GoTo /D (cite.CACWC) >> + >> endobj + 507 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [488.199 415.051 504.04 432.585] + /A << /S /GoTo /D (figure.caption.8) >> + >> endobj + 508 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [468.369 229.104 511.227 240.646] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 509 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 217.149 113.153 228.691] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 515 0 obj << + /D [513 0 R /XYZ 89 757 null] + >> endobj + 516 0 obj << + /D [513 0 R /XYZ 90 613.818 null] + >> endobj + 30 0 obj << + /D [513 0 R /XYZ 90 339.772 null] + >> endobj + 34 0 obj << + /D [513 0 R /XYZ 90 189.953 null] + >> endobj + 512 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F31 350 0 R /F30 348 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 534 0 obj << + /Length 2775 + /Filter /FlateDecode + >> + stream + x??Y??????Bo?M,?+ ?o?884?????zoq7W??V0 L??{=?LMc7'?wM?#r0??t[????i i`?~???t??:?2??i???fm??q??[!?2Mi?????f???X?!b?5?2??@y?c?P??!L???????f?i"??c??F?'??w??X?"?~D$Bj Z?d%f?=h.? )}?(?2??ZpJi?g?"?)?R????U<5?????WV(K???;4?)??G.?????gg(GQE??( + ?? z?Zb?9?q??c???????????X?]????8?????????*pH@!??cm?6Z??Y??s + ???$??o??i%??!?A?m?t?????~??Xl6M?bBrL\?cg??7~?=??R????? ????&?2x?Q??????0???!/??0????;??4x????7?pW?^?'N??+ v?n??\$o?3?+???sX????R=?^???V?" 6#"PO????8 ?eP????h?4*???F???F?| ? ??E3 {??r??l?!Go?P?jt7x9???/8e???Z;???,5??K )??xQ?3??|%? V?3rA?d3??Gg&?????????!R6pj=? + bwI???qU#z??/?#?Q?j???\2? + ????%???8??I???,9 R??+ '5? ???k??b??s????b:D?????v?^??@????r??^{j??SC??= + ??[?k??qOn+?????k???+ ??p]"??g3??D}2?+ ?N c??????7?? ??B?w^??a?$E?+|2]??$8?]fO??b?5????n????+ n??a??????~??w??U?}O-????c?$???????f?A??nY??t?5?x(???9???7??S?C???o ????????????wj??O????0m?U??@??a?????;`&????O?????D?eS?H?????_j????2> >~?I???K??A% ??(??p'?f!x??=?????????!?Z??? ??????!?w+????i?(Le?*?0?r?Fr g????p?*??9U + ??J_?I?=?ZgQ?E2?Z???"??H??rk6& ??' ????aG?d?X??'???????e.???*?K1???h??M[ + endstream + endobj + 533 0 obj << + /Type /Page + /Contents 534 0 R + /Resources 532 0 R + /MediaBox [0 0 612 792] + /Parent 456 0 R + /Annots [ 510 0 R 536 0 R 511 0 R 518 0 R 519 0 R 520 0 R 521 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R ] + >> endobj + 510 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [456.699 671.503 513.996 683.059] + /A << /S /GoTo /D (cite.TYPESYS) >> + >> endobj + 536 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 659.563 123.275 671.104] + /A << /S /GoTo /D (cite.TYPESYS) >> + >> endobj + 511 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [126.822 659.563 150.971 671.104] + /A << /S /GoTo /D (cite.TYPESYS) >> + >> endobj + 518 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [350.969 412.933 442.231 424.475] + /A << /S /GoTo /D (cite.TYPESYS) >> + >> endobj + 519 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [446.911 412.933 471.06 424.475] + /A << /S /GoTo /D (cite.TYPESYS) >> + >> endobj + 520 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [207.508 300.463 213.876 312.956] + /A << /S /GoTo /D (Hfootnote.4) >> + >> endobj + 521 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [324.271 288.523 340.112 300.065] + /A << /S /GoTo /D (figure.caption.10) >> + >> endobj + 523 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [504.859 270.281 511.227 282.759] + /A << /S /GoTo /D (Hfootnote.5) >> + >> endobj + 524 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [276.102 204.218 297.322 215.759] + /A << /S /GoTo /D (cite.PERL_YL) >> + >> endobj + 525 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [300.869 204.218 325.018 215.759] + /A << /S /GoTo /D (cite.PERL_YL) >> + >> endobj + 526 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [295.2 162.065 314.617 173.607] + /A << /S /GoTo /D (cite.TCL_YL) >> + >> endobj + 527 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [318.164 162.065 342.314 173.607] + /A << /S /GoTo /D (cite.TCL_YL) >> + >> endobj + 528 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [201.571 108.41 223.788 119.499] + /A << /S /GoTo /D (cite.ZONECFG_YL) >> + >> endobj + 529 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [227.335 108.41 251.484 119.499] + /A << /S /GoTo /D (cite.ZONECFG_YL) >> + >> endobj + 535 0 obj << + /D [533 0 R /XYZ 89 757 null] + >> endobj + 38 0 obj << + /D [533 0 R /XYZ 90 726.045 null] + >> endobj + 42 0 obj << + /D [533 0 R /XYZ 90 372.466 null] + >> endobj + 537 0 obj << + /D [533 0 R /XYZ 104.346 105.289 null] + >> endobj + 538 0 obj << + /D [533 0 R /XYZ 104.346 94.762 null] + >> endobj + 532 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F14 463 0 R /F19 498 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 567 0 obj << + /Length 1696 + /Filter /FlateDecode + >> + stream + x??]s?8????o???????????io??c???c+?????lB???????Pn??{h?ZmV??k????;/N?oO?#?V?G?43n) mv??\|e?lD?m?????9 F:y??X)!Q?N|???@?S??vm?5 ?[?]?, fq,`>???j???jA??MBs?[)$?SwYwk??gM??gj??8 + ???+ g?"`?  + ? `LT!?????6???\???!?.2? "???t?? ?J?Z???Sdb???*%???*S?????? + + Lq1???+6??jg?Re?8??M??p?Y7*?^i??U+,?z? ??h;DY?<??TF,s????u^v?:h??IL?+ s+ ????})???VB)??)"I??*?x?0??????l?u?z??S??? ??S?' ?t~h?V??4???,??N2?W?`??5 F??:??(W?????1?d????H??????>v6A?u.?'E??_!1+ ?.?G8S?"??f?p?!a?x?Q???x? ???? {???1??TLb?I?>??e??}?YOc{?``?C?C???W??????C???. ????(?q>VX?1a?q??A$>????N????zFG"?e???x?;;7RFI???7???.??3?x????I?? ??? + endstream + endobj + 566 0 obj << + /Type /Page + /Contents 567 0 R + /Resources 565 0 R + /MediaBox [0 0 612 792] + /Parent 573 0 R + /Annots [ 530 0 R 569 0 R 531 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 561 0 R 562 0 R 559 0 R 560 0 R ] + >> endobj + 522 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./3c-compiler-Edd-Barrett-dottex-fig1.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 574 0 R + /BBox [36 36 324 225] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 575 0 R + >>/Font << /R8 576 0 R>> + >> + /Length 1102 + /Filter /FlateDecode + >> + stream + x??V?r7??W????`4?p???b?U????f??"?D??< ????IK5??????z???$T????^?x??4? ??H:%(D%???]??w??]??v???c+?-?7??X? ???s?db)J-?heQ?*zi??????????W(=???7bu;?#??,)????? ???>???????????@&h$-?????p????H?h?R?O??2?uQ???Q2?`?$??0??g??S*M?&??????i????R???9??i"9 ??s?t"???M?????'$E?N?T?G(r???!/I,"??>c???2> + endobj + 575 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 576 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 530 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [343.244 456.718 513.996 468.259] + /A << /S /GoTo /D (cite.PCC_YL) >> + >> endobj + 569 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [113.91 444.762 266.338 456.304] + /A << /S /GoTo /D (cite.PCC_YL) >> + >> endobj + 531 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [269.885 444.762 294.035 456.304] + /A << /S /GoTo /D (cite.PCC_YL) >> + >> endobj + 544 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [365.118 410.183 386.478 421.272] + /A << /S /GoTo /D (cite.RUBY_YL) >> + >> endobj + 545 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [390.024 410.183 414.174 421.272] + /A << /S /GoTo /D (cite.RUBY_YL) >> + >> endobj + 546 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [400.675 374.698 421.138 386.239] + /A << /S /GoTo /D (cite.PHP_YL) >> + >> endobj + 547 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [424.684 374.698 448.834 386.239] + /A << /S /GoTo /D (cite.PHP_YL) >> + >> endobj + 548 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [416.605 339.665 442.767 351.207] + /A << /S /GoTo /D (cite.CWM_YL) >> + >> endobj + 549 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [446.313 339.665 470.463 351.207] + /A << /S /GoTo /D (cite.CWM_YL) >> + >> endobj + 550 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [483.946 257.645 490.314 270.406] + /A << /S /GoTo /D (Hfootnote.6) >> + >> endobj + 551 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [353.601 233.735 369.442 245.276] + /A << /S /GoTo /D (section.2.2) >> + >> endobj + 552 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [271.668 175.625 289.93 188.103] + /A << /S /GoTo /D (cite.FLEX) >> + >> endobj + 553 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [293.477 175.625 317.626 188.103] + /A << /S /GoTo /D (cite.FLEX) >> + >> endobj + 554 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [324.022 175.625 343.917 188.103] + /A << /S /GoTo /D (cite.YACC) >> + >> endobj + 555 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [347.464 175.625 371.614 188.103] + /A << /S /GoTo /D (cite.YACC) >> + >> endobj + 556 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [378.01 175.625 394.787 188.103] + /A << /S /GoTo /D (cite.BISON) >> + >> endobj + 557 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [398.333 175.625 422.483 188.103] + /A << /S /GoTo /D (cite.BISON) >> + >> endobj + 558 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [424.685 175.625 431.053 188.103] + /A << /S /GoTo /D (Hfootnote.7) >> + >> endobj + 561 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [490.186 129.47 511.227 141.012] + /A << /S /GoTo /D (cite.CYGWIN) >> + >> endobj + 562 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [113.91 118.322 138.06 128.793] + /A << /S /GoTo /D (cite.CYGWIN) >> + >> endobj + 559 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [244.357 77.771 261.955 90.29] + /A << /S /GoTo /D (cite.GCC) >> + >> endobj + 560 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [264.394 77.771 284.112 90.29] + /A << /S /GoTo /D (cite.GCC) >> + >> endobj + 568 0 obj << + /D [566 0 R /XYZ 89 757 null] + >> endobj + 540 0 obj << + /D [566 0 R /XYZ 90 733.816 null] + >> endobj + 570 0 obj << + /D [566 0 R /XYZ 104.346 105.289 null] + >> endobj + 572 0 obj << + /D [566 0 R /XYZ 104.346 94.762 null] + >> endobj + 565 0 obj << + /Font << /F21 332 0 R /F14 463 0 R /F60 571 0 R /F31 350 0 R >> + /XObject << /Im2 522 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 599 0 obj << + /Length 3291 + /Filter /FlateDecode + >> + stream + x?????6?????n????9/?$?=?+ 7O?M"6?y????|??}?_?6???(??????{(??[?xG????{|???Mu*J??h???????r/??~|??????????$P#6?N?^?????{?$69??m???xs?????4?????????&p???C??"O?!]Ey??N + !??S?E"?EGmJ??{o????+ a?7?????G|,???? ??k?`.?l?;?X?????tY? ??????w??E??)Y + b??b?n??????.?u`??x???D%^?J?{*????B?????rC13??]Q???,??O-?%o??c.???'?????%????}???f?2?????-?)Z?S+l]?X??~?y1?i?y{?b??8?????}? ??8Ct??B??S????i???%'???????$???UQ?O??M??tk???8????#F^?7?Z3???V??H????1?)x  ??&%?M???G.V?????j?O?6??N?@P?????.?????O.??s#2?>?v#r%??*??i?9????X??RzM;?+ ???????n?b??????$?O,=?Vn?K?0A?:V`???=?? 79????DL ? ?m?@???FE?`??????^?????f?5UP????L?? ?????Z?W{b?l?????tt???i?2M6XX??n + LE?e?+RKL'?????K"??@c??^(y[????F?????4?????}Jk/??H?????7?Wd>9]??c?????????*g???n???9?H*6?!???'??#??????U.?wH??n({?S?AM??[EL???;Z:1 + g?r?VY/6????Vk?-2>?H?E)??m?N G??C?L?Vc?HxA??_????o??Zq??2?>??????w?]???>?$,???X??' ??l????t???KX6 ?Z5?S[p1????3?d + ??Y????????FQ??i?????g?c?X??\h??'sK?? + ?:[???|?Y c?A??`???*??2s[?w?+ ?h/??]??X?????|:??H?y?o????`? ?(R???[???ONn0???R?* + endstream + endobj + 598 0 obj << + /Type /Page + /Contents 599 0 R + /Resources 597 0 R + /MediaBox [0 0 612 792] + /Parent 573 0 R + /Annots [ 563 0 R 564 0 R 586 0 R 587 0 R 588 0 R 602 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R ] + >> endobj + 563 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [287.204 670.641 331.746 682.183] + /A << /S /GoTo /D (cite.SQUEAKOO) >> + >> endobj + 564 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [335.426 670.641 359.575 682.183] + /A << /S /GoTo /D (cite.SQUEAKOO) >> + >> endobj + 586 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [142.031 531.95 160.183 543.491] + /A << /S /GoTo /D (cite.BIGPIC) >> + >> endobj + 587 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [164.504 531.95 188.653 543.491] + /A << /S /GoTo /D (cite.BIGPIC) >> + >> endobj + 588 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [479.386 283.922 513.996 295.479] + /A << /S /GoTo /D (cite.LUAVM) >> + >> endobj + 602 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 271.982 121.163 284.547] + /A << /S /GoTo /D (cite.LUAVM) >> + >> endobj + 589 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [125.734 271.982 149.883 284.547] + /A << /S /GoTo /D (cite.LUAVM) >> + >> endobj + 590 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [152.085 271.982 158.453 284.547] + /A << /S /GoTo /D (Hfootnote.8) >> + >> endobj + 591 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [196.112 176.326 236.441 187.882] + /A << /S /GoTo /D (cite.SHOWDOWN) >> + >> endobj + 592 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [239.987 176.326 264.137 187.882] + /A << /S /GoTo /D (cite.SHOWDOWN) >> + >> endobj + 593 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [391.468 134.066 409.72 145.608] + /A << /S /GoTo /D (cite.JAZ) >> + >> endobj + 594 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [413.039 134.066 437.188 145.608] + /A << /S /GoTo /D (cite.JAZ) >> + >> endobj + 600 0 obj << + /D [598 0 R /XYZ 89 757 null] + >> endobj + 46 0 obj << + /D [598 0 R /XYZ 90 726.045 null] + >> endobj + 50 0 obj << + /D [598 0 R /XYZ 90 643.037 null] + >> endobj + 54 0 obj << + /D [598 0 R /XYZ 90 401.418 null] + >> endobj + 603 0 obj << + /D [598 0 R /XYZ 104.346 94.762 null] + >> endobj + 597 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F62 601 0 R /F14 463 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 620 0 obj << + /Length 3181 + /Filter /FlateDecode + >> + stream + x??Z[???~?_!?? ,f.??MQ???56hjoR??}??Y?Y^T????????P?V??S?Es?9???Pb?^???g????z??"??HE???E*q?????bq?}W???8_?8??e]g?J??s?^r????W\y????2?v}???zyy.??~???????wWg?>?@?XH>]?I-????F, + ???N???f??@i(??????G9??/???v@???????j?U&+z?Z.??????u?r???CY;u?)??nVg?=O???p?66vj??>????Lg + ??5??,'??m; ????O???6???F????@?|X???]??????v????[???????????????t?v(?????i?????l????s{O????J???G??z?A????H?*?? ?#???G?K)?????Tz???z(?C??5?9W at A7?2??#?U6???i?R?/?Z?(> ??K?; + ?K?-????????H?!?]? ?CN?????/??3??Q-WY?:?)??`?m??f?vw?c?PyV?hD?f??}?-???3???)?CK: g m[-???????R???b?q?N??fX???f????g????????+ kS??`xUg?({?????AH??:N???`????6?n?a??Mi???fIl?5A ?9???"+* ?k??imGc?\????? j?Y??? + ?M/}?4???? ??4?7X??$X?6l*`???v? ?)??`?A??????????"????=?%I??z???V'??Oc??X???4Zh??v?????&??r2?????w????!$s?H?>???2?a-??????????m{???NYo+?V???}??"dlE1a???D ?t???V??????^6<0?6)?????m??v???Z?#??[<8??Rz???DC?????)L?w? + ???:?.-??6?ih(??????vA??U?=wMY?&?5-????K??_C??Y?ft)@?h ???][s 4g)a^?Rge????S\l????!a?-v"DD??#??{?>t?????"_?q???D???? &S???%?Jh???7B?G???j?????1A???=?t??o?????*??8Jc??:s?????*j?????????]?? + ???;'??(?;???5?+ ??s?5C|j]?2?o-op??w??X????N? ?I?? ??+ Mbab2_?????????Gb?????oYp?mO?= X,8+ ?~?F0???c|m?L?Mc:?r?`??J? ??LcF?U~?? + E???? j?X??9?pK? ???????0?????j??T??/?'?x???+ ?J??? +  ?Nb??b?CD;??B?c;?z?p??"?? C?1k???? ??  ?=*?*?*????8=?????????)?PG`?Ga?eA???@?????a??3I?j?_??C??^???? ?? ?A???/????eD?#Z-!7??c?[T????!?0d???#2J|;?? #:????ZU??>Ed6?????~??)vAd??+ ??/??h??/? + ???:??#?.??:?:???vw???????r??????0MnA?n???}??????l??????fx??#O???s5????k(?o*??????????W~??S?7?????P#?????b3zI?N~W????&C??U?{????i???????1?[??3??? ???????>??Kdiz*M????z??s???xT??????U??????H??H ?r??????D???c???????^~WK??/0??]????wH + endstream + endobj + 619 0 obj << + /Type /Page + /Contents 620 0 R + /Resources 618 0 R + /MediaBox [0 0 612 792] + /Parent 573 0 R + /Annots [ 595 0 R 596 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R ] + >> endobj + 595 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [453.755 700.954 472.007 712.496] + /A << /S /GoTo /D (cite.JAZ) >> + >> endobj + 596 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [475.554 700.954 499.703 712.496] + /A << /S /GoTo /D (cite.JAZ) >> + >> endobj + 609 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [259.841 625.153 277.156 636.695] + /A << /S /GoTo /D (cite.LLVM) >> + >> endobj + 610 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [280.58 625.153 309.78 636.695] + /A << /S /GoTo /D (cite.LLVM) >> + >> endobj + 611 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [163.61 589.288 302.295 600.83] + /A << /S /GoTo /D (cite.CACWC) >> + >> endobj + 612 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [306.297 589.288 330.446 600.83] + /A << /S /GoTo /D (cite.CACWC) >> + >> endobj + 613 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [176.652 577.333 192.492 589.898] + /A << /S /GoTo /D (figure.caption.11) >> + >> endobj + 614 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [190.5 577.333 196.868 589.898] + /A << /S /GoTo /D (Hfootnote.9) >> + >> endobj + 615 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [132.517 553.422 148.358 564.964] + /A << /S /GoTo /D (section.2.4) >> + >> endobj + 616 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [375.927 475.268 386.173 487.834] + /A << /S /GoTo /D (Hfootnote.10) >> + >> endobj + 621 0 obj << + /D [619 0 R /XYZ 89 757 null] + >> endobj + 58 0 obj << + /D [619 0 R /XYZ 90 684.786 null] + >> endobj + 62 0 obj << + /D [619 0 R /XYZ 90 357.939 null] + >> endobj + 622 0 obj << + /D [619 0 R /XYZ 90 218.513 null] + >> endobj + 623 0 obj << + /D [619 0 R /XYZ 90 198.987 null] + >> endobj + 624 0 obj << + /D [619 0 R /XYZ 90 184.741 null] + >> endobj + 625 0 obj << + /D [619 0 R /XYZ 90 170.494 null] + >> endobj + 626 0 obj << + /D [619 0 R /XYZ 90 156.247 null] + >> endobj + 627 0 obj << + /D [619 0 R /XYZ 90 142.001 null] + >> endobj + 628 0 obj << + /D [619 0 R /XYZ 90 127.754 null] + >> endobj + 629 0 obj << + /D [619 0 R /XYZ 104.346 105.364 null] + >> endobj + 630 0 obj << + /D [619 0 R /XYZ 104.346 94.762 null] + >> endobj + 618 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F14 463 0 R /F20 335 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 639 0 obj << + /Length 1771 + /Filter /FlateDecode + >> + stream + x??YKs?6??W??dJeB/?D?f???k???q???CQ'???T????%J?????z?????b???y???G?O????"??i??I`y???%??qp?/?fp?]?T? ??????_?)?H5 ?TPW????G??????,?bB?@??qb?????2?????g*????^_a?\???2B???@Ck/?'???)H"???F??q/?q??7??:???X ?S??????Ev?[???L?|J?nZ?????g???+?,?????n???n??%\Xl??yp????M ?1KA`*QL??&-?fR'??f???`??3??:Y=a??????pw+ (c?U?CP?MC??M?n?????=?v???? ?J?s?[h????TX?X:????{????(w (9?H???D"u*?.??L ???\G?p?????~???nG7??(????????2??? ????D Qa?????????? -????"?]?4@??}?D??????8??eJ?????d?*zpF"???\~?+?L??t + ?{OgoQ?s?*w?B??N?)??}Xb J??P?*???^sr??{?? + dWa?ZmToq???f0=vZ3?w??;?468*?c???S?r??K???N????g0? T8$??8PN*?+?F4hf??t+ endstream + endobj + 638 0 obj << + /Type /Page + /Contents 639 0 R + /Resources 637 0 R + /MediaBox [0 0 612 792] + /Parent 573 0 R + /Annots [ 632 0 R ] + >> endobj + 617 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./3c-compiler-Edd-Barrett-dottex-fig2.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 650 0 R + /BBox [36 36 410 324] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 651 0 R + >>/Font << /R8 652 0 R>> + >> + /Length 2052 + /Filter /FlateDecode + >> + stream + x??XMs?7???B??PU?o!e:??i??5?'?????>??zm?`g<g???j???2???O????_%??n???h??%o???????C]/??s?v??%?\_??Y??.???m?_=?????hc??\`?,??)?`WT??)+ + ?kJMH???????P??}mv????U??/?,??0)???u2Q]???????uvs?????????rq????r?y?J6?????u&[ 9j[?t???#????????f??????k?????aA?????RH????&kU?0???h??|???Ao?h??? N?)?????,?c??j(???????e?8?lQpx???n??-?p%?H???????????pV???k78??C???8??6?]????+%?JKs???l?&??? + )??;??????B?:?;jg?????LFn?J?Y?????????????^?,???V??????????? P'8????^?Gww?v??"?)9??CUB}`?? ???"?L??s\????,D??_?0???]??D??D|??!8??????D????Vv ?8:??HG? + k?s?/??ps8?|}?n{wy7Cgb?`)R-&???4???$??? Ml?O?s ??Z6?? )??!?gQ8??O!DMi + 1??0??#I??$&??~???9??y@??A????Z?;?\?G + ?lp?F??8s?8?(?:???{??,.?F?+|A?????mH ???????????V??????G???h? ?j}zv6?Mj??M?????4??]??$???j?0V??mW???Y??u??%????%?F???= ?(?? ?g?:?????m????????b1>??a ???"+?%2?`??????4g???? EH?^?O???????CAK?A?$/??????:?xS?,???????Q%?v???,? + endstream + endobj + 650 0 obj + << + /Producer (GPL Ghostscript 8.63) + /CreationDate (D:20090521011555+01'00') + /ModDate (D:20090521011555+01'00') + /Creator (Graphviz version 2.12 \(Sat Apr 25 01:56:11 UTC 2009\)) + /Author (\(edd\) ) + /Title (G) + >> + endobj + 651 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 652 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 632 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [120.951 193.338 136.791 204.88] + /A << /S /GoTo /D (lstlisting.2.1) >> + >> endobj + 640 0 obj << + /D [638 0 R /XYZ 89 757 null] + >> endobj + 631 0 obj << + /D [638 0 R /XYZ 90 733.816 null] + >> endobj + 641 0 obj << + /D [638 0 R /XYZ 90 391.945 null] + >> endobj + 642 0 obj << + /D [638 0 R /XYZ 90 363.452 null] + >> endobj + 643 0 obj << + /D [638 0 R /XYZ 90 349.205 null] + >> endobj + 644 0 obj << + /D [638 0 R /XYZ 90 334.959 null] + >> endobj + 645 0 obj << + /D [638 0 R /XYZ 90 306.466 null] + >> endobj + 646 0 obj << + /D [638 0 R /XYZ 90 277.972 null] + >> endobj + 647 0 obj << + /D [638 0 R /XYZ 90 263.726 null] + >> endobj + 648 0 obj << + /D [638 0 R /XYZ 90 249.479 null] + >> endobj + 649 0 obj << + /D [638 0 R /XYZ 90 235.233 null] + >> endobj + 66 0 obj << + /D [638 0 R /XYZ 90 154.138 null] + >> endobj + 637 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F31 350 0 R >> + /XObject << /Im3 617 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 671 0 obj << + /Length 2621 + /Filter /FlateDecode + >> + stream + x?????8?^_?[T/?????e???%?{?z???:?msJ??Z???7@??\QgfUA@l??j????????g%WEX?*]?mW?Xeq??\?U???}u?]u?VY??]g?&J?q??^??????x???6???6;?}??J??|?p???????7?+I?Ga???ps? V???D?????XE0???7????D???i??H?n@?He??7?????i??EO ??!????????}? p???:.*??????my?A???~?}?V???AK?????n??q????????N?? ?0??L??p???ox ???????;???__|??2????E???>??D + ??eW?E(?lz????IXd??f?r?r?Qe???h???/8??w>?R??}-?9?D ????}??f?k???{??)?^~`??? ?(0e?.???<7??h?d*?g??????????? + ???+ ??R`??3|\???????"kz????a?{?mI3sO$?6??y??????&c?????????bp???Wg??{ ?^????Y??@e????w,%g????'?????[.?????????K?+????Z?O2?`?=???+ endstream + endobj + 670 0 obj << + /Type /Page + /Contents 671 0 R + /Resources 669 0 R + /MediaBox [0 0 612 792] + /Parent 573 0 R + /Annots [ 634 0 R 635 0 R 636 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R ] + >> endobj + 633 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./3c-compiler-Edd-Barrett-dottex-fig3.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 675 0 R + /BBox [36 36 149 180] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 676 0 R + >>/Font << /R8 677 0 R>> + >> + /Length 570 + /Filter /FlateDecode + >> + stream + x??UMo?0 ??W??]4Q?q-?;??.??i?vm?I??????1?C??H???H>J???N?~\???m??W?5???/?{? k????q????0???!?b + z??????M?B??9e?+ #?J ?w1?aNA*?JwQzU?r???1??????1C`? ???u????_?C(C???%??u0?c?6?q)???T??6??3v??1???UxSKw?SM???*w#?_~#?> + endstream + endobj + 675 0 obj + << + /Producer (GPL Ghostscript 8.63) + /CreationDate (D:20090521011556+01'00') + /ModDate (D:20090521011556+01'00') + /Creator (Graphviz version 2.12 \(Sat Apr 25 01:56:11 UTC 2009\)) + /Author (\(edd\) ) + /Title (G) + >> + endobj + 676 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 677 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 634 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [462.524 712.909 472.77 725.474] + /A << /S /GoTo /D (Hfootnote.11) >> + >> endobj + 635 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [391.291 688.999 408.606 700.54] + /A << /S /GoTo /D (cite.LLVM-TYPES) >> + >> endobj + 636 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [412.59 688.999 442.109 700.54] + /A << /S /GoTo /D (cite.LLVM-TYPES) >> + >> endobj + 653 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [315.258 547.224 350.466 558.766] + /A << /S /GoTo /D (cite.AUNIX) >> + >> endobj + 654 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [355.151 547.224 379.3 558.766] + /A << /S /GoTo /D (cite.AUNIX) >> + >> endobj + 655 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [116.631 463.538 259.455 475.079] + /A << /S /GoTo /D (cite.EXTENDPY) >> + >> endobj + 656 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [264.576 463.538 288.726 475.079] + /A << /S /GoTo /D (cite.EXTENDPY) >> + >> endobj + 657 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [299.466 463.538 375.979 475.079] + /A << /S /GoTo /D (cite.EXTENDLUA) >> + >> endobj + 658 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [381.1 463.538 405.25 475.079] + /A << /S /GoTo /D (cite.EXTENDLUA) >> + >> endobj + 659 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [353.044 333.718 368.884 345.26] + /A << /S /GoTo /D (lstlisting.2.1) >> + >> endobj + 660 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [133.87 321.763 196.38 333.305] + /A << /S /GoTo /D (cite.LLVM-PY) >> + >> endobj + 661 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [200.738 321.763 224.888 333.305] + /A << /S /GoTo /D (cite.LLVM-PY) >> + >> endobj + 662 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [268.255 321.763 284.095 333.305] + /A << /S /GoTo /D (lstlisting.2.2) >> + >> endobj + 663 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [307.772 309.808 325.087 321.349] + /A << /S /GoTo /D (cite.LLVMRUBY) >> + >> endobj + 664 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [328.444 309.808 357.037 321.349] + /A << /S /GoTo /D (cite.LLVMRUBY) >> + >> endobj + 665 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [401.867 309.808 463.376 321.349] + /A << /S /GoTo /D (cite.LLVM-PY) >> + >> endobj + 666 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [466.733 309.808 490.883 321.349] + /A << /S /GoTo /D (cite.LLVM-PY) >> + >> endobj + 667 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [128.017 298.306 174.543 309.394] + /A << /S /GoTo /D (cite.HASK-LLVM) >> + >> endobj + 668 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [178.09 298.306 202.239 309.394] + /A << /S /GoTo /D (cite.HASK-LLVM) >> + >> endobj + 672 0 obj << + /D [670 0 R /XYZ 89 757 null] + >> endobj + 70 0 obj << + /D [670 0 R /XYZ 90 624.01 null] + >> endobj + 74 0 obj << + /D [670 0 R /XYZ 90 434.415 null] + >> endobj + 673 0 obj << + /D [670 0 R /XYZ 104.346 293.607 null] + >> endobj + 674 0 obj << + /D [670 0 R /XYZ 90 264.396 null] + >> endobj + 669 0 obj << + /Font << /F21 332 0 R /F31 350 0 R /F19 498 0 R /F30 348 0 R >> + /XObject << /Im4 633 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 688 0 obj << + /Length 2538 + /Filter /FlateDecode + >> + stream + x??\ko7??_1mw??"???X?6E?m?+ ?W????????h@???????{S????C?????:NW???2[Y/??+d%??m???o????o{Cx?m??W??}?+ ?+ ?????++8?mn??-???k4Y???P???%k,+=???pLh??ptQ?EM?P!-?(???D?????4'q???@eJ?????????????"?p? ????? `6????*x????[?c??J&?`0??FH2]?\?/???CPo?JK0????{???sFD??5?? ?P?t_]\???S;`h?a?0??? ?/(gA????4?g???)?*?????7????/5 ?5?Sz?????N??O}?y?-L#?Y?5-???.???8? + ??Cd + ?-*????T?E"2??)?Iku_]}?&"????5?)JqM?kCP$?tM?+J_Pz??C???j??Z?KR 4??'5???d???P??%??c?7(????m??K?u???>???9@???(?k,?;???" ?'r?!h?Gq????f?`D? ?kJ_e???I??$???u????????# ??K????L???g + hw9S?(??2?dkSSJ?)?ie????7?????Y?????L?dN.??C8 ?,???N?k????i~?b8E?%0??pc*mN???L??a+ I"?{??ZT,1????- + :?ChMr??4?l?~ + /?,?????S?F???????;?U?{?|??^s??w?CXA?? :y??8_qE?7???|?e?0?????PVu??????~??0?t??8^d?G.??-g?W# ??:????????7[????&-?&????,?(?q??>?? + ????R8FZ?{??56nd-i0a )??k ???????i?i??Yg;?n??W?/???]??m?)???s"?w&? ????? + 3??????@_?n? ?*Sjm0 ?j???Y at U?j?O{??l ?:?`?3 + ???????5??[d??A ?mi0?I?v??J?Z????^?y;?!??E4????ss`??U???7?i?P ??U??$?z?gR??????????????F?0???-K_5?x??\dS?k??B??PfEs?)?.?}E.??B?Q Z%n?~?m|b.??? q?}uA???@)??P?#X????UO???l??H|?]Z??z?C?6? ??n???7??????$???.(>?c??G??8????Ze?0?@?)y d+ ???y?lX?????fm??aaJH?-?> endobj + 689 0 obj << + /D [687 0 R /XYZ 89 757 null] + >> endobj + 683 0 obj << + /D [687 0 R /XYZ 90 726.045 null] + >> endobj + 690 0 obj << + /D [687 0 R /XYZ 90 712.067 null] + >> endobj + 691 0 obj << + /D [687 0 R /XYZ 90 697.821 null] + >> endobj + 692 0 obj << + /D [687 0 R /XYZ 90 683.574 null] + >> endobj + 693 0 obj << + /D [687 0 R /XYZ 90 669.328 null] + >> endobj + 694 0 obj << + /D [687 0 R /XYZ 90 655.081 null] + >> endobj + 695 0 obj << + /D [687 0 R /XYZ 90 640.834 null] + >> endobj + 696 0 obj << + /D [687 0 R /XYZ 90 626.588 null] + >> endobj + 697 0 obj << + /D [687 0 R /XYZ 90 612.341 null] + >> endobj + 698 0 obj << + /D [687 0 R /XYZ 90 598.095 null] + >> endobj + 699 0 obj << + /D [687 0 R /XYZ 90 583.848 null] + >> endobj + 700 0 obj << + /D [687 0 R /XYZ 90 569.601 null] + >> endobj + 701 0 obj << + /D [687 0 R /XYZ 90 555.355 null] + >> endobj + 702 0 obj << + /D [687 0 R /XYZ 90 541.108 null] + >> endobj + 703 0 obj << + /D [687 0 R /XYZ 90 526.862 null] + >> endobj + 704 0 obj << + /D [687 0 R /XYZ 90 512.615 null] + >> endobj + 705 0 obj << + /D [687 0 R /XYZ 90 498.368 null] + >> endobj + 706 0 obj << + /D [687 0 R /XYZ 90 484.122 null] + >> endobj + 707 0 obj << + /D [687 0 R /XYZ 90 469.875 null] + >> endobj + 708 0 obj << + /D [687 0 R /XYZ 90 455.629 null] + >> endobj + 709 0 obj << + /D [687 0 R /XYZ 90 441.382 null] + >> endobj + 710 0 obj << + /D [687 0 R /XYZ 90 427.135 null] + >> endobj + 711 0 obj << + /D [687 0 R /XYZ 90 412.889 null] + >> endobj + 712 0 obj << + /D [687 0 R /XYZ 90 398.642 null] + >> endobj + 713 0 obj << + /D [687 0 R /XYZ 90 384.396 null] + >> endobj + 714 0 obj << + /D [687 0 R /XYZ 90 370.149 null] + >> endobj + 715 0 obj << + /D [687 0 R /XYZ 90 355.903 null] + >> endobj + 716 0 obj << + /D [687 0 R /XYZ 90 341.656 null] + >> endobj + 717 0 obj << + /D [687 0 R /XYZ 90 327.409 null] + >> endobj + 718 0 obj << + /D [687 0 R /XYZ 90 313.163 null] + >> endobj + 719 0 obj << + /D [687 0 R /XYZ 90 298.916 null] + >> endobj + 720 0 obj << + /D [687 0 R /XYZ 90 284.67 null] + >> endobj + 721 0 obj << + /D [687 0 R /XYZ 90 270.423 null] + >> endobj + 722 0 obj << + /D [687 0 R /XYZ 90 256.176 null] + >> endobj + 723 0 obj << + /D [687 0 R /XYZ 90 241.93 null] + >> endobj + 724 0 obj << + /D [687 0 R /XYZ 90 227.683 null] + >> endobj + 725 0 obj << + /D [687 0 R /XYZ 90 213.437 null] + >> endobj + 726 0 obj << + /D [687 0 R /XYZ 90 199.19 null] + >> endobj + 727 0 obj << + /D [687 0 R /XYZ 90 184.943 null] + >> endobj + 728 0 obj << + /D [687 0 R /XYZ 90 170.697 null] + >> endobj + 729 0 obj << + /D [687 0 R /XYZ 90 156.45 null] + >> endobj + 730 0 obj << + /D [687 0 R /XYZ 90 142.204 null] + >> endobj + 731 0 obj << + /D [687 0 R /XYZ 90 127.957 null] + >> endobj + 732 0 obj << + /D [687 0 R /XYZ 90 113.71 null] + >> endobj + 733 0 obj << + /D [687 0 R /XYZ 90 99.464 null] + >> endobj + 686 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 746 0 obj << + /Length 2795 + /Filter /FlateDecode + >> + stream + x??]????}??>T ?:???}??5??&?+ ?(D,? ???W????????MI??????~???dm~o?????~0???vUAR?)?i?C?????0?????)$u?H.&?W??????lB?Q???0< ???=??qk?????~?Z?0??fX?v??S???)??+ 0???C??;????# ?x??Y?Oh? ????D + C?f???}?9Y???S;???S???????R????u??[|??????H???5??e?x1_??? ??/(B??I??K???ET?:??~?4k?oo???????? + endstream + endobj + 745 0 obj << + /Type /Page + /Contents 746 0 R + /Resources 744 0 R + /MediaBox [0 0 612 792] + /Parent 754 0 R + /Annots [ 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 752 0 R 741 0 R ] + >> endobj + 734 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [259.253 578.499 337.294 590.055] + /A << /S /GoTo /D (cite.LLVM:CGO04) >> + >> endobj + 735 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [341.4 578.499 365.549 590.055] + /A << /S /GoTo /D (cite.LLVM:CGO04) >> + >> endobj + 736 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [166.324 494.827 203.036 506.369] + /A << /S /GoTo /D (cite.LLVM:PASSES) >> + >> endobj + 737 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [206.583 494.827 230.732 506.369] + /A << /S /GoTo /D (cite.LLVM:PASSES) >> + >> endobj + 738 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [326.935 304.321 418.981 315.863] + /A << /S /GoTo /D (cite.JAVA:VMSPEC) >> + >> endobj + 739 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [424.017 304.321 448.167 315.863] + /A << /S /GoTo /D (cite.JAVA:VMSPEC) >> + >> endobj + 740 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [470.549 244.545 513.996 256.087] + /A << /S /GoTo /D (cite.JAVA:VMSPEC) >> + >> endobj + 752 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 233.043 133.845 244.132] + /A << /S /GoTo /D (cite.JAVA:VMSPEC) >> + >> endobj + 741 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [137.392 233.043 161.542 244.132] + /A << /S /GoTo /D (cite.JAVA:VMSPEC) >> + >> endobj + 747 0 obj << + /D [745 0 R /XYZ 89 757 null] + >> endobj + 748 0 obj << + /D [745 0 R /XYZ 90 730.319 null] + >> endobj + 749 0 obj << + /D [745 0 R /XYZ 90 716.072 null] + >> endobj + 750 0 obj << + /D [745 0 R /XYZ 90 701.826 null] + >> endobj + 751 0 obj << + /D [745 0 R /XYZ 90 687.579 null] + >> endobj + 78 0 obj << + /D [745 0 R /XYZ 90 642.346 null] + >> endobj + 82 0 obj << + /D [745 0 R /XYZ 90 475.392 null] + >> endobj + 86 0 obj << + /D [745 0 R /XYZ 90 370.236 null] + >> endobj + 753 0 obj << + /D [745 0 R /XYZ 90 183.419 null] + >> endobj + 744 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 772 0 obj << + /Length 3640 + /Filter /FlateDecode + >> + stream + x??ZI??6????m??Y4??????;??trqr?HH?3E*\Z??~jI?t?9?P? ??Pm????????w:??~??d????j?F???????|??????[?f?k?uv??Uya??-^????L?iO??????jL~?ph????????wo??? `5j????E??8?}?SmJ???(?????Z?6??[o~????Z?$T7; _e?w??}z???jx??????h?/?,(?{?????|w??????Jm`3?Nw?+?????t?}?-s?m??{?hd??9?Q?T?`??\]?sO?;\????? ?@s??????"C??i8?kJ;T?*^E???{????????Lj?????m?i?a?[??`??l?A??q?\ ?H4?n/=??O$@(??Z??^76????A3???~0Ma?RU????cb??D??j??u????+?s? + ?)Zv3??%?y???-Z?) + c???C???PM?0??]{?*?0gl?4??af??]!}+i`??{i?/?d?m??mN????^??????Ro8??u>N?*P??t????RP?????5*T??Y?? ?o?r*?e?C???=S}{????pQcx@??n???Y???w????=???|?C?o5??g?>?pC/?|9V???#h?m?J????6?s???0"60u$??nE?K??6???RK%?????N?,???J??x\?:??f0z?:????]+v???h{%[???M5T+ ?k?X??zv(P?@???x?jR?$aM??3=&?aO????"i??)?&Bw?;8Dn???ie???5V??) ?HXQ? ?+ ????#???c_???}M? R#+ ???????? ?a???r,???^???K:O?????6_?h??4?&?;??????/???j?nG??2D???y????+O?B????02v??Wk.UA + ?B???C"?t?=<-:X???{?Y??'UaArc9??V?s?F???(B?.???????Bb3?0 ]??iX7???????????OU???s(??_\lFH??? ??u?+K???b?]?h?? ?+ N?H?T??al????k?gU?<@?0???S|???dl?Gy??T?M? + ???rXHN?;??qe??????D?` EJ??v?\???D??6[?s???6m???[nZru wj$}?R?????)?????????U??~`l?+ Y ????`?Ph?? ?B???)???P????b????????c9??R?-y?:0??:???4?UF?TC??!z??G)?z???K? (?> endobj + 742 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [422.851 685.618 446.701 697.174] + /A << /S /GoTo /D (cite.TOMCAT) >> + >> endobj + 743 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [450.371 685.618 474.52 697.174] + /A << /S /GoTo /D (cite.TOMCAT) >> + >> endobj + 758 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [193.168 517.015 203.414 529.58] + /A << /S /GoTo /D (Hfootnote.12) >> + >> endobj + 759 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [120.431 310.888 136.271 322.43] + /A << /S /GoTo /D (figure.caption.15) >> + >> endobj + 760 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [181.544 179.381 202.565 190.923] + /A << /S /GoTo /D (cite.OBSD_MALLOC) >> + >> endobj + 761 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [206.414 179.381 230.564 190.923] + /A << /S /GoTo /D (cite.OBSD_MALLOC) >> + >> endobj + 762 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [236.96 179.381 255.869 190.923] + /A << /S /GoTo /D (cite.VALGRIND) >> + >> endobj + 763 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [259.718 179.381 283.868 190.923] + /A << /S /GoTo /D (cite.VALGRIND) >> + >> endobj + 764 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [290.264 179.381 320.49 190.923] + /A << /S /GoTo /D (cite.EFENCE) >> + >> endobj + 765 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [324.339 179.381 348.489 190.923] + /A << /S /GoTo /D (cite.EFENCE) >> + >> endobj + 766 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [222.186 112.183 318.152 123.725] + /A << /S /GoTo /D (cite.JAVA:WP) >> + >> endobj + 767 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [321.408 112.183 345.558 123.725] + /A << /S /GoTo /D (cite.JAVA:WP) >> + >> endobj + 773 0 obj << + /D [771 0 R /XYZ 89 757 null] + >> endobj + 774 0 obj << + /D [771 0 R /XYZ 90 706.021 null] + >> endobj + 775 0 obj << + /D [771 0 R /XYZ 90 638.808 null] + >> endobj + 776 0 obj << + /D [771 0 R /XYZ 90 619.431 null] + >> endobj + 777 0 obj << + /D [771 0 R /XYZ 90 600.053 null] + >> endobj + 778 0 obj << + /D [771 0 R /XYZ 90 580.676 null] + >> endobj + 779 0 obj << + /D [771 0 R /XYZ 104.346 94.762 null] + >> endobj + 770 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 795 0 obj << + /Length 2908 + /Filter /FlateDecode + >> + stream + x??Z?o7???B???u?|??^@[?E?w???%?j???]????????p%??c?9u???Cr8??8?$??\|w??????j?(D??tqq?(?"?3????o???????????k??n?C?8?LI?%U_Q??? "?????q=}MC???|??\i?yu????????_?h#?f7"??E?={?N.*??XHa?|q?{m?6P7???y&y%s-2??tq\???o5???@?<?J?NE???? #L???$?^B!2??=h??+?R??+ P + ?1cJT?##?T?m?D?_.rp?4???L?&?????|??Q??e?????/_N??|???Y????m??|?gxz?c;???;(#?Y??7????-?g??E.d? ?\jatL????????!??y???9X=c3??X"Tp??= ???? -DN????`??y?4q???(?#????`(e??G?H???????.5@???Lq???N?L`_s????`????G??L????ac ?^z?AR ???????TG_???}.3I?W????;#?Fd?? ?$:-????A???D?7Ab???+ ????gv??o}9???J?8&>??#3??%?+ y???????????,?@?K????Q? + 6?n??Q}???d"S?b ???&????w?L?E????????Uv???W?_??n??7L??????#}??n???v~???S?mu??c???_~k??JI?Q?e? ?'?g, + ?zj? ??!et?A? ??,o?5L???m??????u8???b??Ss6????d????????????? ?J??@\K???MC-M????Kn;???{9??????!z????H??]3??`Ns????????#?;?d???yw?H8?FU?????|y/??????F?/~{???????? + ,?L?w+#p?i? ???!180d??J??a??;???z???m??1??X5?_??b????G?_?H?&?7 :?$?Ef^J'?? }x?n????}??q?~?z|??0??~?8???.j??4Dd??????7?V??8+ 5 Z?N?????!+????80???T??6?wK? t??v?u9b???.??????S8?????? + ?q???TfgGXf+F???n?]+ TD?_???????^iG?m ??,?,{2???G1?%c??????]F?U ???KI>??Gj?Y?#??"{uC5;6??9??n'H?zj&M???,? + b?S???? p?h=?!??>???????}???9?&}???p?wFUQ? + ??$3H:??>TV??c??.$C=v?vb?t+HR???~??2(JG?-?P??7Y?b^J??w?K????> endobj + 768 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [147.757 400.237 234.608 411.779] + /A << /S /GoTo /D (cite.LUAIMP) >> + >> endobj + 769 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [208.844 376.327 219.09 388.892] + /A << /S /GoTo /D (Hfootnote.13) >> + >> endobj + 786 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [377.11 300.296 462.201 311.838] + /A << /S /GoTo /D (cite.LUAIMP) >> + >> endobj + 787 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [425.861 252.475 513.996 264.017] + /A << /S /GoTo /D (cite.LUAIMP) >> + >> endobj + 788 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [305.07 180.744 393.874 192.286] + /A << /S /GoTo /D (cite.LUAGEM) >> + >> endobj + 789 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [398.333 180.744 422.482 192.286] + /A << /S /GoTo /D (cite.LUAGEM) >> + >> endobj + 790 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [245.397 156.834 261.238 168.376] + /A << /S /GoTo /D (figure.caption.17) >> + >> endobj + 796 0 obj << + /D [794 0 R /XYZ 89 757 null] + >> endobj + 781 0 obj << + /D [794 0 R /XYZ 90 733.816 null] + >> endobj + 797 0 obj << + /D [794 0 R /XYZ 90 720.067 null] + >> endobj + 798 0 obj << + /D [794 0 R /XYZ 90 730.817 null] + >> endobj + 799 0 obj << + /D [794 0 R /XYZ 90 716.57 null] + >> endobj + 800 0 obj << + /D [794 0 R /XYZ 90 702.324 null] + >> endobj + 801 0 obj << + /D [794 0 R /XYZ 90 688.077 null] + >> endobj + 802 0 obj << + /D [794 0 R /XYZ 90 673.831 null] + >> endobj + 803 0 obj << + /D [794 0 R /XYZ 90 659.584 null] + >> endobj + 804 0 obj << + /D [794 0 R /XYZ 90 645.337 null] + >> endobj + 805 0 obj << + /D [794 0 R /XYZ 90 631.091 null] + >> endobj + 806 0 obj << + /D [794 0 R /XYZ 90 616.844 null] + >> endobj + 807 0 obj << + /D [794 0 R /XYZ 90 602.598 null] + >> endobj + 808 0 obj << + /D [794 0 R /XYZ 90 588.351 null] + >> endobj + 809 0 obj << + /D [794 0 R /XYZ 90 574.105 null] + >> endobj + 810 0 obj << + /D [794 0 R /XYZ 90 559.858 null] + >> endobj + 811 0 obj << + /D [794 0 R /XYZ 90 545.611 null] + >> endobj + 90 0 obj << + /D [794 0 R /XYZ 90 474.924 null] + >> endobj + 812 0 obj << + /D [794 0 R /XYZ 90 331.566 null] + >> endobj + 813 0 obj << + /D [794 0 R /XYZ 90 151.482 null] + >> endobj + 814 0 obj << + /D [794 0 R /XYZ 90 131.844 null] + >> endobj + 815 0 obj << + /D [794 0 R /XYZ 90 117.598 null] + >> endobj + 816 0 obj << + /D [794 0 R /XYZ 104.346 94.762 null] + >> endobj + 793 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 824 0 obj << + /Length 2990 + /Filter /FlateDecode + >> + stream + x??]?????~_:?M-??N?I??[????I?+ L?yD??"m`??7?Qr?*??r?6??????9??,L?4 ?????@:J??0F??# p}??l?4?A(4@?BA?@???`HS?N?@yX,?pAx"?????74& ???????3????3#???< ?X??J?A????????9)???*7?K???;????_ ????>?????(?I?:?r??2?B????? R?%xS??),t??ve???Q???h????U?6??u?????d??C7C?6=?????m?$ + ??? m?Mv>??????WO9??R?/?+ ??v?????b???0?I?j?N??mU2$? ???:(['[7?~[??P [?9 + ???e8???? ????i + ???1??????]5???V??U???F?AQ?????????+? ?9???M?:O'C?uq??94 ?D??y?l?b?`?6? ???8???X?X?.2LK?R??8=E c??+??????w?5??0??J689[??N?>LQ????=?z?w,?x hK?1?\??2????n?????*I???d???????'&??????5???^??V{?.??V??D/????m??? ?%B|??+ ??t?x*????_???Hd9?/U??:`???L?H??o{?+??[?&? ??? ?? 5?????"5*L??6??a4UM??):??{?????d}? ????%W?d??/7???~e?l>v?L;??}S.?'?? ??MP2))9u%?iS??H3+ ??n`+ ???\.n,T??)???????v??????C???;??a@{ + ??$G??+?u}????+?.???Zju?? 6b?#??????3F???j???cH,?pS??S?W?l?4?C????M?^??j.??u? ??nW?^?=7C4S?d + ?/???NJ?Ms???kY???b?(3?Q?v????)?????B????Q?xQ??D???.???`?F?^#???b?~\??? + >at????;?N????{?(??78p!d"H??v i?TpM???d?,???=? '? nw?????b` + .????8?,???%a"???<]?"????s8CW DpO[?=?=4kq{:V???}? s??????K??F-;~????a,c??^???jj?B? + ?%*&T?#?wO??: j?@g?^???\)???:A?q7??k?r\?$3~h#? + ?H???&A?%? _??????v?f????9?I.?R???K?sf?????3??:1?2a+ /?uv?C+ C?W??>??s?F????? ?b????????\?;?'&?=wp{??I^G~x????5?;???8'??u????.???\yIN? ???d???X?i?c??????4?W/?r%???{?? ?*????8a|zI?7?V???h?#kw??T??????  + |-????6*" + endstream + endobj + 823 0 obj << + /Type /Page + /Contents 824 0 R + /Resources 822 0 R + /MediaBox [0 0 612 792] + /Parent 754 0 R + /Annots [ 792 0 R ] + >> endobj + 792 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [339.492 81.462 425.48 98.996] + /A << /S /GoTo /D (cite.LUAIMP) >> + >> endobj + 825 0 obj << + /D [823 0 R /XYZ 89 757 null] + >> endobj + 826 0 obj << + /D [823 0 R /XYZ 90 730.319 null] + >> endobj + 827 0 obj << + /D [823 0 R /XYZ 90 716.072 null] + >> endobj + 828 0 obj << + /D [823 0 R /XYZ 90 685.663 null] + >> endobj + 829 0 obj << + /D [823 0 R /XYZ 90 668.325 null] + >> endobj + 94 0 obj << + /D [823 0 R /XYZ 90 628.27 null] + >> endobj + 819 0 obj << + /D [823 0 R /XYZ 90 258.199 null] + >> endobj + 822 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 832 0 obj << + /Length 1199 + /Filter /FlateDecode + >> + stream + x??VKs?6??W?Vj?? ?????3?8?i????&!?P at P??}v??,??NOX|X?{H?]?F?6??;??*? + ^D?mT?Q??I!X?i???cs??Y?x???Hk?s??i???&xE???I??????? ???E?EQ??T@?ix??b} |JC?[??O????a????f<}{?-????r??M??0t?b vVN?? ????k?ZU??[c5?Z??h?s?U?&(?C_????i&??u>???K??}yc?j5?o?e?}??&?=??=???;??.??W?0{?X?XuB? ?A???{???? x#?P????G?8V?@???C???w??a!TP@>U?"?,~UAc??????8???1 ?????7l???y?2?b???C??UE?d???_??M?p???LY?M?e??????*V??pL?1 ????,_????}H?>9?l~XqzP?t2?%?Q?N+ _????????-?? + endstream + endobj + 831 0 obj << + /Type /Page + /Contents 832 0 R + /Resources 830 0 R + /MediaBox [0 0 612 792] + /Parent 754 0 R + /Annots [ 820 0 R 834 0 R 821 0 R ] + >> endobj + 820 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [468.677 712.909 513.996 724.451] + /A << /S /GoTo /D (cite.GCCFAIL) >> + >> endobj + 834 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 700.954 174.642 712.496] + /A << /S /GoTo /D (cite.GCCFAIL) >> + >> endobj + 821 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [178.189 700.954 202.339 712.496] + /A << /S /GoTo /D (cite.GCCFAIL) >> + >> endobj + 833 0 obj << + /D [831 0 R /XYZ 89 757 null] + >> endobj + 830 0 obj << + /Font << /F21 332 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 851 0 obj << + /Length 1828 + /Filter /FlateDecode + >> + stream + x??XK??6 ??W?Vy&RI?z???I?L??f'?4????H?V?????%[5?^,A???YpX?????????e\f" n??????,??m| _?g5??H?E?R????I&?#??L??on???tC???F???D???? ~???}?{u?{?q???vO?BfA??>~bA ??????N? ?H???w?v??????? ?B9???k?|Q??e????r)b)? ?%?Iq??.q?? ?Y6???+i???B?y?st?s??????o????oU??d?U???yY?y.A.?yR~??,He?X???C??g?m ???9y ?J4\0?(?aeI??7??QS"??M???d????C]????7??3!ci\|&?W?I???dAf??? ??QOZ??Q?8.?j)??h?i??i???0E???E????????u???????:?G2?X|?yj??k5-???n?????3?@?q??,????K"???????P?~? f? + ??ae???5?h???7#-??? {????X??e??K???? f%WkA??????v??D?^2AZ3j?S???s!`?`?y??/?q????V?g??V??L?ry?b6??2Nd&0W? ??$|??|q?X??????7??-?XA2i(3???G??]??b]?jip?????6??s?y?? 7'???~??????h??N=y?? ~???????f?\>gY???U?j?L?,??nh??+???Mu$?NS??(?"W_?I0?3??v;C@?{?n9T???d???=??j?'?1?X???]??h?S?e?;k$@iJWGF?P??a?y???(8 ?yI??e9???5N?+ ??B??P?o?&??^c,?g7OVRne? ?qe???*> endobj + 838 0 obj << + /Type /XObject + /Subtype /Image + /Width 1500 + /Height 1475 + /BitsPerComponent 8 + /ColorSpace /DeviceRGB + /SMask 854 0 R + /Length 28263 + /Filter /FlateDecode + >> + stream + x????r=?P??Kk??j??%???????8?d???+ 7???W^?}?*??3+ ?? + o25 ?#????o2>wo2 ??M??7??????? pT ????? ^?????fc???{?mT?R$??[??Q\?P?+???'???-????z??? +  o2?d??M?G?M?>N?d???)???W???{?~?I??/s??g?WNMr???TpdD:?M&cE??L-??d?h???_??&8???7y?&?*N?d?z?y?????_p????E??$}?MfH?I?e??d??O?7p?????b?&C? + }?[???&?_????7??8u????d6z? L?????????:??,o2!! y0/?7???aTy??&S?&S?/?d?Oo2?d???3By?[?7?????~?+??????o2?'Z??????|?o2?g????&S?8???LT?g??4?M&????z?????A??G???;?M&??k????????o&???d??Af??L??r???o???L?xW~po&e??T?~???????X??R?7?? + ?Mo2/z??????7???d??d?}|??????\?&s?s??]d|Qo2??O???????M?xO.?7?no2??????&????M?s???I??%7 ao2?|???y??>?????????????;?|8??_N_Bb?????20f???=??e`??L`Hj??????7??k?d?????7s??7?? ??7y???? ??d??x????0']Nx?Y;??G(#Q1N]H??Y??-=c?j??? X?8?>y?+Q??P?~????t~?&?M???7?M?d+G??Q?&2??v??7?o??;"?e??p??L?]???L????u~????o?&???O???5?p???+????v?q??&???{???M&?S?&?M????M???L??}o2?d8?A&?M&??$??????+?_?,Hu?v:?M??????????k?W????c????????Gw???Rjo2?d?}?Iz?l?&????,k?&?????[z??&C??&o2?7???????7????!?n??Mf?e??A&?M&?????Le????y5?>O?r??m??M&??j?d????7???????O????O??_??!?-W;? x?a??L?7?????&S9?;???d~????W2???????????w?S??L?+J?;C??????W?i? ?Mf?7?}Tf?7??w0o2?d???A????l?&?Z?['??Do2yE+~????s?o2O?e??L?l ????????????1  + ???????S?d?????????D}?????_??O???&??U???7????}?I????&??????_K?????.y"?m?? + 2?OB5y? ?_?~X??M???? ?=?????????n`?j?o2!o????????/bW?????/???oc?????1????M?>2/?'3?M??????u?dnlO??l??M?v?l?&Sv[,x???,S?wy?C?O4?????????o2?+?J??A??T?A-i???Z?&????K???7?=????;~W?7????????SC???S?d^???|?~;?M????$N!????Z??N~?Y?K|? ?f????_W[!?O??/??_??WK???Y\2?\???0?A????7???fm??????m???Tx=?.?[????u???????#??L?{??w9o2 ?dZ?@ Z??'??6?7??7Wfo2??h?,?Q??7??????Xy?Y[??'??o2???R??o2??e?7????????????????s~??o??L????Kh??q?I? $?3??'iC~???o2???d?? ??M????????L???7??x????j?qo?x?_???o2?[?{?qy?????n?,?f????>7???{??4>??~??o2e?zy_o2?x??{?y?3??d?~?r????;??7??&?????????&?????L?P + ?q???%???????? I???,?????c?}?S?d? ??{@y????0?M&;???d????o2??xC~?;)0????M&?i?[c?_?????A??M?'???{???k?d~?????o2??va???O??&Yp????~??QyH?#?}?=?????[???Z?&s?????&x???]`??=x???k?o??o2W???????S?!?????????d???P??????n?7??? ??&?(?????? x???L?7???F/????????&?3?M?d?????????5F}??? ???&Q?q??&???????????(,P?? `???]?~?U?S + ?\(+ ???T %n_W?F?b???????CA+ ?+ g?%U???JqH7???X0 + + ???+ ?? + ;UC????????\?B?'?? @?N??)K?OG)$A?????C??-???H)??px?+p??S %7;?|RJ???? ?9CO5????)K?K)?????o????8??K??l??)??Z`?%`?q?J'\??e?N)????u7p??S U?5?}vJ?N ??SN???????]?[S?????Q?9*?_??B????????l?Q*!s@?`R_+0l?????[?? ?@???? Q`30????|????T)?B?s+ ?h??D??E??W)04?w?? ???L5?????+F`Q?1%????d????I?:? ?D??7)5?Y+e?D?`??U`? ?J[_?????[)??*"6v+ F ??8??D????YR + ?G?+ BT?????R??E+ Bl???C?????3aTC??n??h)??P?7?xQ??mBA?H?Rp? ?yp/+ :0XT?z? m0W?'?TQpq??1S + ????.?y?D??+????4?????0O????? ?M)8|??pM+ x2?5??+ ??j?i`(?l? + ?qU + ??? + ?5+ ?V,?jj$?5|??+ ??+ ??x??`y???6^p)p,??t0???sJ??t???????+lwZ?\????U~?|?+ + p,??z?*Bz????????0?p??X h]`??????N?$??S????H88%8?+ ??O0a??c????h48?tp"+ ???????h?e?? + 8+ ?Ql??" ?pWQ???g?^C?NL??+ 0I ??????7??i?>J?$z + ?\?U???I?5?Q?;J?Xu:?wr? ? ?b|??dB??w??np ?!??O> + 8??e + ???7G$8 a???i?gNoI?????H{?1C???x?V?????? ? ???M? 1?V???m? 8?A??8????? ????w????e? ??n5?u ?X?4?R???????gvgy?g76?|?CD?G??0?v?j??7?8??????v???H?(2 '????6"E??t??`C?E()?:E)?a8?l?\?u\]l?f? + ?i??8???S??|--?????s??p????&8 ?i??C????:E)@???7??QUe??? ???&cb?^??w??]a??(H5?j?41?a?@#??t?u???vQp?bk?  ?b?A-);8?A?a|V??q?+ X)pzj?>????D????????fv??X????????l??x?q??+ w??@w?u at za???.??i?*??I???QoD ??????NX~????34YK + ?e??}?lq,:#??????3t?I + ?e??}???3?? + ?&??G???N????d???m?n ????[????w.h8o?m,?d????????k*X\!5??o2??:?h?rgD?+ ???n??&???????????^@??U2????At|?hl p?a?????,??i?Ft?????????+??~????d2 ??????????a??}???????????F?p?aF8?=??????]??i???$??I??}????=S]??V??N[?3l?P?r?n ?A??? ;#6??++H2hu+ ?+ ??????? ?/"?WA??? ??F??:??"?~X?A?`~?[Q?f???r?????h?'?W0$?Kv ? ???#F???j`1+ ???V + ??Jo2?/?[,W~ ??`jaC}?*?(???G?SRV}?3H/?V?F????-????? ? ?HZ}%?????#F?a#B????9Y?K?m????#F???F?Az9mA}????1O?)??????/?????7??-R???]+ c??2{'hd?? ??? ?`?P`?o% ?kB vZ{'hd?o% ?%?;-??? ??D ?????)???+ dN? }?e ???w????GX?Z?[p?3@???4?G??-????;?@;C}?h"l-XeA??d??G?z???U mC+ ?d?o?????-?-X6???P?2 -?-??R?K?????8?B r ?o?I??~?5???An????\????k?`+ F?i+ ? ?]?p5 at zAt?5??+ ???~$ <??/s ?P{??????_??9r????# ??Az?f?& ?P?y?Gp???????C}??I?????m ??/??2 ? Z?????.?? X?Az?~?&???? ??v?1????'&?}(??? ? ? ??;\WA??>??. 2?????pW??wU?????$?+ ??`??k,3?U?6Qx(N?lk0#?J?i ???F?i?6?@?A???(????<##-?v???+ ??$ ???? ?`?Q{(??0??A?A??Le@??>??lv?+-0? lz?Uv??;??? ?????+ ?Fq?XG3?7?0??;Ja??`@V%?P??J0???s?]?*??ep??????? + ?A?U ?9A?A??+ b ZI}?????F?t???iW + ???nR"?}V?DQ???2 b V %???? + B????vKX?d?+ BA?$?1 + ??aV + ?\?SpYF??l?OMA?i?0??%?P%p_F?H???Xp??#\?0??@??U?)?An?H?M? ???T \?A?|X + ?FP f?Y)?y?P???\??F?????atY????^??D ??{#?-?SC?+ ???3???Q?+ ???R???A??AD? H5?A? + ?{ H5?m*????H?R?f?X??????"bpZ?l??R??E?+ +?h?????h???h?????;?.B????LrKP?v?1?+ ?|0?l??n??+??? ?{?`???????t?????!??V??r? + ?u?? ??[C?\??????(R?g?M?\???t??3?@???M?\>??t??c?@???M?v?Q?? ( + @??0 at qk??+ ?Y?+ ??y?4$`o????P?.t?@$`c ???=0 ^?r???Z9??E??E?4?\?+ + ?-???+ ?KO+ J?L???D+ *n.%????+ N;??Yi+ ???4+ ?g?D+ + 8??I+ + + + + + c???)+ + + + + + + Dd+ ??h???`'? + ?????? ?v2Q???X?&>;;?1;???;?? ?????????c?N????>??%;???4??xH?2|????'{?^nv2v2????d2>???v2v2?;????N???}????????????y}?w%j??- ??A;??0???Q?$;??O????????E_x???I????p?N?2???o?o??? v2?cx??L?@w???w???mY?????? ?U????:i??>?Y;?v2??????*;?????ls??????????????+ ^+ ?t@?+ ?t`F?????x+ + endstream + endobj + 854 0 obj << + /Type /XObject + /Subtype /Image + /Width 1500 + /Height 1475 + /BitsPerComponent 8 + /ColorSpace /DeviceGray + /Length 64097 + /Filter /FlateDecode + >> + stream + x???g`U?gSHB??wA?+MAA at zP)?  + ????&? + ???GS??;??????o??fwfK?Iv?e????????gny?{%?B!?;?v` E ??+ ????;????_??}?"?z;???????????[p?h?????^v???=?(?? ??wt?-?,?????3???????{??{?J-Mo'???~??I/???s????????y???oz?VoW??m4??O????v??? }y{h-?Z??M??~.?x5????u?qJ>?|)???????7?J?N#d + ??!?xuF??D?{??D}]y??Ut?s_??b????????Nw?~?q??h??C??U??S?wI}??q????-(??7q?? + ???px??i?W?.C'??J?0?/V{??I?z7??Io7?????1/?s t?x|???wiQ???*y?mT??}???_M???????9?yj?^? + |?????5?u7???_????????K??gO*?? ?7'Z?hg??r&2R|i1?l{??{????\Zdz???T??[??M'>h??n{,?h??{W- + 6V|^?.u???????????l.0aY5?{???z?r?????]sR ???u?3?GF?NuR???R??K]e??'?Rf?????#?0??????R?????5????9??{{/????????????<5o?!???]?v-???????d??????????qx?????T??v?Z??|??????V??L??I?R????|????N????????(P??D??T??1}'e}????o"?2??hS?p?7??\s+ o7??-?????3???C??dj????]??]z?? ?P?????????G??M??B>??W?"<$J???+?[???M%?tB??;???N???x?? -?7?d??"??o?&4?????????S?N1?%?????nn?E?????????b?n?????LOLq????b?^??b?@??C?????qeyZL??V???(????(??I??v????V? ????????_?5=q[??D????8??K_???????_w?1ohQ??n?5r??]~?\=?S?V?Z?Pm???n?????R??_b$??9;?m]j?SD????y????n??s???r???W?????-r8~J?K?Z??u???_q????_??????????D?! LV?b???????/^?k??B=g??{????O\y??5??-_????K8Y?V?re)????[?^?q???x?tM????K zj?O?voZ:???%]{{q2?4P?u??????\8????k?????5??z]:.F?q????????1???UCT??oVo?+????ah?*?M?oy!N}?S???zakAg??] ??V???? ?_????j?????+R??|??????? s?o??7????M?]T<,?????T/?????]?k,R&F!??y?^????7??Dt??A?????F???)Q???'???q??P????[YwT?k??????] ???4iB??L?<??c?ON?????Q9u??"????nz???D{?6????jo??`?E?????????H?K?qd??y{3??j5w6??Xr??????????V???????ei:+?f????WHt?Jz?? ~.?????)????K1bS???c?#?9?q?5??g?????}?????J:o??po.mTtmrZ??&??A????.??]TZ?|??`?)c??'Vq?m??????#~ozj???k6??_w(BoO7?]?9x?s?IL??????T?^??u??p??}#U?U??{M}???? ?z??????E??_?7E-dS{{?S?q???j~? ?U?T????? o???W?*=X?]?????L??????Zr$^???d??-?0??q??????4????c???????????8?[%??I??? ???^??O??o& ?????l v?? ?+???????????v#0ukr5?"/?s??s???#9??r???r??P????N?}?(?x???i?W?FX? + ?i???.? ?y?????x?w6o???? ? _??n???????f??:.?c???????sU????K??+?HQ??/v~?d? ~?.?%?.??w)\?????#Z*Zk?????????!??0??ny{???}?,??v??)?*w???L??S0 ?nj??4??]?k?@Z?R?q2?=}G??]g??;?r?"MG?y??s?x??_|!Q1?M?1&?X}?e;Jw??yUK???????:'???-h?A?w]?~?????(32e???U9???Kbd??dN(???.wjS???????x7?}&??4?????z??l???n?*??IYtV?h7|P???"z ?M? ??{{ o_l??i??^???????os??-\???NDh?C?P? ??v?G?y?8x?_.?-?Q?cEn{?>i??/ ??}S^????)?w?+?yo? ????p????!PMc????????0E???(???}?/?U??????E?N??ME?*t7???]?????i?W????'?~,=???<^aBM?[?x7i?0?j?>??E? %c??R??r;?o??H??>.nI??[ '?W?"??S?????`??b???q??? + ?y{????7?]?c:2?e??????????#}?{?<r???_g???#O?8??P'"?Lt??5?Jq[?????e??1????(G'??}?H?Ka????????A?C?K??(?Z???:?d??;???]??????v?????d?z?A?R6????G(?}??U?h?~?1o?EoQO\wo)?X&??vEc??0???b>???[????n??;E5M?? (??5?ZL'|????F?d? *o/?????????I??S.z)|??w?????_J~g??G=?????*|n????Xk???m??m7?m????R???'????????J?S????????????5????????%?VvF????dq + N9e???IE?? ?ZL??ev?0??=??????w'?^v???7?^?>?V + ?ik?????`??.???S???^S?h ????K???m????v?mrL??o??I?c~a? ???n???X?????_*?US?????o???&???(ZW???|?:?Lx{?|?.[?9q???\q??????{?V??A5????1??;t]?g]??]cC????rBw??~?b????2????h?d?????g+8?K??4}?^%???GFw?? \???r??Rz?[???z1????fzbn??s?.*?=u????)|?????b??? z??f???;V?C?M???(???9??BR??????V4sS?????6????Q?>??"?? ????P???b?5 o?m7????O???7????????????V?k????O????j?7???}??l^?v?w???+????$?z????K?@?]?L + o?~?PI/?W6?:??{?+ ?????'u??u?-B???? ???Iu?Z??"?z?????.??V???? ?j??fELF?=?]?ljy?%?? ?M:kgYC??>H??/m??K;,JW??????\?????o??o??f?[???? ?n?*j???????E????? ?#/?_0?J??BM????????? 8z?41?w??:XR??}?a?F??Nn??Vc|(5W??|????@Y??o??L???kJ8?Z\Wz;???.9z?\ v?8?Q%?????VK?b????G??l???B[.JJ????g?o???"??????Y???"???@????&?????-7?c?I9???d?r?{?q???,??>??????'??}??+G??^?6?#z??t$??d???z??.??W???!aw??????t?2?????? ???m???t??????R:?}?CSV?O??c?*I?????))??(f??Z??Aw??[??~%??v)?P#??b at 4OBW???e?w???c~??I?v??r?N ?8OZ?_??&v?"?H??\{?=h9y?%CNU????L?E??NS??|K???{??u??X???;pC}???\???Q?}???c??V????g?W???O?1?0????5?xf?wg?%Y??Ris$??w?}??mG?t???T3-????n???ofY???~?7|j??{_?W??7???m?/\???9???o?>Y?N???lINY?*??9??? ???y???????? ????=?{??=? :??????K?????k?????]?n?:?j?`^5?4?= k???=?v???/p???????IuF??????yP?lr??M?[???+?z??M????9?K??e??>????$?~;q#`?+V?????2mz]?,V'?d???}??R?v?m??EEsK d1???r??*??K?Y?j??H?%k?M???$]?89??.?R?I???Ji??5?!????gH???:?gJK????H??Z?|2c??????/?\N???6???)??z????") ??v?9?&X??ty??D1?s??~?Y?_????*???g?????K?3?)??I????v?7UX?ko?0Z#6m???^R?????/??*???g{?j????}??????c? + ?^???z???;W;??I?v}??W??Y?j4????3??v.Z?U?????/??]??>???????:N?](KT?F???)^5?????uX???? ???N????5???.????"}?.V?77??????w??5?L????f?3??6??\y?<???+ ?5?A?y?4???*?~???????????`?t?????O???MH2_l:???-k]??????)k??????????u???!?b?y?????"?? ?o?p??"rML??z???v??lJ?=???{.?.9???F?????[??g?Su???????w?????s????7????v8lA??w?g?~??_;? + ??????;<'?;??ywL?R????y?c?W????'????{??E.3??o? + ??|????.?c.z??~#glW???b??>????K?Q~hd)??K]c\?H?????~o?S ?T?W??*?/A??v)?V?g?????[(?+??.R??z?m*??9?+???5Go?wt?/??H?tx{M??????IY??v)??????x?? 9i^&8o???6Lj?so??}g?H?????KU~Tyi??'??v)?????????4.?i[???!)=?.??i]????no7g_?$/1t;???{??c#N???? ?/2O!?ze" '????kr?l S?%????{?????????o?W??????????r???$??????F??6 S???S ???g?s?uFQ??????H?_K???-?w)lj??7?b??J#V?6??n???????FU???'T) + B???(Q???????F?RC*?|u???)]??????????kJ=;??C _?????V%?:??9 %???2??||???9 O?#!? ??BJ???'v???"???'Z???-)????oW??3!D??k???h??X???cY1??e?? ?;}??u???Z?Q?j?e%?{?>??&????????9:C?6u??C???~??7?}o7?f??Y_??!X?!?J?????wV3_I? o7axd?>yt??) 8:C??&?&tsN???Y?vA?????b7????????|_???5?e?_???y????]5?????BH?????????????~??& ??P??;?8?!DkT8??o[??^?????????g??a? !DC???3?D~?l6?:q??v9??L+????m=!??aM????6?g3~??& + ??U?)?m?m? !????bg?{???????{??r????????H??{n???e?/?????CS??q????:B?????i?H:5?p?_????D? ?M_???Y? ?????O?S???/o?????z?IEX? ?A?N?????p?z?v?Nb?,??N??0t???????????%???8 i?C??????E(?????^]z?$?P?t??1+B??8`ui + AH???T.????U?+ ?]?:?#???2????\??zQBR%?/?i? ???/E??RB\S?0???????E??????W< ??A????g??????$"?)??FD???v???Y`kY?@?#??G?Rz?_?g1p? u ??j???rQz??????5?5OF"y47????1w???(??????????NNF?hb??r-?@o?w?^6??????p?xz{+ lg&?{????????N2??@a?@|??gp?!?@o'?M?x)?@|???H??%z;???q?e ????p?@o'???D\y?2?a40?*??Ifi?[u)?:?!?2??I?y??5? ?7x$'?Sz;?+ ?n????a?g??I3X??c?2??Y??x?r=z;?b>~dj>}??_???N?F]???\?"??IV3 ??*???+ ?[?? ????*??I?? x?2??B?V?V_???????P5$??g62o?^?;?`k?/R??_??a05???7+ o?B?`??Hnf??G??|?o?/??M??2?????e??a??K ??????????S???/?< [?Q???m`?????j?Q?? ??E?}g]??xH????Q??????;j:?m?b????m???????)???y??'???*{?OO???????m3???2?L?'G.??(??|.7?1?2x?*?;q?????A?q6;e?????????G??? B2Q?????=7y???)i??&?"a????2 o)7??`??????*g1E?/?#??O~?.?k??$d??_?4O????? ??E/?FY? T??2MeQXA???Rol????~~???,??[????????y@~?^??X????A?V??tkb???Tz{?@???G=? ?????????/????????]?%?7C??Z???.U?*wH^???^?=WhV??????m?`?g4???,g*0?*+ ~???Tl????o?{??`lA??????i?c????2{??;?M7vyw>?/??T?{?[h???G?} + ??Q?a??????T????g??????O??Dk1?~?/g?=I?x?? ~A???U?????9?TYfr?-?????KR ???+ >N?1?v?{5????????&[Z?C?????%??oF??p??z?#???)?o3xR?4e??L?gf"p??/??z?$??????ub??+ H??????????ki%V?L3F|?b???9?=?P??xoG?????go? ]? 3?OLf ? u)??2 ???'`?? ??!??@?3???KR??H r3e?"W?_^?????tM??2??e??_??E}?????%????lWv(3?S?o?F2?$???+ `wc??L1H|?|w??????XH?3@???????H>+ ?????u?hz?bqL??? ???????R?????=Y?2N?B?$#??m??T??p??r???/?a?x?$???l???gb9??sd???`x?(??????rS???o?c?x?$=?H??????m??????P??+ ??sho????????j???'p>e?:??0\?TN??+ ?e?????sO7x+7???????_I??>???7y+ ?jz????#M*f??^??vIz?0??????'U?M7&??=9???M$?????#o?*Ua?u?????0 + ?q?4-?P?*?J?x?o????'o??g??`?M??s???t??+ ??J??%???????Xu????q?;c{?B???f?6??R!?v`?????????2Q?Xy??i`$U?#??i?1?|B?]S?0??3??????2_?????/?.K???3?U??T??2'?a~:?v??`_???)?T!?yh??vc=UvI? H?=K???R???]??C????8c%?k?)Gn?? + _GB ?????%?s03??8-???S|g5??1T???N???~$b? ? ???K????6MK?4????CL>-?????? ZF#?I@\?^?] + ????rZ|????B?r?hZ??H.M???>? ?K???K??$?k???y?a??2d%?+ YD ?7?xhL????k^??.??????? + ?#?U??????/?????I8U-????rX???WIoO?O???)?????? ???5,>oF?p?4???&??u??a+??????Q???? l?g?;?]??B???+ ?????r$?UkqA?????L??&?2H?o???{Fy(?Y?M??:?v ???? 0Z??f?]???Z~??_i???7:?Y??L`? ?6?? ???D??+ ? ?8c?j\???`?????U ?W?BFxB??^E?~7?l??u???g?? ? ?? ? e?~c?5+?Gl???A?pH?U???IB? ? ???U?+ T3r??t?? Z??9??R??H???Eo?4?n?@??X??K?`:???????GIs??"V,z??y??k??X ?e~?????K??Ar V,z?|cs] ?6???a|?U??+ x???? ?&?6C?L?U??Z?%?fZ?=?(? + ??zEo??Q?+ ???????????v{U?er??w?%???%??7u|???x???c?VE7t82?2P?????!?#???/5???n???????CA?/?*z?????~/?%P??? ?h??7z\f?????????y?????l?}'B??eIJEI)[ ??T?(?~-R??T????QR + ???"?N?}f ??????? e?;sg9???}???????y??9????9?????2???s kJ?m? >?'?4vj? ?v??L?????9?_S??!\f??5???(?r~2/??Ro7L?X?????yD?@?t?]?P??@Sqz ???*?v???.r????u + d?+?0?t(!M????J??8?UNl?wB?Y1??M5?*???y?VbWo????Rl?a ?)? e?????)3??z????6b????:?`??-n????-??3:???-?w]??R????? &??7+?/??=?7?yx???=??RQ]G?????j??b?K ???mw??G?R????P??i\i?i??s?s??-?]?u???H`??H,??g?Z????Ks0U??A? + S?"?O-G??" + ????Bc/? ?a?`V??????t??@??c;?d*1?y}?s??Z?z?U???[{???t r?V?L???????}? {M????&?V??H????OH?+4?? '=?qp??)???x???????y??%a?_ -?o??-???@j??N???D???????i???L??M?;C?Q???G??\G??z???IR*I????:_?>i???L???C?q??:??$,?w?m???$h {?~?)/????u??S?????};?|??7 ??V>? \?n??n) ?"???2?m? + ??`O??U??????r?? ??(???W?Q?Qo??1$ + ??w????}??f??????^??}?????????R"???j??-????????[?W?P??????????C???x?$K?&3S?K(?v;???DF^1???]??13?L??????z?=??9??p?(??cyQ?F??z?#u??d??/zr?P??BUQR??uB???_qB???;??R|??P?]H???g??????J???q?>*??/?m???/?Z~IZA?=|??I?=_x?? | ??J??C???l??g???G?P????f5??|!|?Ef????Q?=6=?_???|'????j?$~???d.VPo??O??|????????3????y??Il??W'????b????yD?????.??b + ????????8V????)????1I????Au????f2K??? ^????9???Ai)?|???+ w??Q_BS?A?|~0???9?+??$?g????z{?Q???u?@?o???y#?I?x>????VP??9?Ii??c????z{>?"?????IU9????????i???>?|?X%????4?n3?+ w???J??[? + ??? ?H?T??? ?Jf?^?y??foM& ?0?]?-?T8?'?????4?V????S????(?/1????.gf?j???S??@?''n???O???????d?k??{2"m SS?pui????????W???????????l??? ??? ???R??x?=????*??o??????? U?l????;6?r39?iF?P??OB_7??????']D??A.?\???m\????=? ???n??????}?+5UL????+ +?????w?[B???k??/Y???"????p??/9? f:?/?^? ?S+q??????????Ez??x??? + ??{?a!O????I4???~??? + ?t?2???O??u?!X??RPSu????????????Y?n?.???Gg???{Z?_?dU L?$???AR??????????%???????%?bMtt??{?d???`?J?s???6d+oI??????????d????$??[\????1?????e????? u?:p????5?l?,???l)0_?y?l????????L?j???5"? + ?&~f8Y?`#'?? ?O?@v?JK`i&???z??u?ZHzW73?{?#$???4?PYo1k ?s?Z??V()?}?? ???3{?m??]!=?????#?l?STT?????? ??T?d6??3n)?*^ B?tO$?k?Gl2??? ?u??Y\?I?+?I,u|?A?????vW???/?Y????e|???b????2?F??\?(? ??b3?&+??j?1???????X?o????{y?? ??r)?ioK??j?`TX?Y??? ??4??w)?????"??)??X???Q?????m??u??/]?xf?????|!?)(?B????$?????5?? + ???{P?K???I?,*????o??6??e????????8I??$?????5?N??v??R????L???}i4M??15??|SyjlG?L???I?m?h???????u?/8T at R???????#?P??y_???? ?8sE?_j?M??9?tf??+?$W! ???Lf??z??Y7???B|??'?u?8??wKk??Uu!??????e?!*?????QO:iw9?Qp??k'????\???{?+??dRz??}???RR???}?aE?????KYz??#??"t?l???ow?O?e???{???s??m ?8:?_m??y???-?r?S'???????uXq??H??x]?L?$??'d+ Q~x?+?-???TS??vI??????[f??i?&???e?w?7?????p??7B*?7????y?,{?????ivK&??:???n??d?vt|5cO[???R??????a???n?????????;=,??v?|?v?MGI?mL????$?{? + N??G???Vb?C???|u?q????dL?N ?s?8?d??\~y??????$H??Y????l + ?O??6?????g?l(%?n?'c"=N?(?(????,N?o?????($???w??Ng)_:8?k??????4??s????|^?????y?2;D??;pg6?I?y??? ?K?????u?? + ??Y?_??2???;??L? + ;`(/??*'Q}*????5?????-Z%jywFt?K???\?Ws?:??HJ}?8?gh*?o}d????,??)??????]?'a??jL?????|?g?]?8?????=`Q???cDy?? Dj?v??a??6?_ow?????d3?]??)??[G?)lo~?W?oi?|?'1???L??;B/?h!??\3m`H??U>{??Y???lo?^V????r?OY?h`???wxvT??? J??g??ah=K??w=?CN????!? A?:>%?n?Y?{??5?/{)?/"'??8z?Z?q?? ;??g>???*P9\??????+??;g&????s + ?s1?????|??G?G>????o?j?I????e??D!???\0?s0G?~6?v??^T???Y,j=?@????wN>??A??:?v?\/d?4#??P????a?M?? ?1?U?D{+?/??????v=?N???C1SekX?z?k$L ?{????EA?? ?? + $???f?0???n\?e??9N+go ?'??&A??b??????)?& ?R??!?????C?????" ???9tF{x?+?3?^?!3n??r??*'??b??u2?_^?????7?w?$b?2??3??7N ?)(????H4?KZAY ?????6b>?????Hn ????zRb?? n`Q? 3??}??g?????P??!n? ?z{?lQ??4B????X;B '?u?q?V???if?[???$?????0(!?K?m????????Y???e?(?nc*7"??/???????????Y5????mj?\?$L?????V?u^-?z?k?C??I???wz??G9???????&D????????q?? ?Y?n?!??&B??\?? + )???7?`{(?do?????R??!???l???T??3'????}????N?????w"??:c?????1I?r? ????{?i???9??4fs???-k?,??|(b??f???}E]?{{?#|/??[ ?3??e??3~??u????^?p????NHA??N?@ym??N???]OC+I?^8QL???K?W-?????,?N?s??;??1q??@???u\???j?v???Ml???W1??+?-N?g???Ss??< ??<|??? ????????o?S7????????d,?:?KDJ??e?? F????%q6Hbc?x??m??K?p??Y{@?B??????i????Pf?)9k????d??}?01.e????Y?B?%??V ^??H1C? u????K$?]???@'??+ ,??K??`???HD ??? ?8?H??$ + ?t???{?i????cv L?X+Yn)?@???J???D ??^Qcw?????T????%A?E?????9?>??I?*??D?????S9d.?z?.>?h?#?Ro ?????AH?xZ}=??,4??`"BJ?'??M??????6?qRJ???$???9??????f????5???_1?+82?????Jn)j???Uo?5??$?koeeDZZ????)??5? ??T?)~?I??@?????34??($H%?N]????3?????'R???9TJZ?????????;?DZMP???(??}?/?Ho??^??8y??z?x{?d??Y"$?K%|??L6??,1[???]?]???<)??r:3?Dz9?VS?I????5? ???5|=?? + 9???O????.$??p???I?f?.|????ze?z?=q??`?M? ?)f[jc?PM?$A ???(Z'????????k?("?O???P???)+&????o??l?LB??h?v[???4v????P?C9?r?????;??R??4??%? o?Z???q??m??VPR=?e?t1??h??HU? D- o?~Q??V(#$?6PX=?_?b???@[???#??0o?+ ??O???u???`W2D??V0?d?u????>???e????@???(!&?=?O???q??????x?M?/??????^?8_J?u?9 '?xQ+??? ??? + u?k\f1??FbsoG????_???b+ + ????-?3?|?A?I???[[???^?-4??JF???*4S'???? 1??K$U/??n~s?7e???p?]?n>?I?qAq?l}??N~.??F???:???]???+?f??????GEN?K?s? \????{??h??)?2?????VSx;?e&??????N????ct?o??e?r?C?i??????L?U?NN?OrT&#?CC?|??0???o8s?????~2c?N??/'?????!Q?e??+???Ub ?N\????d??????%eN??t?????K????d?g???rU???F?????:?A}9?~?l?? ??? + ?V?Jev?j&??v???????O'????p??1?nCoo????????7??y_=?7??a??9l R??  _9e??????H??K?_CMg????????I0\???:?2?1?e?3b?z{???=?7d??],j~9?/??????+??,T??5? 0?w?^o??U???%oHM?q?%@#???9 ??|??V?O<f9??????3?3G?7]??^t?B.?7?qW2|7?????????_??[?f?^7???/??I( (?9?v????k|?q? + ?/A???2??yK?m?P?????????&?2???{(??_U??x?W + ?(l?????n)|Z??eI??g?zI?t?????U????a?E??8??? @??7??????7?J2??q????OOg?@ + j???? ????????aI??C?msga[&?/~??;?v D7Vo?#Z%????9??i????W#??[????ld? + }-?s?E at G`o?&??Z&?x2???????H?6|h????F?>???$??????!??N?? ???u??`M?? Z?J?*s&u?y!??=????<.:?q-??r}?Q?b?zV\?M???R????&?i!m?????B'???????R?D??2f?c9?? ?,J??K???J???t??????????b??z?t?]?t??^U?,???????9??????$p$???gI?X??d ?CT??y?Cd?+ ?z????o?t?@??+????Gu??????'vP????+?&F????,???"??*?OuV??S$;????:??+Ng_ ?x?? ??N??|/?I?2 + >)4????)u?j????&/? + ?I???CV?U???????+ ????y I??D9?g??J&,Q?f?!D[???1???)u???z????7?c7?49???FX??),[\,?^?zM? ????l+ >???>????L?FV??~RtPl??~???????????~f?X!,!j9< ???~n??Um??p0?N5???m??[??t?a?\%q?Hh?C?:?5yL?p at s?e?WC??RR???TH????9#?( .??I)?C?Bv??%]?f?????? Q=???????????gN????P6?????H>?????i?rg??$???????????????\Y? ???|?????R?m?-????"{??X??&?~??&Z?=T????y?????? x{?)??????????J?a??G??? ?<?I??N? ???????F???Q?????/U?fS>??:????U,????????3 + =????????????=????*:????%??J??????U?.??-z??SB???k?????Vz{?>?/?V??? ?w????q@?7?f?e Xn?7U??s?l???4p???????~t?r??_???b?????G,*??e"I?T?\Pkl?g?h??w??G??F??G?{??+???]??Qb????}?T + ?e?E]?;?b???+?{????w??? 8oo??F? ????$????o?::?????-??!?????"O?.xO???uY"???[??=??o????}?%????_??? ??,??hU_?rD/??t??D?S?y?Z?x{h??? ??+?c?3?e?v???:????V??? LU?sO???n??w?%?r??Ez?????? ?????n?wX??WQyJ?c?%?????yA?Oc??9????^o? g??BZ~?=?%???:???Z?q7?zzy?;?W?????YD???X??M?y??]???????f:X9?>t? ???-?%??U}]??X????QD?ynd??s????L?????,7Lf???Y?????{FcY????? + ??#????t{?g'o??????:0??Q???? ">?K:????^???????????o?$*?H? h`??v??????2=zR???S????^5??r?~^?Fl??$?>????????2&)????#?w???xC??Z????z??G????5???*{?n??????`]??: |??&???c??? ~???&????????????= lYT?6?O????a/?u????q????g?1???????h????????}??5??-?????V0?R? ?\???N??????^~~?"?M?v??U'ky?? ??? t?D?Rhs-??xGE+ ???~WoW?bq?F??q:???? ???? ?????????Q??zC??@{?y! ?5XW;?^?OUWoWN?s? ?(???+j?)??de_?n????+?Q?-???l??0A?X>????[9XQeWoW?e:???)?:??O#+?????]?]9???i???: ??l?f???^??Tv?v?$?9XXp?cY?s??BK;???6?]?]I??-8?? ?I`???c?}C? ????????Wu??_?-9?jC?Z'?)xx??/???0?]?]q?n?G%???t??9&g?}??h??v%???*9?????Y@??|am???N?]?]ic??.?QYK.??Ehji???s????.?????JB7???v?Y??u?1V??????yDz.??j????;?h?]?]6%#?E?+ }6??\???[??Hx^?Wo?F?&6J?s]8?'u&X???Y?e?/?oW??????,]??j!?#Xj????[9v?J??.????F??)?J:?SV?Y?(????????H???5:? ? ??#?-/e?*?????z? ?Z]???4?&:??Z,?Y?????Jo/oNu0G? + v??D??T+y??????[?????Vo7??p???J7?ZK?rX??.l)7????2?z??T?ZZ3?j?L???He?s?R?^?]s9^MU?1}/e1?????NkcsI?^?]+ V??cyBHW?F?a??z???M?E??k4?t??? ?{???3?????|??UW?h?U?A?UD?oy?'?z???K??b4???jZA?z?B>py?[m?1?gM??aL#?JU!??}??F\9??O0&???{??U~?v'?Z"?$-?:U!???ax??{}[???????v????t&?S???N7??? ??N??z"+? i?a?? ???~n?7o???>??1xnS???9W2??T}?Uow?`??p?Y?PD3F? + ??N????????M??? ?????A?=?)??]?u???TTd?@????;?????p????"H??R?? ??Nk?g??=?P?Si'??T?????(?RN?*?EU??H?5?@>x?v^T??????\e??????P???u???????_?N?!?B%??NYGePoTnp3UU?????$J??KDm?A?=0)??m?U?)r??U%??q?-???I?l?? ??????r???9XCePo@??3??i??GA??[8p????p\?????4???????&????RoIu?5?"?]Ne8??l?????Nd????????????k??*z?S1??T? ?$?G?-??A_?=*???F|iUA9?vI??PePo??7U?? ??xUA9?;??YMePo????? :???R???vTU????????Xg??%*???R?^EePo*?&J?!?I]??*(?????U?v?S`1?7? g2?CZ?^???l??2X??????? ?AOU?LJ??o??O?z???????S0JU8??I?W??O?y?????nonNaA??p&A[??*(?y??6????ng.?fGY??,ZBsUA??????b?????FN?U?fT%S:&?DePo?)???tP????'T%sn??DK?A??? ?WU?s??b???M?I?[e0??[yEu?}?+M5p?Q?P?,???c*?z??????U?sxj? + J?T??S??????l?,????*????;*?z??h??????????E??al????n#jDq??????[/V?O + ????zH??>T?M?????r ??J???/?'????n?G??$?V2?$?W?  ??+#???~?C?(?;tU2"d?T%; ?u??W???~/? ??V?l?????U???g??*d??,W?l?5??W? ????`???Q3? % ????]M???!????+u&d? ?PUP???[aum?A??\j??E??9?L?hYUA?w??????`o????7???? ?? ?\??J??=h??=??:???N?I???s?/?W[p???jB??_?? + ???$?>??UA? D??kT????5????3AUP?G??q?@s????k??E?5?+???CFk?T??\?3$?? $?z{??O????Fn-??????a????Do??/????rL?J?U?R~ + ??k_q??T,L???9}??????[w??;??ey?????C:?sN??|?*(????n?v?z?o~&?]?s?? ??????????S?+?K???K ?????5??*(?'??x??J???f??HC??+ ?`?.0S???f ^?.??k/??u?????\?*(??Mk!??????~B???j??\rycU%`??{FA??!???????Y?z. ZD?n?U?R??aM ?v?R??$?QA'zn???????8?????)T(n-?8-?.????r????z??8?(?R8???B?-??y???$;?I?$M?d??????of?;???<?S??e? + !?n ??U??6????[????l?0\?????g??????l?F3=??75?????????!?;??m7???g???@????l??E?IOs??;u\_ok?n????*?l??M??(?S`??Bwz;u?X||?_h??z'?a?!-f\uj???c?c??E7?'?(W?y[????????eJi??q??>????Pv ?(U??[???.??{???e?3?w?!????????5$??Jh???M?A-??\6????3-?|v???????\??? + ??fod???md{????SB?`]?pZuj?ZH?m?????io?M[?????F?S?AC*}'??IHOL??q6?_J?|?)??U_ a? ?*lXG?`>??????tf ??????c???U??g7QK??! S?????]y???l?? 4???m?:???/???.???=4as|F?{_??f?[7?Ac?c4J???s??o???????mn6?&??vT?E?R??????B?L?????y?c??8???>{?:?4}??&y5tH??????????;?o???p?/??i???ba????5Z[?????@? + f}???????V??_???>s4h??.??)?????Z???^?r?????l??}?ue??d?>^??????????o? ??5s?^??&_???c????'??k/?????'????l?-O?????I?~???g????3?????6??:???W.J???????f??NPh + Z/???}75T??????????i?k?wX~???{???????????A'??y?|ZxH?)%|? ?=???????i??r????????????q??????????g??*???w?=???&??E??/?.CST???{?z?3?OI???c??8????Zs?n??????-??nG?w??7?[????Wo?}?>? L??o????????????k??dt????o?}??[o????/???s?8????:?????{?]wv???#O:??kn???????????V?~x??[.???? ?m????T??O????????????K?9?????q?Uv??T??,g??P??g???o=?d;i?ep???2?l'M???vUHs???T????NQ?????!?? + ?I?]????a?N??9> v[H{???R????o??%?d;i???0qe+ ?o?+ ?Be+ ??!?? ??2?l'M.??V?+ ??^ + ???Xp??U`?d?}?auh|]n, ??y????????\+ ??l?[?7??????[( ?S????0???*??????&?????????????B?a?Vf{??%??7O ?????????1!??? ??%{???s;??D??qu?ik?B?????J??)?gZ??B??Q@???\N??]???????!?:??J+ ??g?s???L?q?de?R?+ ???-Kl@j???????}+?Z`Y ???d????Z+ ??????}?? ? wo??) ??a????????:?+ ??{xr6??????:?_l9?w?K~????vt?Hw???b????oDm1??????T(???h???7?c??==??h????:Z?@ ???R?!????i?`???^V8?R??_????>&d?}?[???????T??????L??TX???f?}???????=?{-?.f?s??o--2?_N??Z??w?^1??n?h??~}??}?????}?C?d??= V???(????????lO??u????wl???Z|?L?i????D?>???L????k???e???G????????lo???oD?????[j?4?l_??GG?x????X?+ ???~?????7>????H????u?K?Wh??^??;???7?W???w?????l + ? ?}??????w ?nr?4??[?????$??l??^???[x?-?}>.$??????b??e?~??g{??Kl??)?????H???7?u???tTf?f???]_e?????+??2??F?%#}???v??[??Yu?r??v???F;?w??W?>?J?W?g???;?????4??4?lv?????????|???^y??w?????_~???C??c?? ???jM???O??????c???s??Ie{-%?|?eh?z+ o?,{????OFT?v? ??7af?=??????kM?j???^?J?g?????????p?)?h?5}K????vh!*??D????4n???I?f{x???}????Z?l_$Z?????????-?Z?u?I=??????k??6???n??6jy?????&>??l??h?y#??=???????`????g?-/????qQ????%3????Aq2??????? ?*?e;????`{.3s?T??Yg??_e??I?l???m?0n????U???1??t_w??zM?????o??"??????Z?g ??.???/7?????(???g???????K?~F??????n??*???2]??l?d ?]e? V??????j[n?B??n??????A?CSvv??~Bff??M|5???e?"?>?k?l???n?|?N???E3?????????????[k??W?G<2 ??d??;????CoZ??7??????/?nF?^?A?????N???t???y?'?????tov??'?????[????l7`?;????K=???g{???^????_?P? ?? A???????[9?G????????????i^?hbU5?????.???d???[G?8?z?>?iw}??;???lo?? W???{?^{???L??m????k-???p??V? KU????|Q??VM?Z ????o??,???? aJ?s?X?~QQ?L=?8???????u??UG%n/?{?Y?N,x??cg????????5e?????'?^q???w-\??f.?{~Yx?? ?=_?h??w???'??!????1?[f{?7??>???}??1)????bz???_?????V??M5?????^~j??~r?/?d?M&???o=f???;????c??S???f?2?=???K???6?V?t?J?~G???/???l?????z???>?g??Q?=???V???=k???_???A??=??????%????]?q]|0RV?&?????+F?v????ud?~???~???????????????=?/_?%?w????????(????d??_?{???oy??>???v???~??e????G???J ?X??f{???u??;?qZ?(???lpO?st??'????????}??o??;?6?s?I ??*?8q?{?????~??gs?/????:4@??x.??N\??i??(??()??q!\?;b]?????jx???f?????_??="?F???hw???S~{????.5?l?<?l?j?}???b?????c?O??:A?-?=?????g??????[f??? ?G&fM_>?a?:e{Y?$v?1?8-??g??n5??????}?I???d???:?Xp}?+9?v???g??H??8?6??~btw?????8??}?{?#??X?v??XY??l???d?_??7j?y?%e{????O??v??????C??d?lo\%Q?]2????\a?????????1??????Y?A?["???GC#??l?Ud?Zg{&?g|*?U?.??a?#?zd{???S?T??su???Z??I}?d???|?/??S?\O#jR?&?????/^??????e??c??|?J?G ?? + [??.???GE?95????vB2?c]??,?????}?? -?F\?????j??Q????{7N?W?d??N??gKy??Y??7?l??W? ??k? ?Z?}hJZe? ??????j[m?|?_??r???????]{o?jA6??g?Ukg??*[n?l???[-??V?v?_??????}z??x?"km?????5vy???l???&[?Tm??y??l?5{v?W??,???kV?m???X??]????*?????T?? ??????????^dogo8?N?~N????4???P?Q`?hwF??9/j?Y?8??L|?????N?%??c??????????? + ?yX??8???-???O?$+~M??}`???K??????`t?u\K??x??[?l?????????s_?/.?Qy?1???c?go{8????k?|?s???n??v}??????X?????`???v??qw??W?J?{Y???[??rg??Q?a/|A?)w?S?T??[??Kn???,?Dke_):??d???b?sh?x?? ?z~??+?W??\???r#???Gv*????geoY???[t\qO?9O???z??????/?8???_???zyi??=/??z\? ???Q??v????-?9?S>??_???????xr??/g???>??u?0?*??????N??z?n??;?E2? ??n???)? ?]???r??WC?v3???#*?????t???L????T?6>???u ?c?|??V?/p??????v?}n*|???-OW???l????l??J? ?}??8???5???&F?M??b ??-Y?????????~=??????l??Y?G~rO????X??+??pr"7??g#YjP??jq???+?H??W?|k?/?D_m??#?0#??????[q?r^??z~??6_D?p'TL?yDn????????sm&?T?????0i??w???x?[??,???{????????n???l?/?????? + ?}????O?]x?U??~?t?\q??????G???v?_|???l??_?h? ??H[T???d???????/{&^????F???7{???d??f/???v???e{?xd???mH}?J?????s?Sa???????\j?l?????Y'>0????M??xE??V'L?????^?q ???Q?o???G?Y?&???i??Q???????V??X?e5?C8??~[?!?}?\?\M?f{???B?????????6???6????P???3u??L??????N??Ly7??????,?#?/????Lt??C??]yu?('~k_?;?Ie????$O???!?+I????G? ?ha?W?r?o???? ???$?J?????rO(~? j???S?DSTM?Y??aDe???!9F#|wn?~N????{T?7g???u?Y+?'?cA?tI?=L?<#?=?Q>?<$??M???6?l_???Qn??Y???1?Q?l????+???O??{?^Qc??[G/?|if?R??????]#??>??1h_??;q???{??o?y3u????c??w??????]?E??;?EM0c??G???|????C??d???d{4?abb).H??g{Yb?`??72??A?si????Nc???M?*?N.??? ?$?=?%???W???????????;?b??sit???????u???????b?O???w~?t???1?l?<?-?Z???%?d?Q??? u?????M&?????????kW??2?l_?r??g{It???v?l???k~?vQc???r;b?'??:4?V?l_?J???? |????E?????]????=?????????#??????????????NT???95 + ?O)?????????m???|??T???????Y?a?y:?lO~????7???=?????@%?????lNom??/?N?????????3??????l?<1k?.?F\?????l?????5*)?8zseS?????w??Ht?O???p?X?l/?8?R???o???U?l_!??S?l/VxN?.???$?If{??U???[B?]?Btc?????)%???N??\ :?5w???}? ]?O&:?x??l_??G????a?^??>???u????)?_?? ;R??#??\y??????t/h5?EC;n????V?'???M?????????z?l?.q_??????4????0?3_$?2U????Z??8o????=????????N???j??????????+[J?W?d??s???????0??*L?,s?}??=??~f????N??X?>/?s?l??L? E??????+?$???h?r??K??? ????l??????S?H???Ik??K??RA????[?q????n?Y,?????9p&??$????b_????O??E?Zg{? M?f??r\??e{??*????~???r???(O???q? ?4J?6_????hv?????JQ???%Z???5f???n???Ec??????MM?>g|????6???N??ed{???t?c??]??????.???7?+ 6?(??q?"???K/??????????99???r????o ?(w??\??|????5??I??N?K?M???Ji???;?8??????U.??I?S??K?o??gn????.???^? xy?%???z???????KU?}?i???&Q??????i?s????????!z????'?^???M???h?g{??0????f~L?x7?p?????sop????_????T<o?j???W!?|??/]??Ea??????j???????????6U?}xA????????1?:??:7?@Q! ??S}??Y?????3????????%????l?Xu????????????V? ??'??S???!???2E??M3?;???O?5|?M??????q?????9???^1???c??,?j?gn?2??k?P?i#??????x"?t?h?|Sqn}?!??v???P?Z??W??1??iE?v??K???C??i?^W??[?M?Z?/?clT?.???gd{MZ?????e?/*B??A???ar?#?M??_??v?>?J?~&(sU>? ??%e???u??W3?{???????z+,?? ??m?w U.dw@?????g{???M?fR???????9?5?l???:Q??????3??W?l?d?9????s?6??O?2?@?9?^.?jE|9????||??r????K?g?=Z%?3}??<?M??^?<>?K?0?39?l?l;,?F?-???5?o????N??W~??_?S?U?W?z??????uF?u~?L?h????t]?M&????p??w?oLv&??O;Z?l?6?g?Y???????S??v???????\ ?#??????c??\??!?|_???6 ????? + ???&?????T$??gf?+f"?3%?????1e???L??~????7lZ?t?U???????e???a?????????qlP??x???_?V???_??6?3?5?z??Qe?l????v~??????+Ss?g????[????l?t9????Tc?g?\?G?;}?oiF?O??U??f?S??q??????q???F????????))????????H @?????{{F?nP?l?z??]??\??WV0x???om?=?g?KI?U?l??;?p;X??????C??|??^???Q3?????.?|??G?]2[???g]}?M}O?K??x??;???n???-???c?N????]u??+??q[??^w??'???~o?j?.??????T??&??'Lg????}?(??:X?]V?????V? q???5?h???[?&?+?4Yn ?.?lW??;&~????Qd?n?8??W?U?w?u?Pet??u??u?????^M?h?L?G#???>?D?R?????u???g?]?_8?X4?rZ6j??:[0? k??????.?{??8???l???a???g??Uf6?}?G?s??NN.?n?????? + ????7R?lo3????5?| ? ?T0?~??=b0%9?E?_e;?}?/X???7}N??5?<~z?mG?????'n??53?l??J??{???n E?)J~H?W?l?3???e?>3?????y???^?l??X6q?u?s j???V?-?????^????????az? ?????Aa:[T???o?OcT^?6w???!U?yQ???????i??"?[E'S'?os????{??????#?????5????l + S?sa?????;??} 3]']I???f?v????fW??? U?l??%??n??lG?7?? ???YoR???6?H??????;?.O?|?]??P|Y?l'???w?y???@??$??E#?(???????yA????M],???????CZ?'???8?Xt9??Kk????w-???_?s?q????????l;?y??x??)?>?]??E??~#??O??B]?=??X1?G?=A?#???S??"s?+??y?2W???D[????_/???>I4/}???O?Ww:?????u?}:????`Q??{?&???,?ob?j???O????{???????9?b?k??????????s?$?2?Mh_?l/???t?s.?u???j?????=??????o6????o??N:"????k?{?kO%;???w?!????\???x???A????fme;??q?=?????g???????????|?????h_???~?_??????u?;}???=??????????{?D????%q?Bxv?%Zez?p?'??^wi??^??C??? ????;$????!??m????????e{????^??3?D??????+?.? ?s????????[TS??Lr?????4?? ?j???4?a?%Q??Uo????:_S?????????.????????K????????>?<;?}[??#????}? ????}???|G?[????E???,?????EF$?O_]??yq?C??q#?K?Z?o-}??Xq?????K-????##F?_`?????ka?M?~+?????????U.???a?3???L?Z????74?(?C????{??_????q-??*V???? K}=???????vt?GZz????]c?g?6????Qtx?@?7???D???N.3?????U?E{T?? ?)??Z???'?)z?w?????N$?Fb??l?>)1y?L}?=??K?}?Ze{f?o??????S@??`?=????s! ??P?l?l?]???v2??+ ?C???3????7WN ?F?xZ?!R+ endstream + endobj + 839 0 obj + <> + endobj + 836 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [395.754 427.7 479.822 439.241] + /A << /S /GoTo /D (cite.METHODOL) >> + >> endobj + 837 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [482.883 427.7 507.032 439.241] + /A << /S /GoTo /D (cite.METHODOL) >> + >> endobj + 842 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [338.028 116.489 423.069 134.023] + /A << /S /GoTo /D (cite.METHODOL) >> + >> endobj + 843 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [426.616 116.489 450.765 134.023] + /A << /S /GoTo /D (cite.METHODOL) >> + >> endobj + 844 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [427.762 91.225 460.05 102.782] + /A << /S /GoTo /D (cite.SPIRAL) >> + >> endobj + 845 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [464.314 91.225 488.463 102.782] + /A << /S /GoTo /D (cite.SPIRAL) >> + >> endobj + 846 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [89.004 79.285 104.844 90.827] + /A << /S /GoTo /D (figure.caption.18) >> + >> endobj + 852 0 obj << + /D [850 0 R /XYZ 89 757 null] + >> endobj + 98 0 obj << + /D [850 0 R /XYZ 90 726.045 null] + >> endobj + 102 0 obj << + /D [850 0 R /XYZ 90 550.046 null] + >> endobj + 853 0 obj << + /D [850 0 R /XYZ 90 363.397 null] + >> endobj + 849 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R >> + /XObject << /Im5 838 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 867 0 obj << + /Length 3168 + /Filter /FlateDecode + >> + stream + x??Y??????W?ftD?B>?#[ + ?-k:?h?+ w??R??s??Lh?%?ro?'^P??????G? ?t?yBm?e+?+??? ?3????Q??9?????$? ?B????F?i?8??T  nPM????zC??]5?(H??I??g??G;?s$?????Kj?G~vQ??Pv??@??"?I??,a + ?????;v??9?????E????v?3????{??x??f?C[ ??# ??????????*?p?h??3???V??? 4? + B?$? ???VB ???HvER?"????w5????*)??K??~ + ???????????????(??[v???&|w???$P?$?r&???7R????U/??2,f?????zj?.?J?Ob?B??!?ylz?ClI?}??%5.n??N3u1:?_>~???Pg??4?/????????i???KY}??i|_????t??Mq?~??@3?????{ o??&-5d?IpW`O,?U??u_U??Y??f???????????5?S9????Ms&/???nl^?????=??'iD?R??K3H?>{?ps???0J??yN\???_5??}]??W???????/N> endobj + 847 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [372.363 605.313 416.119 616.854] + /A << /S /GoTo /D (cite.AGILE) >> + >> endobj + 848 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [420.34 605.313 444.489 616.854] + /A << /S /GoTo /D (cite.AGILE) >> + >> endobj + 857 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [386.569 494.373 407.361 505.914] + /A << /S /GoTo /D (cite.SVN) >> + >> endobj + 858 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [411.437 494.373 435.586 505.914] + /A << /S /GoTo /D (cite.SVN) >> + >> endobj + 859 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [282.672 374.821 303.414 386.363] + /A << /S /GoTo /D (cite.TRAC) >> + >> endobj + 860 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [307.279 374.821 331.428 386.363] + /A << /S /GoTo /D (cite.TRAC) >> + >> endobj + 861 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [408.623 285.142 511.227 296.699] + /A << /S /GoTo /D (cite.RSYNC) >> + >> endobj + 862 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 273.202 113.153 284.744] + /A << /S /GoTo /D (cite.RSYNC) >> + >> endobj + 863 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [238.344 225.366 258.768 236.923] + /A << /S /GoTo /D (cite.SSH) >> + >> endobj + 864 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [262.917 225.366 287.067 236.923] + /A << /S /GoTo /D (cite.SSH) >> + >> endobj + 868 0 obj << + /D [866 0 R /XYZ 89 757 null] + >> endobj + 106 0 obj << + /D [866 0 R /XYZ 90 565.592 null] + >> endobj + 865 0 obj << + /Font << /F21 332 0 R /F31 350 0 R /F30 348 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 889 0 obj << + /Length 2013 + /Filter /FlateDecode + >> + stream + x??XYs?? ~??PU^?ZK+Rw????S;???I?jv???????v??? ??;???-+ ?rOB:?p|G?????*g??????????2?"i?=?? ??$IPW??5????z#n?????34\&?????5?C??6?z??]x??^z??v?x??.?D??? ????L?????z???????P???+ ?v??t??? ??L??3?Ik??v????\I!??2Hsj?Qu?Z?????????????????[?Y??o??JA?FKQ?~????)?Kw?@???N?C???? GL?f???/?P?-?W?Qp?x???,y3??f?????+ ??[^/ L????"??????5> endobj + 881 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./3c-compiler-Edd-Barrett-dottex-fig4.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 892 0 R + /BBox [36 36 468 98] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 893 0 R + >>/Font << /R8 894 0 R>> + >> + /Length 776 + /Filter /FlateDecode + >> + stream + x???Ko1???+|?C?g??#E?@?D??U??AIC? ??g?Y??+qH?U??d????<+?A?? ???{w??K???7*,?Q???????:P??>L i"+u?i$0?? ?????|???????@?@?G????B?n?9?s???k?V?3?>??;Ojv????6????{T?u???r?8{?????????Yw???????=J????K ????????% + ?=IP at J?+?Rd??{q???? j????ZWI`S????#Rf~?H6?????&n4B?4???Mb??????")p?o%F??dQ$%??aZ??x????q?i?.?wg????N+ Y????t??B?M???????C??lm???|?j?+ endstream + endobj + 892 0 obj + << + /Producer (GPL Ghostscript 8.63) + /CreationDate (D:20090521011559+01'00') + /ModDate (D:20090521011559+01'00') + /Creator (Graphviz version 2.12 \(Sat Apr 25 01:56:11 UTC 2009\)) + /Author (\(edd\) ) + /Title (G) + >> + endobj + 893 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 894 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 875 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [200.842 389.87 262.642 401.412] + /A << /S /GoTo /D (cite.LLVM-PY) >> + >> endobj + 876 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [266.291 389.87 290.44 401.412] + /A << /S /GoTo /D (cite.LLVM-PY) >> + >> endobj + 877 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [340.484 377.915 365.759 389.457] + /A << /S /GoTo /D (cite.APERIOT) >> + >> endobj + 878 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [369.39 377.915 393.539 389.457] + /A << /S /GoTo /D (cite.APERIOT) >> + >> endobj + 879 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [436.754 377.915 452.594 389.457] + /A << /S /GoTo /D (figure.caption.19) >> + >> endobj + 880 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [472.647 377.915 488.488 389.457] + /A << /S /GoTo /D (figure.caption.20) >> + >> endobj + 883 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [296.523 115.151 312.842 126.692] + /A << /S /GoTo /D (section.B.3) >> + >> endobj + 890 0 obj << + /D [888 0 R /XYZ 89 757 null] + >> endobj + 110 0 obj << + /D [888 0 R /XYZ 90 726.045 null] + >> endobj + 114 0 obj << + /D [888 0 R /XYZ 90 531.879 null] + >> endobj + 891 0 obj << + /D [888 0 R /XYZ 90 358.328 null] + >> endobj + 118 0 obj << + /D [888 0 R /XYZ 90 209.354 null] + >> endobj + 887 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R >> + /XObject << /Im6 881 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 899 0 obj << + /Length 3165 + /Filter /FlateDecode + >> + stream + x??[mo?F??_!\8???ew???Gv\8vj?)zmq`$?&"??H?????gv)Jv??????? ??:;????r???E???????R?Lh2????{&??D?Y,z?i??`8??????T:x?/?E?????$?'????????9?????X??M]..?=9?2 + ????y???p???? i?????P'Yo2?????7??o{Q????y/?1=g???w{?;???D?I*zi*C?S??/{Q??8????Df??F?E?Q?"?{??U?eE?}wo????????Z??QI?Ki?L;???7????????~?????ge]8?{-??i??y}Nfy]3;-??e>????4z]4W???.??????]0??r??[???&???T????N??q?I{?~?? IC!2>u??EE???X???? ????}???C???-]?b????X??v???z}?C??vl!??ZN??L????|2)qySp???X???y?h?+ ?Q?$_8Q?%?m?/??????@)??3Z6????z???9????z??8=?71?B? ?,s?HY?Y??'" + ??E?">2??%[fY?7????Ms}?pWY?'?n?X;???)??w?oa??Z??I?sS????,??T??????????Nn?][?^0?mL??'?#q?3.????jY6Ws2GL???*'W?U??r~m???~??? ??j?.`Za????}??W??????I???4???j6 [f????YU}???|???m???~?f???'????????N?[w??~?QO?4??}?H?J + "Q?bf??~ ??w?K?????76c(?*??l|3PY|/??@w?????6?? ??3?p=T?( + ^???-@O???m2B?4q??xgHT?m??p?????q?????????????j]?m?P????????543?M?@&??+ qi?rS?)?>DE?? %>??!?0??G??&?o?Bl???1?? + t??t??wz???t??s?C??????$?qb???o???D???6??+?A?=????+ :F ?6??5?*k?+ gP???AF?Rk??G?JM??@??Rhh?@?fEqa??q???c?'????u?F??F???x z???c-???C??q?;?Hx?5d????$????\???? + M?'?O?0?=???? ?0???w|????P[wb?3??]?01???> S??3o?u??b?V?w?7?? ???e+ ?"??s-?+ ?(%^x'?Q?????B&a"??O??_:?{8??????M?iM t??+ endstream + endobj + 898 0 obj << + /Type /Page + /Contents 899 0 R + /Resources 897 0 R + /MediaBox [0 0 612 792] + /Parent 869 0 R + /Group 839 0 R + /Annots [ 884 0 R 885 0 R 886 0 R ] + >> endobj + 882 0 obj << + /Type /XObject + /Subtype /Image + /Width 2301 + /Height 1351 + /BitsPerComponent 8 + /ColorSpace /DeviceRGB + /SMask 921 0 R + /Length 77248 + /Filter /FlateDecode + >> + stream + x??? ?T???~??R?D%E?????;I):r?D??Qr)"??[H?Q"J??9????;??q???(??}?????{??^3??f????{?Y??33k>{??5m+ r ??-cpb?\+ j/+ j/+ j/+ ??I?????7,?_????s? ???~v??E?f???b??_?u????? |?u? ??i???(?x?Z?x??)c?????n??i??I?H??ou????u???S~???(?y?????????O,????x??`m??` ???u?f?? ???????S?V??????? V??+ ?????j??u??1? + ????>??&g?Iij??/?? + 7????o???????R?P???N+ ]r??2???G?Q??????????n{R?^??wQ???e?-????j?t?4fT{T?Gy?& ?????;???{?i?B?a????s??e???p????^???1?Ow?q?+???|?u??>:???N:L?P??j/Q{Q???+ ?~??+ K??]:th],#F?I????l?j/+ ~??;o???1cN?q%???d??}????T???|??=????g?J???Q???*r???+ ^f???X????W0??7???n ~ ?W ???v?Y?B h??1?P{+ ??????'w??u?:5j?b???K?Y?t??? =???/???M6??vF?????????k?OG???,??i??x??To?bz???%?P{=??????KU?'N6?^{o??up????^?~???+ ??p???2v??4K?.?`?X?f?'/???? ???????:ux? 6??o?y4q????zZ_???^M?n~?m??xcf08s?N(Z?cb??????j/+ ]m?77~?eq?s:j?????n?fi???C7f???*?? + f??W?k?r?T?t?z?+O|?R???Q?k?,?I????M???m?3? + S?n?H?f?(?=???UOS?g$??????X{?9????f???O???R{?^2?x??4+^??/??5??)?BW;o???????|???B?N??^+ 3f????1??????_??????]Qj?T_???????{??]b>?|n?{?????n?4?? + ^}t???????6k?8????i#???H?A???^}??T??r????t??s??^??g??????iV??u?(5w??+?{?B?? 3g???2[(???? + ???;!??n????eYh?5x??k????.|??=KY{~?>ic??+ + F??k?5k??a??l??(?W?g??k?/???????T??z??k????????j??U3y???z::th??z??{?|qX?N?bj??]w????"?e9S?^??G??p/?4]??o?J?~??+ ??????P?????????K/M]??w_??-?|?u%~?^??x???5h?s??xc?-????J??|????N6???????{?v?K?n?? k???[?N/((??`wZ???@??R{???C?+ r?q??K?2.?|w?!t??E?>?^j??~??+ r?????!t??~???j/?W?N??^+ ????_~?e?2m??W?`S?S???????? + i??e?~?/??S?B?z????/>???{??C???}?]??9??}?=????+ ?+ ??-S?^"j/+ ??*?y??D?^+ ???{?>je?o|??(???{P???+ ??"?+ b/??^+ #)??Z|????C??W?~?c????? C??E?A???|?Y?X? ???+&M:?Q?F?s?? ??m??^b/K+ ??? ??O??j?????e?[n??????N9e?{?-(?S??????.??h?.???+??N;i+ E{???C?n?I???`??????{=?????n]?q(????????????2d????;U???,??8??R??????u????W???r?+ ?{????m??? jC?????????-??I??5?r??;l@????{???-?+ Xb/????K?U G?Hb??0???q?FS???? ???o?????j??3N)??????o???q?Q?&??8?????E?x?5C??O}S??b?-?? {4?????? ????xb?G???F]????F??u????G=??g??C9???/?X???7????.[W????G,??????$??Z??c?! ?7z??+>4}?? 6?,?{?? ?3????B1?^?W?H???w????????V?Z?|?:???????n?}?hve?????|???'?s??#?p???S?[????????_????3????w???W?f???;'??C??-??M>??????s?m???>???G?v??'?q?a?????qC????G????y??_??*lu???s??????~t?c?]??+ ?{v????y???O?????/?E'?*?^/?|c?n?$?????N?F??????.??????????n???[?o2j2??X?{???7???????????^+ ??~??;?????_B??c??{???L?2??c??K"???_[??????q?N?0Q?P???m??y??i?&??L??+ ??????h%u9c???*u??i?N^?jI???ydZ??1????,?z??[????:/?|c?????????U?b/+ {%?U??????????o|????2???????y???o?FMZ?????wj??7??K??]??-o?q?? + ??x?n????D}?^+V\w}l????u?s?L???QC??????????hV\??L??u?{?Q(x????.]:Ti?{????c?R??????{?????1??????5b???>?|???\????#?)c? 2????M????/?-???M?2?q_????3g????g? ?e???[O?0????v?mz?}?G?`4???>)?U??????n~z?????a???????~N?@q6]?????????o??z?|???5????????}?I??q??)?{@?;???^G?g?V???E??[w??+;??E? e?W???/o?b? rn??u????'?^?????;'???????? 7???8??-?_s??? |??#>xa????_qJ???w_w???????h????.???????f??} ?/?.?g????O5b????????qCg?;i???/?o?^P! Zg.?W1???^??\???-???J?9??9??'??^???Q?{????sn??Y???G???G???! ??}????O o?{W??&??{ r>?=?P???????>?{E'? + Q?o~sG??DM??,??z??A}????? ????P??m?M?;M??5???!:th???5?8??O????h?? + ????f??s?=???;?=?sH?=??v? + ?L??.?"n????P???|?e?c???????Kg?b(??m?|????v??0??????LD+ =?^]r?I9w??F]j??G????i?N{@T?c???|@\C???d? ^Q??^????9_????QB?W??I???[o???? ~??????V?^??2???V??%??p?{?Q(????wl??q??????>v??*?fq??.?l?SF?:(?Kf?:#{?>}zV?  ??????W???? + _;??c?? ????e7b/?+ ?????J_????'+???9$???????u?m????9???'?~? + {??+ E{?????[???????????(3?????,?(??S7nw?????s??????R?????9??{???? ?O??Z???????v??\r?Io?1/;??????/??U8????-??0.????????a??rn???V??Y?%?????P????G?1???#?j?~??-????,?K/???????s?T?????n??{o??2????z?v?l?M????m>Ay?? ????????:o??Q?~???~,?s?]-?{P???P???EW????}???;?m????7\?W?I;v? 7??g??=?6?F5?????WT_|b\?{???/]:??N]?Z?j?_?????.?:?? + ?={A?g.?W1?????J?DG?q?? ?%9???v?m??w??z??|?????????G????+?9h?8??s?a??? ?J??B?^?~??G??q???hI? + ?a?j??k?:?? ??^? ??????'n?\p| ??? + {}????6??p???s?????q/?N??F??U???H??????'?9\?V-??? ??Yv???'&?.?????;??????????j?j?qcb/+ :wn?????N\?????T?o?p??????>'???????r????[?$?J=?"???u['??h????'J?2Z??y~??_??+ O??{}???-??0? ???>}?]wMy???,?h???Q??v?f~pZ?+ ?F??????Go8z{?O~??7?>????jk???? ??????WT??;5?;?T#?J}???#????+??_?????^+ !????D/[???^J??u?{?Q{???? @kTG??KC?e?@??fb/??{A?]U?+?Q{???? @_TGM??K*????Yg4%????b_*?R?????+ ????? ?RJ??#m?????3?7o^? ??K$?jP&+ {?^J??+ ?????{A)^???*?Q{)%?(?????WJ5?/??????A?2?+ {?^J??+ '??7????R??????@?U6G?!?@?+`??g?%?{?{?_4+ ?|U?yEZ?l??OO`5o?4?g?g??C+ R7?4A?b?= + ]t???*U??p?????+ ??O??N?a???w?a???h?/S + ?|?^+ b/??^+ ??GA???? ?????????????kM?&_? + b/??^+ j/?????FS??d??J?3+ j/?????&R??d????g8+ G?^? ?W?=?????R{????r?r????QP{???+ {??n??>"?b????? ????R{??+ ]j/??? + j/?+ j/?+ j/?+ j/?+ ]j/??? + ?^?W.?'?????????s???+ ?? ???R{????;]?k???+ ?j/?`+ j/+ ???h?+ ?>|????????????j??p??[????? ?l??w??-?r???????????s?{????P{??????J??+ ???e??Z?k?????5+??;??? q???I6~??????x??bk?v???t?-j/?^"""??B?+ 7??????^?[????Zu?.^?? ?? ???zI>???o? ?U???^;??[??Q{???j/+ ?O???+?M?:??_>????????+???~?xX?~?]?k?`??;????~??a??1?p??;?\????E?KNN?????K?/?L???????_???}w??uAf?]??????5k?????A?}?????7w???Vs??I?u?UW???j/Q{Q???]~?????D>????|???Y{???sxFN?Z?2e?????^???)v?+??Znnx??}???k??'??????????n????_O?U???X{?=????^+7o>}???j???R????;O}??Bo~?I'?X{????$??J?Q>?j/Q{??????????j???C???LX??$7s?}?M???O?O{-???$?l???M?+?Wb??????m???T?R?3?''??SN)???=?????M???????+Ij??|?????P{????? ????He???Oj?H?^?}????o.?M?M???S???k???~??????j?j?M????^?f?????3??SO?v? >? ~???g????W^Y.O????P{????? ????H?????+??W?j??G??F?.?M?y?5??'??????O??R???? + f??u'_qE???N|F??? ?CN:I?%j/?^"""???p???x?^?/?WLj?/?4??]??/?M~s?!?MN??????3f???W? + ?o??m? ?^Ee??????? ??????????5o?F?%j/?^"""???p?????^?/?Wj?k?. ?O??u?_?|?y|P-77??u+W&????????p??????4???g? 7r?%j??$????8"???m??[?F??3??7????P{????? ???GDDb[{i??^????~?m???*?_?:f??p???=????k??/??d? >??z???????Wp?)+V??9?4?Wb??^????????5?K,??W?%j/?^"""??B????8?^?/?W?k? ??}vx?n?????/j??k???U???????]?~I~???????7m?????f??5?6{u???+?C ? f??s??G&)??M?^?'F??A?%j/?^"""??B?%""R?k/???+???~?????m??7??/i???/??z???????^???/???|??????^????o,t??7nL?f??z*??Wp??w?t?????9? + ??;???Sc?? 7?R??? V??S?}?z?c?????U???D???KDDD?^??DDD?W{i??^???\x???w??V[ ?0??U????G??j????????k'ns??????????n?}???4v????????}??? ????w????'?c??uV?eNN?????9??!?\r??qy????#V{???V?~??c??????????8k??S??o??v?N?h|?I??u?:???.??k?/????????j/Q{???[???R{E??J%Ij/?j/I}???????f?2~|????+,pdD?^??DDD?^?/???K?%"j/?^??{?zk????F??1p`??=?????#?[??S?n???S;????]??M????n{u?r?q?k?5????#u??|??]?=??>?4?n?F?????_?????o~??????5k???????? ??? / ??????I??NNX???j?G??:?SV???????????;?????4????=????<[??????8 ??C.?$?b|?I?{??1???c??????;?Q?=?8??#??2e?;?????A?W???J~???_~y?????!??Z?????3?}??p???????k??w?o????k????sf?E?4(????i??g???v??5x?]?|??????{??o?/\???3?8????????????W??y{??i >???????w?G??#?l??c??-?h????q??u??rs??I???F?z???N??Q7?n???/???:??Ypo?L?VA???o??????s?_V???? ??_??U??/???Bwu?e??????X?l V??ju?*U?v???[??|0?>x??v???c ???q???????~#G&???g???QG??[7???k?>??%????????^??I????`???&??h??????)j'?=?u?7n4T?? ?^"""Q{i??^j/?j??w????g?Q{?X{-?????[???h???I~??g?????%???????c_?j??w???[???Z?i??}??{?}?-Q{????o??UIn?t????_ k?????l? + ???K.)s???M??????VI??_??N;?p?g\{mQ??r??$?a???????? ???KDD?^?/???KDD???+?$~?a?????^+7o??G??????i?%???:u?????z?? /?1p`??????Y?4??x?v???{??S??????;??p'y??i??W_[{ 8??Vm????????V??>??#?{???n;????S{?=????jm?????'?|????m??C???%~+???M??w???H??? ???????|???????^???V?U>??G???t?e#n???i???????] + ???$???a???x??t????????] h???????????J??;??|?9x?Z{?m???o???Yt?-? ?4??3????k?OZ?&??_?S?~?M?=?s?????v[??6,x?+?????wV?R%??a?? ???;}??^C?l??.??%8?+6m2Z?? ?^""????1I???R{????P{%? ?v??+??k??%?_?7???????zk??1??S??????????j???5???l????_R?u??bk???9?????H???i?????? + ??q?????fM?-??>=?F?_~???????????/3?????'?eMZ???? + ??-?z?m;?B?rVb??]??w??u?????G????%??=o???>??y??G=??G?????j??V?Y3??? + N????U?V??K/]??w?\?a?????>?Z{M??_???:??????&??G?xcb{{???F Q{??KDD?^7&i??^j/?1????:v??+????q?? ???p??d?G??8?????P??s??K??O?W?N^{?t?E+??????^y?????7?1??:??o?)???????Mv?m?????????F???O\?$y????a??*??\{????bw????????I?]V??}?O??ry???,??'?v???? ?$O?i??~(,?z?R?q"j/?^"""j/???K?%"??B?U?,????????+1?v???[??K???l?p????O?]?^????I?????pB??W? + ??R:k??????y?;?v?????XQ.??????Z?Z???rso??????v-??j?????Kr?JU{?0|?a????!.t??|?????'O.???|???O?{j'~????.2]?? ?^""????1I???R{?????g????&???g?R{?X{???{???O>)?=?=th??a'???~h??i?G? + ~?&_?u????]??????u??????]}u??^?Kz?Q???~???????a????_'??J^WD??}?N???*??l? i??v*?'????9s??~?_0?Kj? Q{??KDD?^=&i??^j/?1??f????g???j?k?~#G??????6i???/-??_Kr?N={?7 {??+????Q???^s?{/?>?s?s?-????>?????%?r? ?? or???Ij???????^W{v?)?n ??? ?????G??m??[?z??????$?j??m??999???7`?? ?^""????1I???R{?????[?5????OI>???J^{]???5Su?|?C??HI2g???????-??_???F? + o??$?n??_?O???^5j?*?z?pa?_K??z??o???y6qb?#F?tS??k?w,???JU{?Bp?;??Yg?:???]??~6??%??e?n????j??np??/???u?????/??~{?Q??n{?E???@?%""j?4?I?/???KDD?E?j????&???3m??+????????y?/?U?v?7^????W?:vl0??U*????:????w_??m;v ??g?k??? + f?O?7o?? ??_?JC?u`?>??[5ne??p??z?,?????{ Q{??KDD?^Y?4??Q{A?j??>$???_z)????o?M????/[???~?????|??U?3b??;???????N??_?L??^?;u*?B???W_ 7??U?r??+???????f?????T)????Z????O??6???N??^]?=?? ??B?%""??R{??DD?^???????G????SO?|???V[?{;???J~??=4?a???.??^?y???f?m????$?C???+s7???????????q?*U?_???Wb??s??bw??'? + ?^?~?9??7}????????v??D?^??DDD?^j/????? 3C??^Az?xbx?j??=g????^?z? ?v?q????j??I??',E]2~???;???_7o?? O=??*???9xp???'?(v?;???????????k?%???????b>???w?v??+_o{?UW??????h????D?^??DDD?^j/????? 3C??^???F?)??????J??Yk??????R{?x???4}u?,?????*??C?>?l????????J?*???????C??????J\?/?7?TKzI?C?k???nv?=?$?g???*??J??t?v?a???e?????p???oZQ{??)y?O??g?? &??2?ij/?D?? + r???w??????n? ??m????_?,????k?T??p?%?{?U??????7 ??????$~0'??v5}??????\?j?????k???????w??Z?Z9~???k? f?7???Iv???O???_l??x??Zu??? ?0!??+??]???_70???P{???T?$??55???DD?^??k?????1??u??k?{???G????U??+???? wX-7???J?}?s?M???zkQ=???????????u?7H?2??7.xl ?}o?=????S{MX?8?f???KrW?????W???|???Z?(????^7k??????.t??????>}?]?Z{?{] ???=?@??o?????w?=?O??v + ?????????-?=g????DDD?^j/????? ?W?f??5?[?H?{?5j3b??g?)?Mh?6l??d????}n??????^??1v??&?O?UD?u????m? ?g??U??vZ?????????W??????4\??55k6???????a???5??I?7??????v?p?`???????]?g?????y????J?*??;/>??????Y?v?Y??????W}?E????U?v?M?V?v??? ????:x???-?1p`???????Z??w[5n?????y'?Y????_???I??j????~??????_?J?Q? + =hK????)SZ????^[?_????\?? ????`?????????9s???K??<?j/Q{???^""j/?^)f???O??|????A?N??;??n???g?6{?Q?V?|??????????^??xp*?? + 2~???????o/l???Gu?I'?<8??6m?o??????}V?Y??-[?8??#^x??S??{?m????>??7?~???????E}:l????k?0q???kw???????2~??I??s??'??{??5~?*?8?^A]tQ?'?u+W??`b????w???Q'_y?iW_=????6l???K|?g?? + 2v???????w9????q????rJ?=? ????bk? ??y'x?;???}?????*??w\p???~??????N|??l?Up???a'?0!x??]?O4????@?%""??R{??DD?^??????~???3???;??^??c&DD??Dd*D"JJ?"??L%)%*?J?"??I)????t?m???{?g?2????????}??{;??8}>???O???????^?Y??Z+|?T?j5n????ry???5k(Wn??????J0a\ ?X???z??/?????U???wi???j?%???v)??+H? E?????U{=?o????j? + ?????R{=???mL}????z??CW?r?]??j/Q{??KDDD???R{????P{?d?|?qp??Y??(pR???-Z?sg?????+?????2hP?R??O?j??O??j????u>?~??I????.:t??MIW/x???&?]#?^????o?v??? ???K?^???}#o?;??1?Do??? + ?f???3gFox??N~???^=aB?ug??^kv?????K?)?????V???7n F?^{=???p?????7QL/??-:u?????,?????Q???????y??<{???~st!j/P{??????^j/?j???m????l??on??s??-???[??#?4irR???t??E??D)v????k??h??b?????vOY??m??]nr???{ ???u??o??E?N}??k?+???Y??????5kz?yv?>??55:?z?#48?U?N?????=)??c???/???????[??j??u?qM;t???????l???????p?????l?z??????3?z+?1?1?c?2??+???.??;????p??????Q????????Y??u?6?\?f?Z??x?Y??y??E???`????/4??S?b??|3\0?X%??~????;????E?`%???S?t?f????}-??i?_O??s?|?y?^{\?65?9?R????.?0???W?4?a????? ???}? ?qD?????8???/:t??%???SD?j/???K?%"??B?%"""j/?^"""??R{??DD?^??DDDD???KDDD??hD?%"?????????P{??????^j/???^"""j/P{??????^j/?j/Q{?????K??Od?o??0cF??onu??u?6 zc???????? ?8x?,[,?3v??p?_3q? ?????????P{??????^j/????;o?1?t???Ew,]v?? ???c??p?>?h????p? ?????????P{??????^j/??e??%???^{"??????cy????^??B?%"""j/?^"""j/?^???????? ??ju?v?????w????X???W?g?#????k?U{?? ???????P{?????P{?n???W???]?^kv??l??K?%j/?^"""??B?%"""j/???+??~???????? F.???G??$?%??j??p??! |??p?/??'?P?j/Q{??Q{???^?A?*?6~?%l??\{?? ?^"""??B?%""??R{??$????5---???^?Q{?? ???????P{?????K??????????>??????m?? kw?\?~?C????_???5?m????????\?o??_??_?F?=??????k???????O? Vx?? I??????????Z?eKn????c?????r????d?]????~?????R{???j/Q{??r?5??o??sl?V?? W5_?||p??M{?y????N?/?????hQ?P??[?t?????????N:???>j??W,?M?????q????N;?P?"??%J?>?K?)????T????9???????*?f??K?????w?\?t???]??? ??,?D?b??????s??-I??cv??/?I??Z?h0a???????@??#?1??9???o?y~???;,?d?N_n???c? ~H???m8?V?`??_z)??=?????m??e?`??u?o? ?=?xt?)??~??'?L?)Vl????`?G??@?*U:\ye?? [????~?? 7$??>?X????4;????'?d????k?p????????M0??????K???KDDD?^??DDDD????m???O??V?^? E???3?d?????"?I?}?e???#??w?%?e???????K?F???|P?J ??????c?~??gf??+6m + ?:?g???>x??u{???l??_"?z??k????X?Z?9[w??W?? ???????P{?????K??{j???}W??C??V????|??O????????E???{o???K?.????4`@t??,2?????f0C??o???at@??5?o????:?M??????w0C?nf???? ???i?d??^??2? + l??u????9t???G??|??????j6j?J?2#,???????`{;C?G??hk????c6z{??-[???A&??bj??g?? [?x?Z???)??| + ?????it@? + ??=i???????{?????????????:??wEd*?`?j/Q{??Q{?????????SO???%C?F?w??M???>=?+\?~?????*y?#??W??????v????j{??Ik????|??5?????????T?k??S?Wf?????W?F???J?u????5f?|?????W^I??]?k??CtSw.[??I?????Vm???R'?o.?c???W????m????? + ?{@?r)n??E????k?????3??+w?????6?^?3??????=-?M23L??}?E?_qE???? '???^??DDDD???KDDD?^j?}???R?v?>??Y??If?Q8I?"ER\??E?Ku???}???????wK?.???]?sg?B??n???_??????l???}????/????~x???_|q??u?~?I,?J+?j??????CJ???A .LS{??P{????? ??H6f?????lY,??? ?W2??o?Oa??u??:/X?>\??}??(j/???k??C?>?????/?~????O?T????y?H?q????k??m???l???k???_????X{?{???Ro? /$?n??^A + )????)5?^.l:??? ???????P{?????fM?s&??3??'?O??????u?c??p??????(j/???k?r????R??a??87???SY?b???"7>???U{????????I??G?????c????'??-/? ?k?5;v?*[6?e??/??x|??#?J?u???F.\?R???Y???#F???^??DDDD???KD???R{e!??,)X?p,Y?????P{??t???p}Z]xa???X?Z8????J:>z??@?n%??^? ?F,X?t o?=;i?5p??p??_?t? f{????o??????W?n{???n???Je? + U?$?\j/?j/Q{??I???????E7???R{??k?3{???a?R?Vo?fO???+??^w?^?O??eWn???y???;?g????,_?/X???-[???+z???<3??F??&??k??y???;'??????^?]??E%]?*G??n?????W^?-?W?%9??3R????$??j/?j/Q{??I??Ij?t\?????????;K?/??????^???Z?qc?f}?N??+Q?t8??7??`p????????W???i??uf??-????M??R{????@??????s?I'eK???!???cZw??`??}?????????^???+ ?j??SX)???O??%??F,X???:u&??r? .?????u?C ;?=Q{?s?U?" ?x??e6D{?1+V??\96 z?U??+??\??d??!?<1?[?6?G???]???]?a??????c??yg??????e??y??#.?p6??? ?+ ??n??????/???C3?J???B?+ ????S?????????????????7???M?????X?????????V]???[?=??????b?9W]??s?` t???`?'?5????n{????JP{?n?]Z??'???2?????Z?(?Y??0??S?s&??????H?}b?w? ????re?7???????]=?(j/?ij????h?d?2??U"????????^?N??/>??GR|?Wn??b??????&~????+8bY?m[X,??\9????????'??????W???b????P??c??;8K?? + r???q????^???>????\?????`??? + r?????iii???;79?9jT???]??t??????S^}5n?????,De?'?R{???5??????yv??5??????? ??????^??? + K??O???????7? + ;]w]?q?????.?3????c??????g?z?y????%>????|y??7??!????s? ??O$?G????????S?b????l?A??u??3?{M}6f??????C?`??{?5??Kp????^?^+ .;x? ????g|?i??D???R{??'v?X?o?5??g8?????;?Jz *????+ ??*X?P??N?z????~???????~????? j?v?z%} ?????tp??O??????Y???????h???Ik?Y~?t ?^=?k???<0??Wsl??????W ?"???Ek???G??_??>?hf?z?U?X?]Z? ???k? u?4??.??????? K?Z?R??6m2[???????'??b???? + r??e?+????(q??????C ?????&??S??OD???Q{?=+ ???????????f\?U?r?????x#????'Oo???`???t???^A?|?q?-?JZZZ????M??M?;?????4??,Q{???^""j/+ ?\??O?^U?>:p?????Y?O?v.??v??)9_{??A8??=??w??l????z???????79?????O??K?w????W??? ?s?UU?:*?U?W????_wg? ?C???X??R{??DD?^+  >???o?1#??s>?8??b???I8m?=q??f??G???T^e??????T?p?f??,????k???{??I7??m?z???V?????.8??'????[#?z*???/??3f?1???Y.??T?_?E???>?X??K??`?????8???+y???N>????(???????1?>???]?*??;?$9??????V???n??-Z??<9?@?1?l?/?p??? + ??Y?"?M??u??#????/????5p??V^???=???mH?T??????>}???&~?I???M???y?M75l??r???V??~3?d; 0???vs? ??'?D???R{????+ L}?u?ED???R{????+ &""??R{??DD?^+ b??~z????^j/Q{?u?R?^+ ????????=S{=???.?0??3??@???f?+?h?0Z?e?J????|3?j??_z?????/?+WvB^D?^??(E?+ U???t<8?????^??v????K?Z?iS? ^}?}?R?_ye?^^x?t?????u????3??S?bE?^s>?8?'$V?bE'?ED?? ?R?^+ ?3f??????S?j??E??????=~k???=G??x??????yr?)???z?lE_???.?????U???j?x??o\?w?s?]x??N????+???+ ??*????n? /????????3?????c_,y????n??W????????????????EO>??=W{]y?????????KD?^??Q?? + ??&?'?Y_?#?L?????????T?X{E/j??~???5???Y?????M??;?A?C?W????K?/?g?????z????f?[? -??W?;?.]?q??"?????R?^+ ?ox??c[??????+??{?^??l????_~???? 'Dg+S?B???=??? ?{???}??O>?e????X??o?}z?n?K????????.??? yQ{????+ ?X?l?????~?L???^???N?U6?^~x8??_??> + stream + x???y?e????L?A? !@8B !"H8?+ ?z5???u?n?????H?k????E/^q??-??J???K?+ ??)~6|??????gD???????x???eG& rt????h+ ???m????g.l?U???????????Gj+ ???YT??l?+ ?3??2t????O???A??j<~??~^(???&???A? ~???5X? ?????????W????????????%~j?~6??????{bE?????%O????P????G???5P????s?]z+? /?? ?????G????'???~???? N??c??A? ~???U??M????????A? ~?????*S?#?9??o?t??]n?{??zg???3?0r at F????G???????3l??.???????_????????YU?xB?#~???T??g?L?{???r??4??#~???C??O?????}MSj?1??????M?dvze???q?Ag~q????????}???b???????????.???>']~???NVpE???%??y?????3=0?????A???(~?V?S???Oo????.?:??qC9????G?PO?????Q????#~???C]?O??3hl?7?_S??U??+~???#~????????i?z?S????%?F?????5???/n????k ?#~???C??Oq?l???.???E+r??P????G???????????????^V??G?????G?????4???^]?4??k?u???G???!$?;p??#~@? ~??G???A? ~?????????????#~?????????????#~?????????????#~?????????????#~???????G??????#~????G???????????#~??'$?????#~?a:??+???A???OP???#~??G? ~???#~???#~??G? ~???#~???#~??G? ~???#~???#~??G?????#~????#~??G????????i??<y???G? ~+ x?0???@ ??Ok?6 ~?F??????j??G?+ ?G? ~????????G? ~???????1||??????{??5??!~???????????f?+???????G???#~? ~???A? ~@???#~0????G??L??{?G??L??{?G??L??{??A??L??{????G?`???+?????????^!~???????? + ?#~????4/~?W??#~????G????wqSN? ?4/~@??Qs?h2X????????4/~@?????G??L??{????G?`???+?????????^!~???????X??#~??'????~??]?G? ~???A???>??O?????Q???#~???O7??????}??G???O????~R?%?G? ~???A???>]?'M?S?}??G???O??S\?)???G? ~???A???>E??????}??G???O??SX????^?G? ~???A???>??????}??G???O???_?)???h??????n???O:?g??G? ~???A???>?????Y??Q???#~???O?~??k?>??#~??'??????O??~??G? ~?m??????)?}??G???O???V?u?e???A????? ?}??S??Sv????????g?????_?? ???:??O??q????P???G????????3?:~??{???#~???!?^???>I? ~??????r?Z??3?? ????G?????/?s?dF??%D???#~????F=;??>???m^?'????v???#???&?????f?t?O:?gm?G? ~???A??????i????????A????? ?~n??i>/~??~??G???OZ????o???O???}??G? ~B????IO??V???#~??'??)h??Of??{?????#~??'??)l?4?Ofd??yz???#~??'?vxq??'U?S?~??G???O?????R4?w??R??}??G? ~B??.??????~??G???O??B????i?????~??G???O???M??.~2#?k??A????? ?~?k???Oq?h???????????G??m??>! ~2?????mm??#~?a?O?????????????j??h?T?Og?h??????P??T??3~:?G? ~???A??X????>)????O????}??G? ~???????I?G? ~???A??Z??l??i????l;O? ~???A?P?????????#~???4/~@???#~0?????#~0?????#~0?????#~0????G????i^?`???G??L??{????G?`???+?????????^!~??????W??#~??????????#~????G??L???????????^????????^????????^!~???????? + ?#~????4/~?W??#~??y???B???#~0????G????i^?`???G?????#~l????G??????????tg?? ~???????? + ???????? + ???????? + ???????? + ?#~????4/~?W??#~??y???B???#~0????G????i^?`???G????+???????G?????????????#~?OxN3??????u??????,??i^???Yg??O??g??.Zl???=???q??????????6L????r5;L??#~?5?l/?G???#~)~>??C???#~?????.?%~@???#~???G???????????????A????????#~???A???????G? ~??G??????D???? 0?!~?4???6???l$~j0~+ endstream + endobj + 884 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [202.264 448.444 227.539 460.001] + /A << /S /GoTo /D (cite.APERIOT) >> + >> endobj + 885 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [230.84 448.444 254.989 460.001] + /A << /S /GoTo /D (cite.APERIOT) >> + >> endobj + 886 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [336.754 376.728 352.595 388.27] + /A << /S /GoTo /D (lstlisting.4.1) >> + >> endobj + 900 0 obj << + /D [898 0 R /XYZ 89 757 null] + >> endobj + 896 0 obj << + /D [898 0 R /XYZ 90 733.816 null] + >> endobj + 122 0 obj << + /D [898 0 R /XYZ 90 503.224 null] + >> endobj + 901 0 obj << + /D [898 0 R /XYZ 90 372.313 null] + >> endobj + 902 0 obj << + /D [898 0 R /XYZ 90 353.144 null] + >> endobj + 903 0 obj << + /D [898 0 R /XYZ 90 338.897 null] + >> endobj + 904 0 obj << + /D [898 0 R /XYZ 90 324.65 null] + >> endobj + 905 0 obj << + /D [898 0 R /XYZ 90 310.404 null] + >> endobj + 906 0 obj << + /D [898 0 R /XYZ 90 296.157 null] + >> endobj + 907 0 obj << + /D [898 0 R /XYZ 90 281.911 null] + >> endobj + 908 0 obj << + /D [898 0 R /XYZ 90 267.664 null] + >> endobj + 909 0 obj << + /D [898 0 R /XYZ 90 253.417 null] + >> endobj + 910 0 obj << + /D [898 0 R /XYZ 90 239.171 null] + >> endobj + 911 0 obj << + /D [898 0 R /XYZ 90 224.924 null] + >> endobj + 912 0 obj << + /D [898 0 R /XYZ 90 210.678 null] + >> endobj + 913 0 obj << + /D [898 0 R /XYZ 90 196.431 null] + >> endobj + 914 0 obj << + /D [898 0 R /XYZ 90 182.184 null] + >> endobj + 915 0 obj << + /D [898 0 R /XYZ 90 167.938 null] + >> endobj + 916 0 obj << + /D [898 0 R /XYZ 90 153.691 null] + >> endobj + 917 0 obj << + /D [898 0 R /XYZ 90 139.445 null] + >> endobj + 918 0 obj << + /D [898 0 R /XYZ 90 125.198 null] + >> endobj + 919 0 obj << + /D [898 0 R /XYZ 90 110.951 null] + >> endobj + 920 0 obj << + /D [898 0 R /XYZ 90 96.705 null] + >> endobj + 897 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F20 335 0 R >> + /XObject << /Im7 882 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 924 0 obj << + /Length 2019 + /Filter /FlateDecode + >> + stream + x??[Ks?6??W???n+????d????f?CSO/i&?H???$??7???@C????e???>,HV??xu????????rZ????p?0`*-yq4-??/?W?zz8??/?u=[???`+ ]1#?#??_????2 ? + ?P]??????c????S?5?u??????T?K;S)%????&Lx?o??? /4J ???%?Y?YYI???H[T?q#??E???h_\????.'4vJ????UL ?/?Ae???r???+ ?????O???&NW??)??O)??Q??Q?n??"? ??:??? S??!??~*?/??n-?1q?|r82????>???[#7* ?_??3??+??????o"_?&??N^?T???? + ?Z??????GZG? ??h??+; ?????V\??????+ ?#???Fv?? ?!.??'V  -3??hYX1??7??b6?kH"??` ?W]'????????ldF???j????????0m?(????`??2?I?d??As?14?T?`?J? ?" t?Z ?k?Z\%??K"? + ?*?K??c51???I?I??{UR<-?$r?C?w??h????22j?d?W3Gs??fvO?Z ??L???"?v"E*??b????'??:?v????'???V.???PR]mbg?????(]????c?Xt*?+h??qF??&0????k?(?<`?:??????<D?+ ?1????I????I'?? @?K8??v|????j??G??KV??????P?*?v5M?7???????(~?[?g??G??1/.??????%T`??;??????0?????????> endobj + 925 0 obj << + /D [923 0 R /XYZ 89 757 null] + >> endobj + 926 0 obj << + /D [923 0 R /XYZ 90 730.319 null] + >> endobj + 927 0 obj << + /D [923 0 R /XYZ 90 716.072 null] + >> endobj + 928 0 obj << + /D [923 0 R /XYZ 90 701.826 null] + >> endobj + 929 0 obj << + /D [923 0 R /XYZ 90 687.579 null] + >> endobj + 930 0 obj << + /D [923 0 R /XYZ 90 673.332 null] + >> endobj + 931 0 obj << + /D [923 0 R /XYZ 90 659.086 null] + >> endobj + 932 0 obj << + /D [923 0 R /XYZ 90 644.839 null] + >> endobj + 933 0 obj << + /D [923 0 R /XYZ 90 630.593 null] + >> endobj + 934 0 obj << + /D [923 0 R /XYZ 90 616.346 null] + >> endobj + 935 0 obj << + /D [923 0 R /XYZ 90 602.1 null] + >> endobj + 936 0 obj << + /D [923 0 R /XYZ 90 587.853 null] + >> endobj + 937 0 obj << + /D [923 0 R /XYZ 90 573.606 null] + >> endobj + 938 0 obj << + /D [923 0 R /XYZ 90 559.36 null] + >> endobj + 939 0 obj << + /D [923 0 R /XYZ 90 545.113 null] + >> endobj + 940 0 obj << + /D [923 0 R /XYZ 90 530.867 null] + >> endobj + 941 0 obj << + /D [923 0 R /XYZ 90 516.62 null] + >> endobj + 942 0 obj << + /D [923 0 R /XYZ 90 502.373 null] + >> endobj + 943 0 obj << + /D [923 0 R /XYZ 90 488.127 null] + >> endobj + 944 0 obj << + /D [923 0 R /XYZ 90 473.88 null] + >> endobj + 945 0 obj << + /D [923 0 R /XYZ 90 459.634 null] + >> endobj + 946 0 obj << + /D [923 0 R /XYZ 90 445.387 null] + >> endobj + 947 0 obj << + /D [923 0 R /XYZ 90 431.14 null] + >> endobj + 948 0 obj << + /D [923 0 R /XYZ 90 416.894 null] + >> endobj + 949 0 obj << + /D [923 0 R /XYZ 90 402.647 null] + >> endobj + 950 0 obj << + /D [923 0 R /XYZ 90 388.401 null] + >> endobj + 951 0 obj << + /D [923 0 R /XYZ 90 374.154 null] + >> endobj + 952 0 obj << + /D [923 0 R /XYZ 90 359.907 null] + >> endobj + 953 0 obj << + /D [923 0 R /XYZ 90 345.661 null] + >> endobj + 954 0 obj << + /D [923 0 R /XYZ 90 331.414 null] + >> endobj + 955 0 obj << + /D [923 0 R /XYZ 90 317.168 null] + >> endobj + 956 0 obj << + /D [923 0 R /XYZ 90 302.921 null] + >> endobj + 957 0 obj << + /D [923 0 R /XYZ 90 288.674 null] + >> endobj + 958 0 obj << + /D [923 0 R /XYZ 90 274.428 null] + >> endobj + 959 0 obj << + /D [923 0 R /XYZ 90 260.181 null] + >> endobj + 960 0 obj << + /D [923 0 R /XYZ 90 245.935 null] + >> endobj + 961 0 obj << + /D [923 0 R /XYZ 90 231.688 null] + >> endobj + 962 0 obj << + /D [923 0 R /XYZ 90 217.441 null] + >> endobj + 963 0 obj << + /D [923 0 R /XYZ 90 203.195 null] + >> endobj + 964 0 obj << + /D [923 0 R /XYZ 90 188.948 null] + >> endobj + 965 0 obj << + /D [923 0 R /XYZ 90 174.702 null] + >> endobj + 966 0 obj << + /D [923 0 R /XYZ 90 160.455 null] + >> endobj + 967 0 obj << + /D [923 0 R /XYZ 90 146.209 null] + >> endobj + 968 0 obj << + /D [923 0 R /XYZ 90 131.962 null] + >> endobj + 969 0 obj << + /D [923 0 R /XYZ 90 117.715 null] + >> endobj + 970 0 obj << + /D [923 0 R /XYZ 90 103.469 null] + >> endobj + 922 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 973 0 obj << + /Length 2475 + /Filter /FlateDecode + >> + stream + x??\m???~?b???m?:$??@|=6?nj?E?40TI>r??H?????pH?Q?J??+???????v???3CJ??.X??????O/\?@@1~W8Ve*??????????rv>??O&??|?? ??*?4???o??????\??=????a???fq???s.X??????_?]??~?Yw??o?7g=c?MXewPl.??]?^???lue9??????<?V?P??/?????????~t??~)?+ \??jN6?#?1?#?1?C?ul/?/C*???1? ;VP ?$wx]?g9_? + *????5?}??????4??o($R?82??+ ?K?=??;K?.2xK~?{????Y???????K??*?????R7-?d?????????????????E??6^Z??|?ICZEP???X?)g??m=f7????]G??&?Dv+ ??UV???j?F(d?P?5B!k????V?7???%?+Im?*<???dHKn7??o??? ?Hn=????UB? ????;???A?N?0?????%k??~G???W??? ?i????0??~n????W??????m ?V???[????%??s???G?jR?R?u???????"x?#X@????Q?=/D8g??\??o=9.??i??|??r6????????_???g?" + endstream + endobj + 972 0 obj << + /Type /Page + /Contents 973 0 R + /Resources 971 0 R + /MediaBox [0 0 612 792] + /Parent 869 0 R + >> endobj + 974 0 obj << + /D [972 0 R /XYZ 89 757 null] + >> endobj + 975 0 obj << + /D [972 0 R /XYZ 90 730.319 null] + >> endobj + 976 0 obj << + /D [972 0 R /XYZ 90 716.072 null] + >> endobj + 977 0 obj << + /D [972 0 R /XYZ 90 701.826 null] + >> endobj + 978 0 obj << + /D [972 0 R /XYZ 90 687.579 null] + >> endobj + 979 0 obj << + /D [972 0 R /XYZ 90 673.332 null] + >> endobj + 980 0 obj << + /D [972 0 R /XYZ 90 659.086 null] + >> endobj + 981 0 obj << + /D [972 0 R /XYZ 90 644.839 null] + >> endobj + 982 0 obj << + /D [972 0 R /XYZ 90 630.593 null] + >> endobj + 983 0 obj << + /D [972 0 R /XYZ 90 616.346 null] + >> endobj + 984 0 obj << + /D [972 0 R /XYZ 90 602.1 null] + >> endobj + 985 0 obj << + /D [972 0 R /XYZ 90 587.853 null] + >> endobj + 986 0 obj << + /D [972 0 R /XYZ 90 573.606 null] + >> endobj + 987 0 obj << + /D [972 0 R /XYZ 90 559.36 null] + >> endobj + 988 0 obj << + /D [972 0 R /XYZ 90 545.113 null] + >> endobj + 989 0 obj << + /D [972 0 R /XYZ 90 530.867 null] + >> endobj + 990 0 obj << + /D [972 0 R /XYZ 90 516.62 null] + >> endobj + 991 0 obj << + /D [972 0 R /XYZ 90 502.373 null] + >> endobj + 992 0 obj << + /D [972 0 R /XYZ 90 488.127 null] + >> endobj + 993 0 obj << + /D [972 0 R /XYZ 90 473.88 null] + >> endobj + 994 0 obj << + /D [972 0 R /XYZ 90 459.634 null] + >> endobj + 995 0 obj << + /D [972 0 R /XYZ 90 445.387 null] + >> endobj + 996 0 obj << + /D [972 0 R /XYZ 90 431.14 null] + >> endobj + 997 0 obj << + /D [972 0 R /XYZ 90 416.894 null] + >> endobj + 998 0 obj << + /D [972 0 R /XYZ 90 402.647 null] + >> endobj + 999 0 obj << + /D [972 0 R /XYZ 90 388.401 null] + >> endobj + 1000 0 obj << + /D [972 0 R /XYZ 90 374.154 null] + >> endobj + 1001 0 obj << + /D [972 0 R /XYZ 90 359.907 null] + >> endobj + 1002 0 obj << + /D [972 0 R /XYZ 90 345.661 null] + >> endobj + 1003 0 obj << + /D [972 0 R /XYZ 90 331.414 null] + >> endobj + 1004 0 obj << + /D [972 0 R /XYZ 90 317.168 null] + >> endobj + 1005 0 obj << + /D [972 0 R /XYZ 90 302.921 null] + >> endobj + 1006 0 obj << + /D [972 0 R /XYZ 90 288.674 null] + >> endobj + 1007 0 obj << + /D [972 0 R /XYZ 90 274.428 null] + >> endobj + 1008 0 obj << + /D [972 0 R /XYZ 90 260.181 null] + >> endobj + 1009 0 obj << + /D [972 0 R /XYZ 90 245.935 null] + >> endobj + 1010 0 obj << + /D [972 0 R /XYZ 90 231.688 null] + >> endobj + 1011 0 obj << + /D [972 0 R /XYZ 90 217.441 null] + >> endobj + 1012 0 obj << + /D [972 0 R /XYZ 90 203.195 null] + >> endobj + 1013 0 obj << + /D [972 0 R /XYZ 90 188.948 null] + >> endobj + 1014 0 obj << + /D [972 0 R /XYZ 90 174.702 null] + >> endobj + 1015 0 obj << + /D [972 0 R /XYZ 90 160.455 null] + >> endobj + 1016 0 obj << + /D [972 0 R /XYZ 90 146.209 null] + >> endobj + 1017 0 obj << + /D [972 0 R /XYZ 90 131.962 null] + >> endobj + 1018 0 obj << + /D [972 0 R /XYZ 90 117.715 null] + >> endobj + 1019 0 obj << + /D [972 0 R /XYZ 90 103.469 null] + >> endobj + 971 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1029 0 obj << + /Length 2815 + /Filter /FlateDecode + >> + stream + x??[?o???=?? ???z?Nj??]??K??46??b+??????x?;I?r??n???~9?NE??>GI$'$y???x???&y?+????$'?:S?&???C?|tU4???&}Z4M??p??):??????c?F~?<\5??? ?v+ ???eKw?i? Tb'? =Gj???|? + ?u7+ \G:q^???/?o?>C?9@??K??(??{???6?+ ???????????y?5??#??MF?]?P&p???;w.????,z??=Q+!D???6+jg????,??,???:??A>??????+??{?oA@x???n]a `?.R?5?????U???:?7?U??fGo?v??h?????????CZ+ 2?>???e?????U~_?P$5k%I????W??ls?? + ??c???kw?+ F|?smq? ?"ltwuQ?6???hm??????????????c?nc?Z??^??/???ozY?#??H??[??"?;???K?C?RG?n?????0J?????6d8+ ??I}5wl?????????????.S??%??GS+ f"{Ab}@a?3?4er????#???????%?? A/j?????~????!2b2????h;?B.q ?L???cV y@??cp?p? ?????l?g6?????k?H?7?????v?n?I?\?qG??X?I?2??K?N??^H?=X?Co?7???4?????o`?WrY????+1???4h??????n?q???VE\}??????zzY??sGd? + ??u #g?+ endstream + endobj + 1028 0 obj << + /Type /Page + /Contents 1029 0 R + /Resources 1027 0 R + /MediaBox [0 0 612 792] + /Parent 869 0 R + /Annots [ 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R ] + >> endobj + 1020 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [467.929 236.959 511.227 248.5] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 1021 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 225.003 113.153 236.545] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 1022 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [251.145 213.048 272.037 224.59] + /A << /S /GoTo /D (subfigure.4.3.1) >> + >> endobj + 1023 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [270.415 91.24 291.306 102.782] + /A << /S /GoTo /D (subfigure.4.4.1) >> + >> endobj + 1024 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [351.3 79.285 376.575 90.827] + /A << /S /GoTo /D (cite.PARS_REV) >> + >> endobj + 1025 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [380.303 79.285 404.453 90.827] + /A << /S /GoTo /D (cite.PARS_REV) >> + >> endobj + 1030 0 obj << + /D [1028 0 R /XYZ 89 757 null] + >> endobj + 1031 0 obj << + /D [1028 0 R /XYZ 90 716.072 null] + >> endobj + 1032 0 obj << + /D [1028 0 R /XYZ 90 701.826 null] + >> endobj + 1033 0 obj << + /D [1028 0 R /XYZ 90 687.579 null] + >> endobj + 1034 0 obj << + /D [1028 0 R /XYZ 90 673.332 null] + >> endobj + 1035 0 obj << + /D [1028 0 R /XYZ 90 659.086 null] + >> endobj + 1036 0 obj << + /D [1028 0 R /XYZ 90 644.839 null] + >> endobj + 1037 0 obj << + /D [1028 0 R /XYZ 90 630.593 null] + >> endobj + 1038 0 obj << + /D [1028 0 R /XYZ 90 616.346 null] + >> endobj + 1039 0 obj << + /D [1028 0 R /XYZ 90 602.1 null] + >> endobj + 1040 0 obj << + /D [1028 0 R /XYZ 90 587.853 null] + >> endobj + 1041 0 obj << + /D [1028 0 R /XYZ 90 573.606 null] + >> endobj + 1042 0 obj << + /D [1028 0 R /XYZ 90 559.36 null] + >> endobj + 1043 0 obj << + /D [1028 0 R /XYZ 90 545.113 null] + >> endobj + 1044 0 obj << + /D [1028 0 R /XYZ 90 530.867 null] + >> endobj + 1045 0 obj << + /D [1028 0 R /XYZ 90 516.62 null] + >> endobj + 1046 0 obj << + /D [1028 0 R /XYZ 90 502.373 null] + >> endobj + 1047 0 obj << + /D [1028 0 R /XYZ 90 488.127 null] + >> endobj + 1048 0 obj << + /D [1028 0 R /XYZ 90 473.88 null] + >> endobj + 1049 0 obj << + /D [1028 0 R /XYZ 90 459.634 null] + >> endobj + 1050 0 obj << + /D [1028 0 R /XYZ 90 445.387 null] + >> endobj + 1051 0 obj << + /D [1028 0 R /XYZ 90 431.14 null] + >> endobj + 1052 0 obj << + /D [1028 0 R /XYZ 90 416.894 null] + >> endobj + 1053 0 obj << + /D [1028 0 R /XYZ 90 402.647 null] + >> endobj + 1054 0 obj << + /D [1028 0 R /XYZ 90 388.401 null] + >> endobj + 1055 0 obj << + /D [1028 0 R /XYZ 90 374.154 null] + >> endobj + 1056 0 obj << + /D [1028 0 R /XYZ 90 359.907 null] + >> endobj + 1057 0 obj << + /D [1028 0 R /XYZ 90 345.661 null] + >> endobj + 1058 0 obj << + /D [1028 0 R /XYZ 90 331.414 null] + >> endobj + 126 0 obj << + /D [1028 0 R /XYZ 90 287.718 null] + >> endobj + 1059 0 obj << + /D [1028 0 R /XYZ 90 208.807 null] + >> endobj + 1060 0 obj << + /D [1028 0 R /XYZ 90 201.036 null] + >> endobj + 1061 0 obj << + /D [1028 0 R /XYZ 346.635 188.583 null] + >> endobj + 1027 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F19 498 0 R /F14 463 0 R /F60 571 0 R /F58 500 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1071 0 obj << + /Length 2521 + /Filter /FlateDecode + >> + stream + x??ZKs????W0???<0?$?*??d+????????p??,??H??i? ???H?{??]7?n????%v>K?E??$?Ef???$,Zf????????Z????nK:?A?@?a ?$??? %??:7WV?d????????@????ri|?m????=4W??l????u?y]????od???:??-WmV??YX!KM?f???sB????a?????????w\2??????/??C$?@X???Dt:??@?:?D]????+ ?/??+ 3?2r; ??{?N%_?b ??u??Db???Y? ?vW????A?{FGj\?0cP???T????G0w ??s?7????8?K?P>n??< ?f?z)??%?8?? ?E+ ?;?8??$?O?H???p?9??]?W????CI?6???????D8 ~??p?8??????rO??D??{??0??????8n1bJ>??_?UD????^vC?+ R^r6A?r??Bw?> F.M??x?]??Wsi+ endstream + endobj + 1070 0 obj << + /Type /Page + /Contents 1071 0 R + /Resources 1069 0 R + /MediaBox [0 0 612 792] + /Parent 1085 0 R + /Group 839 0 R + /Annots [ 1026 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R ] + >> endobj + 1026 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [415.309 712.909 421.677 725.474] + /A << /S /GoTo /D (Hfootnote.14) >> + >> endobj + 1064 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [363.553 506.198 384.445 517.739] + /A << /S /GoTo /D (subfigure.4.5.1) >> + >> endobj + 1065 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [370.961 291.715 391.853 303.257] + /A << /S /GoTo /D (subfigure.4.6.1) >> + >> endobj + 1066 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [280.794 267.805 324.53 279.346] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 1067 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [328.077 267.805 352.226 279.346] + /A << /S /GoTo /D (cite.DRAGON) >> + >> endobj + 1072 0 obj << + /D [1070 0 R /XYZ 89 757 null] + >> endobj + 1073 0 obj << + /D [1070 0 R /XYZ 90 668.009 null] + >> endobj + 1062 0 obj << + /D [1070 0 R /XYZ 90 660.238 null] + >> endobj + 1074 0 obj << + /D [1070 0 R /XYZ 360.808 640.014 null] + >> endobj + 1075 0 obj << + /D [1070 0 R /XYZ 90 473.253 null] + >> endobj + 1076 0 obj << + /D [1070 0 R /XYZ 90 465.482 null] + >> endobj + 1077 0 obj << + /D [1070 0 R /XYZ 262.675 445.258 null] + >> endobj + 1078 0 obj << + /D [1070 0 R /XYZ 425.364 445.258 null] + >> endobj + 1079 0 obj << + /D [1070 0 R /XYZ 90 258.77 null] + >> endobj + 1080 0 obj << + /D [1070 0 R /XYZ 90 250.999 null] + >> endobj + 1081 0 obj << + /D [1070 0 R /XYZ 268.125 223.004 null] + >> endobj + 1082 0 obj << + /D [1070 0 R /XYZ 419.914 223.004 null] + >> endobj + 1083 0 obj << + /D [1070 0 R /XYZ 104.346 107.066 null] + >> endobj + 1069 0 obj << + /Font << /F21 332 0 R /F31 350 0 R /F19 498 0 R /F14 463 0 R /F60 571 0 R /F58 500 0 R /F49 1084 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1091 0 obj << + /Length 2573 + /Filter /FlateDecode + >> + stream + x??YYs?~????QU"vp????????G:7t5??Z?u2D?~f?v4?; "???)4???a$??=?6?A?4?@???? wAi??$(SQ???(8?????=.????cJ?0???Q???`??s?G?v?Y??K????E.Mg?I*??w?#=Y???%??c?????c??\???Z8???U?Q??:???u;Ow???YG????\j=??K?????\}???i??????~ze?V?F?a*w~?@&???;??bq???2???J~??D?x????p1_h????1?? p?^BmFZ??/ 0g??4XQ??_??GjY??W?n?+"????] J,m?????|C??`S???>+ |`3*?????]?8?WN;?0?~????`??+ ????n?#????|?Cr??M ?R??$?WM2??[????$?rM???R???h???Crv)??9??? ?????Jr????8????Ym???$?(???=?6???FhS$?t???4eI??.????C?P??"?h9???I?R????i??bX??p?<(??W?+????(Jg??$=9"?Kp?i?????s2wcv??vS??J???X?\????ZHq??`??>???.?Qi??N?K??v)0???C}??|??#n|? + y?N?V??R???YV5???+??V*??J???'?(8???YY??L??m?Bvj*???>????1????b??FWA?)5?x?????e?q4?~???{???#??X + ?T;v?agP??Y?0??e(?P????UQ??[P?i?J=?7??C?????,2*?!????v????S O???c,?C? I???>???.M?j?-??a6????e?/,?'z?-?Z?a? ?k_??s?????[eQ] .?5???n?i??^????^G??`?#r??v?N?@??x>??m|?????:>t?u?7???z??;????? + W?????y???p???? ??s?C@?3P?P?\??X??V???T?F?r ??s%J$3????WB????????#"w?[!HbCpOq\?????k + endstream + endobj + 1090 0 obj << + /Type /Page + /Contents 1091 0 R + /Resources 1089 0 R + /MediaBox [0 0 612 792] + /Parent 1085 0 R + /Group 839 0 R + /Annots [ 1086 0 R 1088 0 R ] + >> endobj + 1068 0 obj << + /Type /XObject + /Subtype /Image + /Width 211 + /Height 200 + /BitsPerComponent 8 + /ColorSpace /DeviceRGB + /SMask 1100 0 R + /Length 20662 + /Filter /FlateDecode + >> + stream + x???x[U??m?????????HO?T??{g???0pa??????????w???4R?@??l????`J + ?t??[k?}?#[?%YN!???|??eY???*{????w????????r{????Ft?j?i?!?????c?x? ??o???us+ ??????P?ea????X??K??p??? dw???:? \-.TJ + ??"??(9?w?"??H ~C??=??????7{????u??? '&?c?$???8u??????H99ZN??S???R???` ?)?r?( p??G??6?7?l1?n3???*?j,?d,???,g????w?$Xe?M???????+ ?V??X??Xy??b??r???c?N??|Pk@???8?2?b,3=??}u,????N?{7!uhwG???N?? ?)?FR?d:?v?0?B?-?a???X??X}???^c?=x ?? d???"X?*c4???????????G??p+ ? ~?a??9????>???17???D???=-??i}? ????g????-2?B;2=????_ + v??????0????;?J ??cM?U????#=?O!]@??JO???W8{y1?>??3=V??L????Sf???N4??u???=6????Uv7 ? + ???+???v+ ??????????~?G?8T? ?????J)??Wzz???t?q???FLHp]??*f??pB?????.??]6?????m??=TS???&?E????9??????z???>?0????.?????????qj."?&??yK??4?Ry'??>?e???W?q?dwV?kg??+3?lC??/??x?Ex??|e??Q??F? ?jz_ `?w?*???Xv????Dnw?# + ??B3?????E??.?)?????Mr?t???@j??ez7d1?vw&??U?1c??SX @?+ xo?? + ??b?B?xJ}????,:I?V.????{^???m???`}?????86?9M????NJ ???????)???????+f?2n8? ????????B???o??w?c?g???l}V?-uo(s?????l8'?y??]P?J?^%???????u??q?X?}g M;????v?????G(?;??]j2n?H???4?r/2??-?????@??>Z???s?g???,3=O??}N?W?^x??k?????????C???Y?x$?I?49w.?T???8???{z?????1 ?l 2?? + {??9+ x??5?hK???P??~?`???c????Nmw??5>??@??!x?????W??h ?[D%F?<9{>O??%??A?w????t???Z???po/??]c???p???oN??Q??????h?QdPY?e?bc???R?wV??"? m1?c????d} + ? ?V?"o+?5?.?3?8?xO????S?h?????9~??x?????P/Xx]3+f??Y?}?^ ??h????i??b?]?%F?\?2'????WI???J?bzg?#?>;?vNv?w ??:?I?ESv?'%1??.J?9PV,?8[??X??X??Xu???K???dzMO???|??g"P%?r?[P?????????`9%\N???G???????1,Fc)???&xw`I??>A?????^?3*?{?????S?x?,??3??z???w?w+wb?.?K??Er.??????b??)L*t_???i3{l?????L????a????I??RJ(?)9-^?`e? l?,Cc? ?w'?R?SU? E?G(?c?=?5~?g??gU?=?3??g??H?5??G? ?W??Xco???vt????????%r?Y???? `?R + ?^ez? ?3?w?8?9????L???hw~x??4??AY?NeE???y q?;H??6????j?????6??)?52????aG????Sw??????w???q?W?~????????)^???G3??b?{?X??~E?}Fl?(??@????K!??5.?|+ W??k??MXEbI??;?X????z? ?y??o??{??|[4+?1?.N]?hwuJ??e??e?f?a}!?m?K6?Ek?y?/?RH??&eN?2??x???????Q?=K??L?[?????????nw?|????I ? !???)??=?c?????r?-????1?V?a?? + ????-K???xk*O?$#U?K?????B?7?Gi$?P?P???h;Q???h????01%XL???????s?"c???p????7??????0?C?C????????8??????r?l?`!zH? ???J????U?????q?R???mh?%s?ed?XvwO?j??og?m7V??i^?F?d-fm??I?3??IR?X)c???"??19???y/d??F ??FQ??? ????c??m/~?w?x?~?Nv??u"Je?????<?hIi???tEZ???q??(1+R???b?lF`???h?p?!h"*?????3??????~??GE??J?aZ?ob????L/?????m?????Lc???+ ??P??/i?^???????????or??????bq??K???g6p???????? ZP?C??F?????j?S??/4V?? f}???!????ql????1???v7L??kt???D??????f?t>~6?]{?S???????*??!?s"u?!?g?^???V????y???????? ???????????+ wK??g?G?@?"{\K??t?? ????fl?Yvw?PWd]???}????????G???)?hz??YJ??????Np???d??N?@%z?????n??z ????7({vN2?o?-V??}????????vw????^s??????9? ? {? + ??e??Of???U5= ?`?i??nX?+?:?{O7Go+???g8????!?+ ?d?S? ???e1{?????uY????{??!???;?? V?_??g??d??Lo@???? 660i?fX?S??|m??N???S?A?:;?c??aH???#/?CYc??V??+????????,G_??[?.?????v?J,??????n??z???????;t??s)???@?_?????p3=???7`???? ???el?lw?Y????qv+ m????????L/0????W???*??oz6?F[??@???? ?KdwN????]N????????@Q???????X??A?c?:?{?L[?????o{??P?g?1?sn??e? ?????:ml???Y???8??e???so?????????)*V?????w@??v? ,#??R?eL?&????4???A??~???????'?7??]?hk?????,?78al at ew???2??8K??#????q???????\?w? + ? ?XDGT`wq`w??bK?v1?*??+ ??1\_ ?P?*??????J?X?]?(?nVy)???? + x?\??!?????)??+ ??"+ ? ???CQ??(?P?`(a(i(%?$ + ?? ?c e? ?? e ?I? ?? ? ?S S ?SI? U*U?;SQ?S?US?Up????????????????????J?W??W???J?????????????????EtU?????B?????????? ?V?? ?????g??p ??S??????O2<-??2?{??C?????Xi?Kxl??c???*?Sxc????$?2} ???,Cv?!??-7?????E"i?+ G + Edn???m?P + ????+????J m?X?0[+???j7H??:???V?t?????Cj?)5???vKM{Hw?t??LbwZ??A{???b?.?y???]l?]l?Ml?&6mA 7 + ???FB?q??a?8lX??????3???H`?????????kkb?%????Q?=???T?????@??;?SQ??e??2?^2???????? + ??7???w?h8?Wn??@o?c?q?4????? ????P!;B??b??x!?K + ??E?[ ??,??|?X???V?J?^#?0?6Ku[????z?k???Yj?????IMwKM?HM?????r??? ??>E?????%8??G:H: ???Z??Z??Z?????Z??Z????Hc?v??6?y???Eh?????????????H6+ W?v??Le+ V?I??????????}??~???Wl??)??.?@ ???? + ??? ?P/??o?T?=??G+q?^9??s???????!?vuT??yH????z?/??????k?????1^?T?d?Xj??,+(jo??v@?%???m?????(?>$7?b?Q?????Y?5???????*G(o??9E?:??????RT}??????? ???/??!r???3???`?????^?.?u;??Xtl?????D?kX?o\?5/?^??n?????c??F?Btw??R?=V?? ??+ Jj????A^??3?o???@??Kl?Sl?B?u??x????)?F?9????N?%?????c?????)???U?"? ?+???</????B-?^?z?????P?Ee????,.????(?????_w?7???c???L?Z?g?x?p??0?=?4 9??w?{?6???u=??XEqx????MbW????????JF?F??e??B3T"WE???????????D?cT?aPt?P ??????????#qG?;?`J?:????????c*}???B}8J??Qz+??>b??-????????+ iqf???r??a?);dI???{??}HM`T/??E6?5??]????/C??/ :???T???????SO????9?rk??[???Wfc?V????????5L>?;V]bOFyb(?T-??????K????xzz?y??[?+ endstream + endobj + 1100 0 obj << + /Type /XObject + /Subtype /Image + /Width 211 + /Height 200 + /BitsPerComponent 8 + /ColorSpace /DeviceGray + /Length 2525 + /Filter /FlateDecode + >> + stream + x???{pT??s7??(??+ ?[W???????9?????W3:/]??=????>nr? ??S?;?0J^?HX????W???????N???? ?%?B?D?voUafj??1 ???*?W;&/???w=?? R???.v??N-QB,?;rP??2????,r#???se???J?C??B ???%?Iiy4F8?)?N?8&RfT!???}??z#?Cz4:#k??4i???(?-J%<(??C?I:?!???'?jG??????F??S??1???????N1?9????????]?)cL???X,F?|??^??/&a[H??z=&?zH??f?S??c?d i????T??x????????X??UK]?tk??B6?kA?b?CZ????+!W?'?I??l?U?H?d?CZ????/?%?I??u6.%?1 ?'&=????}?G?fE??gH???q???%?IiM?F8{??b?-??$?r? ?*???I???????I???A!e?????a??????I?P?=g???1??l?CZg?NM??G??? + X???~?.Bz?(#??M??nsL"????1 ???u?i?qF?t??n??,28$`????B??{#?p?I?dg?'B?n???[???????U?4??????v6?b????p?_;&o?M1???  ???????MBi??F8 b??}?I!??????Pz? #???_ j6??#?bJO?c?]"??????d^H?[?????1?;?5e?7[??H? + ??)???[??!/???MTj????z???m??l???f?le?erH??Y??|KKM?s??Wji?ovH@?t?K?C????????+?6?/?-Rz???Wma?_?@??IV???? ???LE%??? ?????Q?r?J?EF??e????R????????????[?S????b?7?Z?/KJ???T?/-(??,5?a J??[??{L/?G[l?}???[?V?B???1?a??|d?,???W?DL??Tn??4???f??kb???#?bb???=J?o?K?? + ??v?bz?.?ssL*?+a*??b???????U??M?????Tjm6??w?VV??????*?5?(c??j??_???6?%???7x??0?M?????r??J?u??_5?????_?A?????!J???? ,V^?Ci?q+?:9?Bk ?V??D ??Z + zd1??)-_?F k??`?k ??W%R?2#??2?D?;VvJ??_?;V?^}r?p ???I???????1?e3??@???x? + ?.????^??????7$Tj????}x?1$??x??7?Tj????+ ???(?W?=??X??$%??????W?}5??`???dE??Q?'??U???{C?;?????2F?0???u??????f???z$????JJ??????x!\?w???>TK???kn?? + ?x?_S??rm?jJ_N?T?w?5y?ce??G???????^?CA???.T I??WOy?[?[?$??|k?c??J?;^g at Q~????8???[?mM????w]}xuTV ??>??R?gg??&w???)??gC?;.??f?l??f? ?x?Q???5W?]m#?\]E?su??P\ K????:Gu?+??%V^??suw?ot??:??@ ?.^?&?Q?su?R?suw&??%???GD?????yH.??sM? ?????a]?\??R:??X)aIhw??DRz2??pv")?j?k?l???????q??T??0F?????? ??L(??JI??h???FM?p}u??=?>?????1/|z???B?6Oil?{?????R?y?~??N????????t?????=?1?? ??i?yl??E??^Omu?????~)?<$w??_F?'p???????i 3?#3C??????????mj?)?0???UW???????e??9C???8????p??}????rF_B???.R3?o?? + }t??0Z?.A?XPP??jDnV?-i?zuw???? !?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!W???:?? + endstream + endobj + 1087 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./img/tree-hooks.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1101 0 R + /BBox [36 36 386 440] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 1102 0 R + >>/Font << /R8 1103 0 R>> + >> + /Length 1156 + /Filter /FlateDecode + >> + stream + x???Ko7 ???+??^T?z?? ?A?,?^?????????/I??? h???69")???Y??1?????????~??<-??U~J?k?9??????q??????j?|\ ????????_dW^??!??f?q=m*?2??J ??19K?c?!??????uz\\?=?2V?????DAm7Y?T?k???k O\3?????:??B^Dd.??5??(BZ????77??,????2M??!?X???a ?T?amq + ??` ???R?? rF"????k?2<>???:x>\?K+$WB????????@?3m\!4??@G:yu???O?J???3?12K???h?f@?AiP?8W???K~?=+5?ZW\U?tnJh??cK>?P[?g/?????J?}?3????????^g?^?/?r??????o^??z???? ??S?@D??!?8n`g??aj???1??M??LH?HV? 7?%V?????????v?ag????? yw??2M??????X??6???\?K??vbw???????g`???Un?(?o!?g??L??^1 ?V??R???&?E2?Q? ??R9??J??s???=?!?G )I?)!???s?]?|????M???T???-???9?l7V=?:????C?`r?C:???????~{Y??;?m ?m?4,SSk???I-?\?? ???+ endstream + endobj + 1101 0 obj + << + /Producer (GPL Ghostscript 8.63) + /CreationDate (D:20090509183736+01'00') + /ModDate (D:20090509183736+01'00') + /Creator (Graphviz version 2.12 \(Sat Apr 25 01:56:11 UTC 2009\)) + /Author (\(edd\) ) + /Title (G) + >> + endobj + 1102 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 1103 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 1086 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [129.9 451.926 145.741 463.467] + /A << /S /GoTo /D (figure.caption.26) >> + >> endobj + 1088 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [322.815 91.24 346.965 102.782] + /A << /S /GoTo /D (subsection.4.6.4) >> + >> endobj + 1092 0 obj << + /D [1090 0 R /XYZ 89 757 null] + >> endobj + 1093 0 obj << + /D [1090 0 R /XYZ 90 707.509 null] + >> endobj + 130 0 obj << + /D [1090 0 R /XYZ 90 624.763 null] + >> endobj + 1094 0 obj << + /D [1090 0 R /XYZ 90 438.072 null] + >> endobj + 1095 0 obj << + /D [1090 0 R /XYZ 90 430.301 null] + >> endobj + 1096 0 obj << + /D [1090 0 R /XYZ 291.707 250.538 null] + >> endobj + 1097 0 obj << + /D [1090 0 R /XYZ 291.707 257.55 null] + >> endobj + 1098 0 obj << + /D [1090 0 R /XYZ 291.707 250.636 null] + >> endobj + 1099 0 obj << + /D [1090 0 R /XYZ 291.707 232.965 null] + >> endobj + 1089 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F19 498 0 R /F31 350 0 R /F14 463 0 R >> + /XObject << /Im8 1068 0 R /Im9 1087 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 1109 0 obj << + /Length 3937 + /Filter /FlateDecode + >> + stream + x??ZK?????WhW??!>?s\?M?G[?6?$ J??XS?BR????7P?.?8 ?`0?7???p??_=???k???HM?zx\?*?? ????Z??~[=?}?rc?|?U??n10a??N?y?????<??;????2:u????^F&\?????>|??????^D?&\E?? ?8]??/~?5\U?? + [??'^u\??????????PO?Od??Ei?FND|????Q??Q??X?? ???G70?????0 + ?????e??;:k??]?;????n??V???i^?????K?o??LM{???L?????k]%??????????kt?n?~C??6Y??Ym?((?D=??OR??3SJ?u9f<8f?c?G??1??v????:Y??m?N??];?$t?? y?C????q?zx?4?Bo????D??AF????(?Z_8?F??[?(?????Rl????tI) fR+ `? Um??}?= t??N?d??q<*?/!?@???t?m??????K??j????? + 0??q?????S9G???????n??K?l?h????>2Q????=?I?jx8d}?Gv? ??Z=??h?f{??S0?E?1(O?z? + + 5??3?]?9?E?????ev{Q?????$???93?@jtz?4? + H?D????7~ ?P?r????"??)????;Yt+?<(?In??(FE0?~+'??????-Yv???L? E????l???$?[b???????XO?r4(?? + l(/?C9????dm?t?t7J???hwrK? Lr?????>I+ ???O???v???wJlQu??k4?%?S?Y?$8??N{ ?^??x??c"PBAwMp?y??l???>N?)?R??i?4?%?&?:tO\?-?}r=Y5?,?l??@i???????9?e`&y??\?sH????P??f???????r ???4? Jk??3?C?k?,??H?N?Y'F[TRO????(}K?? ???N??|@???????????01k?`??S??iFL?]01 ,??b??????/&qo?? ??K?@???????,t+ ??9"??\? + ????e?;,%p ??2?????P?w?K??tf??)]?Q'?hi????\??>????aB??1???C????:1l@?`1\a?\??=$?^?~??@ ?(:w-?cq[T?r'Zi?k)K?Z????_P2?????C?????????\7???u???/??bgq???}??{[??Q`ss???PJ?4??7g?"?R????R??H??|J??!]????7r?q?=;?H2]????8??;?? + ???yXB at z?f?8??+F,>?=S??|???????????????????s?=??h?vF????S??T ??!?5??W(??i?T ?z?e???\?????-b????P6?Q???0???#???pB???O????l?R?{?=1#U?I41#H?8?????=???u?+ ?\??????P ?0???????????#?$?]?QF}c? ? ?%X?K?@??+ endstream + endobj + 1108 0 obj << + /Type /Page + /Contents 1109 0 R + /Resources 1107 0 R + /MediaBox [0 0 612 792] + /Parent 1085 0 R + /Annots [ 1104 0 R 1105 0 R 1106 0 R ] + >> endobj + 1104 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [271.967 351.398 296.117 362.94] + /A << /S /GoTo /D (subsection.4.9.1) >> + >> endobj + 1105 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [369.846 236.965 385.687 248.507] + /A << /S /GoTo /D (figure.caption.27) >> + >> endobj + 1106 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [275.392 134.632 281.76 147.198] + /A << /S /GoTo /D (Hfootnote.15) >> + >> endobj + 1110 0 obj << + /D [1108 0 R /XYZ 89 757 null] + >> endobj + 134 0 obj << + /D [1108 0 R /XYZ 90 333.867 null] + >> endobj + 1111 0 obj << + /D [1108 0 R /XYZ 104.346 94.762 null] + >> endobj + 1107 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R /F60 571 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1120 0 obj << + /Length 1808 + /Filter /FlateDecode + >> + stream + x??XK??8??W?(WE _zM??Lz*????]?^2s`K??&????^??Rn?5???K$?+ L??"J?`e????+z??T_?U? ?????? }?v??u>?74?=?S!??????2????????????????4?????4?l?????c!?D?@??R??(K ?o??"?!???[Ty?J-??Hp?????A????????$??<;?e???`??C??_?k?????+ endstream + endobj + 1119 0 obj << + /Type /Page + /Contents 1120 0 R + /Resources 1118 0 R + /MediaBox [0 0 612 792] + /Parent 1085 0 R + /Group 839 0 R + /Annots [ 1114 0 R 1115 0 R 1116 0 R ] + >> endobj + 1113 0 obj << + /Type /XObject + /Subtype /Image + /Width 1424 + /Height 799 + /BitsPerComponent 8 + /ColorSpace /DeviceRGB + /SMask 1126 0 R + /Length 59209 + /Filter /FlateDecode + >> + stream + x??? ?U??????????????^????}???+ + + y?RJ^+ + + + + 7???q???C?k??9? + %?+ 7????W?++ )???3w?/_6a?W_??k^???K?????mh??^?f??w? '?????O?a?????????Hw???w??-Z???A?z??o?d???[?u?????x?????=???'??? v?u???w8???;?????c?????E?a??k????-???!C????+ + + ?y?,?r???l????([?t??u?????9??A?&??????I?aEP????A??"9s(Q??I'?`??U???????/??~?y??P?J?h??????????$<~????????????g??n??j??|sr???3a????? ?j???v!y+ ??6?x??;?L??C??xV???????+ U\yE?%?-y?6S)y+ ??V?(?+ ?W+ + ????dX??_?Y????????+???7?????_}?h!?? V????/??c??++ ?F]$?+V??r???o????_?Jx?????? + + rXf??????+?C5n?KX?|???~;/vc?b???i?i?????J????K3????;Va4??$_??????????H??+ ????8r?????+??%5???3??y?9??[>6????r??c[D ,YrK?????D7v?rX??^????X?F???|??k????'b^1n\?h?????]?xd????_?{??w^R??_!?W??.??Fx?k???????????? ?W+ rr??Y%6ca?B#??????^=?=??Kh??+^x?? mlT???H??b^?????-??_xh??i?]??{?{l?t???'????~A?M???w??3!?)??;??p????/??????9@?/?x$??;x???S???o3?W???? ?Z?F???W?sQ????_??P?OdZ?V?????W?'S?????:?3F?Ci??n??"K?,,?+ d??? /???? ??N! + ???n?k????,??????h?????|?3??????S?o????????lk?G?? ??t?^a??%sbM?s????:??LM???????:cl???\?4?%????4K??%J$_?%??????o^q?)GD ????t/,????WM~?aAtK??Kc?BB^?x5jT?p??s?9>?E??dcx????++ + ??????W?y??y? CQ?yE???Y?Jl??X?0dH? ?y? "b?=?????~y???m?h???0?=an??5lX?h?I?eI^??5 + =??}???>??????U?????^???#???O????W??>byExvy+ ??6??+ +?H?c?V?}6{+~?? + + + + + + + wS+ + ??????+ + ???3+ ?????+ + ?+ ?"+ + + ? + ??RJ?++ y+ ???B)??R? + y?R?f???????|?????(????????#??_|????7?j?b?????Ut{?b?y0???^??o?9?S?V%J?H??]???#y?'???d8.?'?q??)?h???W?+??"*aj???KV^??W??W????tyE? ?????o???p#?PJ^?T??W\q?~?5L>?.?U??b???????n??^}uB?{Y?xd???]C??{/?5??5?? + ?e~???+?Xq[?y????#?b?.????W?+?*?Z?v?w\?????????a?? t??*~?s?m??yEB???N??/??j??[\D)y?R[\^???'\-+?????? I?$O~U?N???8?u????sd%? y??e?&/S?r?v??|5?????9??Y3?????_f?SJ^!?P*K??fF?*????k???_!???)??????? + _+ zFW?TZV?8y2L ????B?Wp?#j???j??? + ??z??K+ ? + + ???????6?lE???(*???? \??o??T?????[[[P?a?? ?R_?e?t?d???e\??q??n?+ ?uk{?/?Z???? ?]??iddT??u??V? ?W+ ? + + ? + + ??+?++ + ???o?D7?S???????M??J?w???#+ + .??#???M?;7?, ???D5??aoo?d?_n1K+ + + ??t? ???@O?+????x??V?y?J?2..M????] + 2+\? ?(????r??7c????W/'- ss3??G?.Q?l+ i???????%9y?v?_A??dY?q??|?Q?/????+R!?9???_?? 2_?2D??e????????I~Y? ??(+ + ?e??pr?_?n5???WH??????j??H J?O??? + t????~x??????S??Ell`??-D?? + + ???X??O???e?<D?B???mg??????>?b??)??/????$/_&????-??ENnoo??g????L???????2L?>Hc#T??:??_O~.+ ??????????Y?Z?V?t)*?V??jx?%????>sf???I???T?z9??v(???a]y]?9:???? ?/????9vl?j??C??)?? ?+ w??<@?????T?????F?f??zN??????m}?:???A?={??GG!?m???|?@???WP?s)U?V?m[?!C:Qq?lYWx+ ??5j??s?WCG??*?S+ b????'AA??V??? ??M?5??={:2???y? ?d????o>/?'??_?N?n?#Ft??+???p2774??????1??>???_??=???????c???>?p?|??????n?????W??t???a:??K??6o^?+ 011?O??='id?????ci?????????~??#???qbd?F?S???q?RT??S|???[||?J???+ lJ??n??Z???S???u?$n????6????5h?.?? ?<6k?G?n???????m???????/?W??????J??+ ??]?+ ]Wf?^?J]_J??j??^??b??@x + + ??E?Z?????????PC[?455??W?Fs?????e????tjd3q?(Q?];?U?????????? ?????P????????? ? ???????y{w???+_??i????u ?g???????=x?r???????????->]O?{???B+ 63f ?re+n?+ + ???O?W??o??.?>???eKl?8?jP??v? + .??+ + ???????H;rh??W?ik????+ ??????-????????D?P?f?????7?S?>>]??t s//????????+???!O?*5`@?1c?t???xqK^??d??Ice?"?????????????+ 1wI??V?:5???q????oHEG?m???Mg????? ??<9 + ????=???M??W?l?N#ff6n?*jAU/1???C?tG?????j??#{?2i??n?+ ????????????Q??O??Q???k4V3?????\??????K3?u?@0??????3??3???e?????o??yz?+ ?\?+^?L?7??|?>????>?P jw??X?j??V??W?vz??? ?YPB???????2$)??? + ??o+??R?????????2?Wt???7?d??j???m??C??S?v??`Q\?9q?[????B;??-+ ?????%KZIOh?j???z??? ????:??m?_?|(?C???R?-??$T??7??F????/V?b??^g????+ ?????#??]??????~~=???????NC?tRn???|?QcT?,??H}?8=~|??????????H??????T?:?t???Wh???f??)??:???'? ???????c???G????A]?Kz???l?&oP5+ ?a??s???[zz?db1R`?,???Tt???K}?0??2222(V6A?RcDm?FK?5?-?$??Ui?^?N??????D???D?5k&?C.+ j?kG??????W?~rl + z?k????<}??q?Tg??T???.???u????8b????1???_?n$???.????]?6?^??H[???n????x?Z+ oa?|?r?+8\?t?+zh?bl????e=?uz???????1?t????W??_?????K?&?z?D? + j?r????me=%?O?y?M???t)?w???????od jA_????=???SV??j? e?]??[???~?y???4+? ? ?)+ i??sj2S-?+???[?vp?L"#'?_??Ns?E?????W\??????????]i???T??wo???b>?f?j)?ld??@x + + ???????J?T?p?????C5?x+ ?_?W?R??v???PSS~c3;SJ????xm>??????-+ ?=;|????? *???????ah+ ?#8Q+XX?i?ML? ???+?\??k?_??y"?-5x?v]7?|t???9???31?OG?????n???|??~???-all,.N+?|??B?m^??u?N/n??>?=?+ + ??????n?t)J???> 777???~???5kV?????~?????q?"?vl??{r??*?_????}?????????[???F???+ ? + ??\???1???%K???{{w?}t???)??8m??????m??-???????ti??1?+?}?d=+t%???????S? ?6?,????n?_'Z?W?Fo?@PAe? z?*y????=9?&??2??x??????????A+^??+?hQ'???????????9>R5????? *T??????#???I??+ ? + + ???Xg??v5kV`?6F?+ h[?z9j??r?U???%K?????2Pf;;????o?4rdC p????n?.?2???>???C?%??l????+F?????m????????{z\??vG?&?????E?v?5?W??????h????+ ??,???,+??-?????????>ztI????#SSY8?+?!??t???_????C? + 6?9)??k??v??(55^,?{v ?RE W?+??,??_?{??M??ww??\P?H!ZN_???;????~}[`????P*Z???a]???{???Z???????'??i??????=S?_?LZ?`8?&??)St????3??Z??:???]??_??8?]?Bf?2?S???E?p+ bddt?D???+ ??O???A|?O!C?e??yiTI?W;??uk{??|y?|??????{{]?Ht!?t??_??????????e?????????QK?y?"1 ???X??W????Ht?L?&????+ ? + + KK???*?:th!g??%?????w?????????A)?????zz?T??_? O!???6M?l}????d?=???p??/ ?Tz?]??? ?]i?????????,?\???M?#G???_?6?I????A? + ?L?qqA??=TY?????????????Z7<|???K?BW?????p?)SH?Sc?Gd?joRYe?WXZ??S??i:B at d?1c???S88T[?t???{ ?T?????N?NN??+? + =bmm??i?{wW? + 6???Y<|??H7nl?3??j???+ __???????=????[??U1'EF|E?F?ue??u?T??_???9??I??S^??5??24~?o??2e+ + ? >?????????[??j,???4s??g??Eu ????????,s'?'?? ?Kk???? 55?h??T??Cl????pfms??i|?????;|?????c???????_???/?????+?\96O? + ???I???]?6S??|?NN???M???CY?+??o?Q?z????b?????W??p+ ????o????Q?????){??n_A????n????AA??`????????;??W|??Z???????????D??z? + ?????kl?NoSy?/_&?1A????6#???Cff?+ 2??L=|?_?1C[???=??9uj?l?;????T)k????r?dX?]?bF??+ ?247?Be????{}???Cll?????+d?*V,?@?),l?r?zNekjj?u????A??+ ]I??????????k_3?????kx??9^?d?????,???Z?l?+ 6U?????C?O? ??1=/??LO:zJR??_;rN??T?^?l????????"z??? ???35?h?Y?)?b?D7???????3?????^T??cbFokk ?>K??4iR?k#??y??b????W??*?p??W????O?????t??RR????V???R?"? s??=? ?BgST?????z?Y?+?A*.??M6?FM3? ????w+ !? + ]????a]3?WP#?/{??Z????Qu?m?????=rd1]??l??Tz]Q?Y?}??--?Eu?~?TtvD?M????wo??M?g??l'N?????b? + ?Z?N]*??s????];Q???0??V?????S]????V??0?>`?-Q??????+?n????X1 :j?3?????o???s?L???O?TJ?`???e7X!? .HeBg?~JB ??[U??2? ????9? ???????????[?F??O?dq+??t????|???+U*??/_???lT??9???}???5?Ur*??????? ????????W???D?????To? ?????9/\???C??\??Q??RC?.Ui????v??t?cU??$???+?+@??6 + + ]?D????H??j??????yD? + J?v??????+?>M??%i?D}|?6?????n_Ai????E?(??J?+?????j7?6?l???h???+? we??L??????.??Eb? + 6????i?t??????????/?>?Bt?Y?x?j??,}J?!m_???????Q^?G??;;EkW?+?D{?:????H ?f??:?? + J??.i???%~?3NY?+LL?+G?????;?P???WPAqe????3?_???9??????$,???v?r???$??}t?U#?=??W?KK?WP?B???? + ?? U*??\?Z9D3+ ?_EW????3i?Y?pD6?[???~w"^?l?C?????`?0iR];&.:;?????H}??? \??}?t?(?#$.|???^?+q+??2}|??C U?6?}/j??+?U?3G???Z?"z?X?#}?Q?k??????? + ?!G6'??????]J_??s?YH??x2_A? ?|1???+ ?%?(?]??y.???T??+DiSS? ??7?l?4d_D ??E ??????$h+?s????_A??;?W??#?F??n\w???n??t? + >wr?dyr?^????L + ??? + 2??E??(a??W????U?B???F???&??????"??z??????c + o???wT?????U???k?t?=y??+???b.??ft???W??d???FK???@???T?|Wj? ??1?a?*bj=^????=~??????@d?V?^=????W+ k?:7??_?h?t??OZa?????I,?G.?????CZ/????????????|7&f???qO??'b????%r??>m?=?G??DW???[?? ??y????A?+ z? + + {?W*W.+g??t]]?D????7???"k???5+4o^A? ?T?b?+@>L?S??jB??E ?^= &???}{k?.?W???fV@?@?MAD?M??????u???????9s9???%??????????????M<{?????_?B+? ?z? B?+ A?W? ? ?z? B?+ ? ? ?AA??+@Az? + A?^@?+ ??+@Az? ??+?W? ? ?AA??+@Az? ??+?W?`?????????H? VK?_??~??1?'b?????9?????O?2???? ??67??s?l??9?%o???W? ? ?zf?K???V?p?;w?K?????????#???n?????????d"?%? ???loLRR(?$O???7?? ? + A?W@?x?>V?iS?8c????????????= ??{w??}!?`aa?d?A?x??eK8w??G???.???35?o_????G?DB??^? ? ? + ??A???????G????????67i?f????=?d????c'??????e???1?M??7m?F????8v,:'?????n???Q??^? ? ? + ?)bo?HA??^A???m???????=??+ ???9???R???W??M???^? ? ???N??? ?}??zq???|vg??A??^?F????>t^VV?99?? + ? ? B??^??z????4?NL Y?j??} ._N?/???]???\L??{??{;t + ?????^??????????.\Xm? ??g??S???'????y?\Y?,C??F???9QP???[?=?/*C?Z??+.3??????9?N?n=a????O??o?]EV?;???X?v??t?HU? ???oV???????????+@A?^?"G???5i?faa?????????c??/_Nz???rYI [[?????vm??????2]?z??? ??o??%????Wm?? ?A&epv.>D6?B ??/??v?????N??W?`>Ql??@?S??v?j?O?J???????u???? ??5#?~bf?35u:???? ??+??N?5??????;w???d?E\J)??v????0?z???Ep? zK???9?Gi?LN?? + j?? ??^q??ll?UM?J?z???o???hQ+#z??u??3?????;?y??B???I????u?_SR???gz?|??~??W?W???)[($#?w:'??s???$?_K???G?4I??S??Vc????U, at 75? ???????V???a?.g?_?j???I??,??Iz?y?z?j?o?????s????qc?\????+^ J#?????-NT6?????T??? ?+???" ??+???+||????/?4?Z??U?2%_'?$????;w?6???,R??????????n????2?Cf?M?V???S?QG?P%y?|D????{?n????Q?JI ???:P????+D?c@?sSU??6???'?X??5+?H?C??9z]_?'&e?w.?:??:?N???_??^5??>L?Z?H?F???t???i5?H?B< E?g??`????X??K&?P?Yz???o08ME??O?]??l?*B?1????}?(???????. B??!zy? V???`???U?) ?iS??W???h??9FV3?????N?*?f?de$??????{??"??@?f5d?-L?+?~}????mpE?????N??n?9G? ??:q + ???4O??}?e$?E???M/*????O?]??O????"%%?7?S\???>?????0 )????^??;???8?O???$?B???t??[7?Nz?????e'??f%#?A???7I??q2]??J??~?VE,zEv??/?W?2?o7?;??????w_?v?l??NZ????h???H? ??+??V??4e????)???|++K????{?G??;"2?_z???????? S??????#Ftrr*.??h????? + ?m????6{?B\?n?J?????r??r?J9A??????W???????????@??Fu????i,?T?CB?RQ?~??R?P?U.?\???6???????F???????7O?(Y?(???j???.E?|??oCbf?*??????^M???????x?? k]!#?WPW????%??SL????????C!??Nv????+??Ri.???)??????????S#& ?%???????ZA>?????l?+????? ?s??N?WO?????? T.?Ty?!?????s??8r$???u?T??I??SIK??Y?????????>???????????r????B??iP?;t(????????U??v???g=k?0a?v?FF?>???????P?4???_F??f?jpa:?)(}??)??q????BY?,?gv????zE???b?O??#:5:#??????????6?">H?B?%??/4?-djI????/+???4h??A??[~??aJ??)?(i?t? ????T??t5U\t?????TB???????d}_[?????a0FS?>???9$??a???]??? + ???B??:?W??????K?P???(?????T??Z????0>?VF? + ??O?F??I7??TD?$?w????^??VC??\??=??#??YGvY??^}??P{x??W]??d???{?C ?`?,?+???U??S+???+?7??~?i?????)??&4X???B^?>?N?????S?_X???!=r??? ?z??!Y,?U?.+O??q?e)???x?D??Gi?^!?7??????;??? + ?#? ???H??x?D?F? ????]??L????m??lN?6y?????/$??T'?g?^q?P???G?Fi??!?p??!??{5C?x?0Mu?%J?? Y5????+?<{????hy??2?'?NF???+???u??U?t?b9A???P?????? Q?6??nm????N???'?K?w4?^1??'??] z+q?u?^?b#Ft?\???m???????Y??+t^?U??3? + ??M?M??w(?8:4?S???b??^^ui?????I?:#z?????a?m?I?~???I???k??Lr?;uj"??,\8?vB?o?????i??a?Z?HC?5\???>}?H1/??;??? Pn??3q???Cu8?s^aa?h????ZM]?x,?Y?o?t?|????,??>????: 2??A??sPr?????5??'????r???MFvt?ww?J6d'???E\Q'3????w?9????s%??????G??????Kk?p:9?dC?@C??xz??\???C?L??M?D~?MoU/u? ???CCq:????Ot?rcTF???\Fk"*?????z??p]?d???Z8?(j?X?????Br(??m??3b??????????+2????Ha? u???i?zEN?+t???^????3p')?m$?P?z?j"Yi?l?Jl??r??H[Co???+8 ????p??n??d?^??P?l?BLf3??|??PT4?j?????z????M???kF?^! ? + ? ?"?? ????}?[?2???~}n???S??????f^?????m?+????J*)???????@?9z?8??G?f???]??`???R????E???vW??3H??zu?+D?$UPXC??W8:?????cs?r??k$?&??????M???b!I??5????d?+@?^?|?H?L^6bp1 ?L???JgJv???$???????=z???P??1[???????? + a??IJ????? C?+??tss??:3?t? fz? + ?T????b?2????Wp???dN?Y?\?s?&OG?W?????*??Z? + ? B??^?1?0Y???^??????????Cs?0S3??`????.=+V,??{? z???s?&be??u?????Z))a??e?????????e?o?^q?T,?s??NJ??@=DY????2????4????.?EL??{????'??G(-:????/??????? ????Z????xq?j?c???????????c?s??S*]????z??^?`?hiC)???(s"K???????YL?a????2??HK??KS??#,?H?????ik?[5???'{??K?n!??`H1sC'S?:??0?z??:q???M?^?^?h?{?O????:5?/????9{6^v!~?}/8??????????k?N?Wz??+?W? f/?>????S?0????{????3f MM?N??>??????+?????????GT??y??}?????{?.??{?.?4?_??? ?+Lam??b??3f U1??/?M]??]?g?[XXT?\f??.??)??{???S??m ?Jll?????????J?z???A???h6?\???U+??~R??~}?????????;??????s?V??&%?L?Jgj?????5??D? ??????~???????U?.??3?W?? D?@????\??i?4wi???????q???;w?~?(]u??nm^?.t?????5???md??G?E??z??.???c7v???b?Q?ZBB????I??QQ??x?XAz? + A?^?????]?}???|?02??I??ti?I?????????|???\?*R???x??taaa???????W????t?~?yY???T?b`?u{?D?JH?G???][?|?4X+? ? + ? ? ?4?h-?xM?q77g??"????l?;?????U+k? ?z? ??+?W??????????K<??:?Az? + A?W@?0?c?vk????E?I7^???6?m???%DH0??? ????[??={???S??_8n\??y_F)i?? VAz? + A?W@?+ ZXX-Z?Q?j???U?a + ? ?z? B??^? ??+?W@?+ A?W@?+ A?W@?+ A?W@?+ ? ? ?AA??+@A?^? ? ? + ? ? ?Z??*9??? ? ???h???+?6????w*?????m0?,?tp(??m??'O???]??/\8&?/??_???cV|??-[?^v???,8.???????? ??? + + ??+2????J))a ???S? ?(z?8?L?u??.Y???TU*??R???Vr?G?S|?D? ??zE??]G+ ?W+ ?d3+Tao_H????+?????????@m???;71?z?kO?z?>`@[e?"?1z?/?y??Z?{ ?z+ ??S??????????J??T?????????!>?????+$?YV?x?x ?#?+?hQKz??G?*??Q????A?? + ?=6?b?^A?????????I=??? ????U$??KS?h?A??/]:?*?e?-;6?^??+?W+ ???+?????qi-?Db??1?Z[???v?//??~???O?)? + 9???[?D.?8 V??+ ??;???n?????????*?[????9_??N?Sll??u.?[? ?z+ ?^+ ?P????>??+!?8e?+ :42U+0F???????w?r??g7?z???V?????.F??_R{?n????:W???eS??+h?: 0?W(??2???L?+VX????U???k?Y??^??++ ?U???E f?^q???L?v?????????AJ?.?d???nm6^??xq?j?????V?gX?j???w??-?????chXYY>y?7??????D?"$ ?g????z???*?????W???R?b???? W?&?]?Xa??? ???6??;fq????Ze????????a?j?x??V,???p???KJ?S???6?]zu''???U5kHH_qA?+ K?t 77g?w??_k???KSi?K????y?F + v??n??%?H?<}:?4z????????m??;??:thd???;??tD??J>??m??v?y???? U???s??????+W??w?E? ?x{?U~?y??? ?J?B?+ j??PQ?????5k&/^}????O????????*s?? ?+ + A?^+ ??+ + + endstream + endobj + 1126 0 obj << + /Type /XObject + /Subtype /Image + /Width 1424 + /Height 799 + /BitsPerComponent 8 + /ColorSpace /DeviceGray + /Length 7545 + /Filter /FlateDecode + >> + stream + x???y????????1?1??dK?^i?NT???BJH?RZZ$?+=?? ??VB?-%Q"????}???#?Y?r??n???q???|??k?};3 ?E?7c?|??1???1??z ?1z ??z?z???????1???1??z ?1z ?q?{@?????.?c?c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X??X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X??X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c??c=?=?X?=F?=?c@??c@???c???????A@?Ka???+???&}?c???G=?X??X?=?c+ y????{?b???w??~?8??h?&?????r???{>pRrX!Or^r`?????.???L???h?w????vn??????(????"??=o???w?5?]n??On?X+ ??d??M??Q ?po?????(???K.?r?P????G?v?P?????X,??m??.?;??cs?P??w$ww?9,@qNN?o? O?X+ ?! $? ?^,w????L?{?h?? ?$???bt???H?s?E?X+ b?+ ,Po{$??3T??jm??? ??",Pc?LZ???b?ut??zg??!?X at M?039?*d???i?{?[??C?X,???L&?v?J?X at -?????P1?????5??????P9 ??A?$?t???X@?|.??jg? ??????/;CU)?X@}?|_r?w???bq????'?D_bU??j??I?? ?e???XBr?3T???b? ????C?Y,?&?Of??*?b?????q?Pm ??UH??g??8;yj}g?? M5?6??? ?L~? ???L????k?G?C?Y,?$?Mf?????X??b?{???K??l (???Kn? g???I2?(?x (?{????X@?6???? X,?h?oH?_??X@??Of??h?X@?^9;? ?a?????@r?`w`?????????h/9?I?? ??X?b?I????! ^,P?O?[?????f??"|%??g`n ???t'?8?~?d??N[?_?U???yY,???O?x?3! 0??t?I ?v?b????tg`?,?A??1?gw`?,?9_Ofl? ,??:? ?????BY,?CV8?|?;?pc?I?;?? ???? ,????O\????dwg`?????@??bj?]g?S?????y?7???.????+w??y?wR2}kg?c??????i?????=?h]?J???z?S?C[?D?RV??c????9??=?F??zL?z|??^zLz?T???====F?A??s?Ys?@??@??X??@??@??X???FN6????z ??+ endstream + endobj + 1117 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./3c-compiler-Edd-Barrett-dottex-fig5.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1127 0 R + /BBox [36 36 324 71] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 1128 0 R + >>/Font << /R8 1129 0 R>> + >> + /Length 503 + /Filter /FlateDecode + >> + stream + x??TMk?@????c?vg?kB?!?6???T?S???J?{g???9?!??V???g??h???Y7??]???W6?71??7pX?7?)?|?+ ???j???d?a???vh#T?:?o?M _mv??p^=?K?!1[?L??d????????\???/>f?u?nb ???68?dzA$+#??????C?d?ebt?.??^?Q ?J7B??5????N5j???e?? As???a???0??b????s?e"2b8?t???%E?Y??,a??g???~?-|???????8z???R????M;%#Ns?1????"??n([7?s?hou2???>???2.?X?"??PD?:H?h???W?~+?v??r??.!???I?????c???)??#???? {f? p?????5v?E&??:????Y????87?#d[+ endstream + endobj + 1127 0 obj + << + /Producer (GPL Ghostscript 8.63) + /CreationDate (D:20090521011602+01'00') + /ModDate (D:20090521011602+01'00') + /Creator (Graphviz version 2.12 \(Sat Apr 25 01:56:11 UTC 2009\)) + /Author (\(edd\) ) + /Title (G) + >> + endobj + 1128 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 1129 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 1114 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [111.629 455.593 117.997 468.159] + /A << /S /GoTo /D (Hfootnote.16) >> + >> endobj + 1115 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [438.202 455.593 462.352 468.159] + /A << /S /GoTo /D (figure.caption.31) >> + >> endobj + 1116 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [410.073 431.683 425.913 443.225] + /A << /S /GoTo /D (figure.caption.28) >> + >> endobj + 1121 0 obj << + /D [1119 0 R /XYZ 89 757 null] + >> endobj + 1112 0 obj << + /D [1119 0 R /XYZ 90 697.114 null] + >> endobj + 1122 0 obj << + /D [1119 0 R /XYZ 90 415.925 null] + >> endobj + 138 0 obj << + /D [1119 0 R /XYZ 90 318.722 null] + >> endobj + 142 0 obj << + /D [1119 0 R /XYZ 90 229.872 null] + >> endobj + 1123 0 obj << + /D [1119 0 R /XYZ 90 179.116 null] + >> endobj + 1124 0 obj << + /D [1119 0 R /XYZ 90 160.532 null] + >> endobj + 1125 0 obj << + /D [1119 0 R /XYZ 104.346 94.762 null] + >> endobj + 1118 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F30 348 0 R /F31 350 0 R >> + /XObject << /Im10 1113 0 R /Im11 1117 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 1135 0 obj << + /Length 1953 + /Filter /FlateDecode + >> + stream + x??Y???6???>j???C"?{h??? ?G?????,?????+?????f8?ly??&[??}1)j8??of(??:??w??/?z-E??LK??Q?#?????e?S??????r%?????? {?i}??;?2Bn??m????e?K????5?s?O??G?tZ]???=????>??`5OV?|??. ?m?????4 ?c?2{?L??Kphm+ ???:s?? ????V??3???YhbD?}&`??'d5??????lm? k?p???&???@hfL?e???t?M>??,??\=\? LG8Hq ??Ux?]QG?x????K?|??|?,4?d?"|?O!/??c??p?s?APi? ??{I@???"9???UHCq???NM??L?jrljU?*??3?????\??B??>????,?V+ endstream + endobj + 1134 0 obj << + /Type /Page + /Contents 1135 0 R + /Resources 1133 0 R + /MediaBox [0 0 612 792] + /Parent 1085 0 R + /Annots [ 1131 0 R ] + >> endobj + 1131 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [170.239 371.498 191.619 383.039] + /A << /S /GoTo /D (figure.caption.31) >> + >> endobj + 1136 0 obj << + /D [1134 0 R /XYZ 89 757 null] + >> endobj + 146 0 obj << + /D [1134 0 R /XYZ 90 683.823 null] + >> endobj + 150 0 obj << + /D [1134 0 R /XYZ 90 577.952 null] + >> endobj + 154 0 obj << + /D [1134 0 R /XYZ 90 472.156 null] + >> endobj + 1137 0 obj << + /D [1134 0 R /XYZ 90 367.264 null] + >> endobj + 1138 0 obj << + /D [1134 0 R /XYZ 90 280.946 null] + >> endobj + 1130 0 obj << + /D [1134 0 R /XYZ 90 163.546 null] + >> endobj + 1133 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F30 348 0 R /F31 350 0 R /F11 361 0 R /F58 500 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1144 0 obj << + /Length 3885 + /Filter /FlateDecode + >> + stream + x??[[??D~?_?z??q]]Fb?e???????@???n?c7?????R?8i'?0???/]??r]??;????r?,?s???????b????v?~???E???*?x_,~??.n??x????????x????Zs???q????L???^Wu??????K&??}%d????_?{?????.?&Y^]?N??z{??/????oI?2???Q??? + ?z????/??'6N????m?k??2"Z???,T?????7??&?p?;?r]?0p?Z?_???L??]?K? o?????M?-?p??qf o?l????DyC?????.???_-?2???????????a???r=pg??CS???V??>?FM?%????`?v???P???>9?C??^w???ab?U? ?i??w?z7???G$?M??F+????????8???]?N?????? ?8u?+ &@??oX??"Mg? ????d?I?????????????'??U???) + ?2H\?.?`x????,^??C?Kc???lr?I6???;? ?v ?????m??%=??p-??X(?0????1?9 + y,g?????E?K???K?d?C6??R' ?????X?\???G????5@???????b}?*B^??m./B???????f??J@?J??? ???% ???r[??x?Q??q?????g??G? {?Zx^?????????????7?F&??S???5?U??QmS?C+ ??6??:%T ?T??T:?????e??TZ?'?4? ?N??c??k4A*?{<?I&??Jyl%?J[????????O + T??R?Q|}?s???|9?*T?t?I????????????o???m????~DL??e?N??ow??F?o????I?+ ??^?e(C?@?q?T?|???l3`?#D}??~??U N??(KT???????f????2????|?? + ?_??V=??V??&???&???S????3??D???F? ?yu>?c??/??V?-?:pt??R?]p1K{x!?j?4? ?n?/$ )?????x??T??lT at V????%????????sWFb??@?!h??3|Ei 0???????,?~?!:'?&??V1?O?+ ?)-^??2 ???,???dbR.???y?{e????%???Z{?g??[/??w??^?D?]=<7?)?~ ? V??m?L at dCt>?? ???"????????2???? ???????0Z?x????m;u?>"??s?+ ??#??R??:?#?????E???G??l??+ ?Ihtv?p???g?2????]??%???Ir??p?? ?? + endstream + endobj + 1143 0 obj << + /Type /Page + /Contents 1144 0 R + /Resources 1142 0 R + /MediaBox [0 0 612 792] + /Parent 1085 0 R + /Group 839 0 R + /Annots [ 1132 0 R 1139 0 R ] + >> endobj + 1132 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [130.72 665.088 146.56 676.63] + /A << /S /GoTo /D (lstlisting.4.2) >> + >> endobj + 1139 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [175.433 310.431 191.273 321.973] + /A << /S /GoTo /D (lstlisting.4.3) >> + >> endobj + 1145 0 obj << + /D [1143 0 R /XYZ 89 757 null] + >> endobj + 1148 0 obj << + /D [1143 0 R /XYZ 90 496.982 null] + >> endobj + 1149 0 obj << + /D [1143 0 R /XYZ 90 477.097 null] + >> endobj + 1150 0 obj << + /D [1143 0 R /XYZ 90 462.85 null] + >> endobj + 1151 0 obj << + /D [1143 0 R /XYZ 90 448.604 null] + >> endobj + 1152 0 obj << + /D [1143 0 R /XYZ 90 434.357 null] + >> endobj + 1153 0 obj << + /D [1143 0 R /XYZ 90 420.111 null] + >> endobj + 1154 0 obj << + /D [1143 0 R /XYZ 90 244.809 null] + >> endobj + 1155 0 obj << + /D [1143 0 R /XYZ 90 224.924 null] + >> endobj + 1156 0 obj << + /D [1143 0 R /XYZ 90 210.678 null] + >> endobj + 1157 0 obj << + /D [1143 0 R /XYZ 90 196.431 null] + >> endobj + 1158 0 obj << + /D [1143 0 R /XYZ 90 182.184 null] + >> endobj + 1159 0 obj << + /D [1143 0 R /XYZ 90 167.938 null] + >> endobj + 1160 0 obj << + /D [1143 0 R /XYZ 90 153.691 null] + >> endobj + 1161 0 obj << + /D [1143 0 R /XYZ 90 139.445 null] + >> endobj + 1162 0 obj << + /D [1143 0 R /XYZ 90 125.198 null] + >> endobj + 1163 0 obj << + /D [1143 0 R /XYZ 90 110.951 null] + >> endobj + 1164 0 obj << + /D [1143 0 R /XYZ 90 96.705 null] + >> endobj + 1142 0 obj << + /Font << /F21 332 0 R /F31 350 0 R /F11 361 0 R /F14 463 0 R /F8 1146 0 R /F10 1147 0 R /F20 335 0 R /F19 498 0 R >> + /XObject << /Im8 1068 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 1168 0 obj << + /Length 3312 + /Filter /FlateDecode + >> + stream + x??k?????? + !@Pj???]?h?$A\8p??5?% ?Z??H??|??y,)JG?????/??p3??Z?H??fr?????^<??,??n?v=???[/?Q????/?W7y??\h?????&t?^+? ????&Y?aJ??????????$??9:?~???j ??}??6?/u???Y?? HA?D?c9?? ?!?c?/%????(? ?8k?8????S??tbA? ??????S?G???/??5*s.???_?? $t?G=? !?s2????d???iMpN0[?^?_#?3?P&?????????????wj???&F??F??? ?A2e????? ??????+$4??m???~??v? Oji??4?.]i\j!A??la?????M L"?????]?W?o?.r???P&???C?~????????E?? ????X?S?c??u??&|?????x????X???}1qs?!?Wf??n???????? ?v?o?Nfv ?t?????24Sw?N?C??z,????n?]?%)L?]??6?????;????w?o?{A+ ???*:??9?n???#?q???T????}???/??C?????|?? ?^hsb???GH?O???M?Zt??"?,j??K^nx??? ?&?7??&?s???Rx?)YNzN???????????y?\=??+?6?{?n(????-W?M~??G?Q+ ;?x?r??7|?W|???=??? ?????H-?2??8??5A??!????~?'?LS??= +iT?? ???h?[%??? ?W?????H?y?7|??W?IM`[??????$????K????ucj?/?$??????ur???g4?M??b3A?????cA= ??W> endobj + 1140 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [440.363 700.954 456.203 712.496] + /A << /S /GoTo /D (lstlisting.4.4) >> + >> endobj + 1141 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [148.774 629.223 155.142 641.701] + /A << /S /GoTo /D (Hfootnote.17) >> + >> endobj + 1165 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [118.668 229.18 134.509 240.722] + /A << /S /GoTo /D (lstlisting.4.5) >> + >> endobj + 1169 0 obj << + /D [1167 0 R /XYZ 89 757 null] + >> endobj + 1170 0 obj << + /D [1167 0 R /XYZ 90 600.452 null] + >> endobj + 1171 0 obj << + /D [1167 0 R /XYZ 90 581.061 null] + >> endobj + 1172 0 obj << + /D [1167 0 R /XYZ 90 566.814 null] + >> endobj + 1173 0 obj << + /D [1167 0 R /XYZ 90 552.568 null] + >> endobj + 1174 0 obj << + /D [1167 0 R /XYZ 90 538.321 null] + >> endobj + 1175 0 obj << + /D [1167 0 R /XYZ 90 524.075 null] + >> endobj + 1176 0 obj << + /D [1167 0 R /XYZ 90 509.828 null] + >> endobj + 1177 0 obj << + /D [1167 0 R /XYZ 90 495.581 null] + >> endobj + 1178 0 obj << + /D [1167 0 R /XYZ 90 481.335 null] + >> endobj + 1179 0 obj << + /D [1167 0 R /XYZ 90 467.088 null] + >> endobj + 1180 0 obj << + /D [1167 0 R /XYZ 90 452.842 null] + >> endobj + 1181 0 obj << + /D [1167 0 R /XYZ 90 438.595 null] + >> endobj + 1182 0 obj << + /D [1167 0 R /XYZ 90 424.348 null] + >> endobj + 1183 0 obj << + /D [1167 0 R /XYZ 90 410.102 null] + >> endobj + 1184 0 obj << + /D [1167 0 R /XYZ 90 395.855 null] + >> endobj + 1185 0 obj << + /D [1167 0 R /XYZ 90 381.609 null] + >> endobj + 1186 0 obj << + /D [1167 0 R /XYZ 90 367.362 null] + >> endobj + 1187 0 obj << + /D [1167 0 R /XYZ 90 353.115 null] + >> endobj + 158 0 obj << + /D [1167 0 R /XYZ 90 313.19 null] + >> endobj + 1188 0 obj << + /D [1167 0 R /XYZ 90 164.544 null] + >> endobj + 1189 0 obj << + /D [1167 0 R /XYZ 90 145.153 null] + >> endobj + 1190 0 obj << + /D [1167 0 R /XYZ 90 130.906 null] + >> endobj + 1191 0 obj << + /D [1167 0 R /XYZ 90 116.66 null] + >> endobj + 1192 0 obj << + /D [1167 0 R /XYZ 104.346 94.762 null] + >> endobj + 1166 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F31 350 0 R /F20 335 0 R /F30 348 0 R /F60 571 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1201 0 obj << + /Length 2934 + /Filter /FlateDecode + >> + stream + x??ZKs????W?-T??&+ S?#??t?8}1?D??/?4??W?/H?&?H??F8F?f#??S~$?m2?????J`6? }???I0?o?D?D?DtEtGtK?[????)??$?lu???@?w?5Ze?4d[lt?|??r??v?f-????AF,~v2????T??8?h?:? 0qX?IC???#O??5l???b??,?? ??????;?\????(??zy??x*??Z??o_??Q??w??C?????f?2???9??n?] ~??WE?? ??)?+K??R2???RJf6???????V??@????I?f?r5??j4?IJOt)9?,[?h\???7?/ \r??????*\? BT??#'?R?*~???K???ck,???wG?7? ?\njg9???R???9?Y????0???*? F?O?? ?]???????r?????8????W????n??%?????> endobj + 1197 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./3c-compiler-Edd-Barrett-dottex-fig6.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1208 0 R + /BBox [36 36 446 68] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 1209 0 R + >>/Font << /R8 1210 0 R>> + >> + /Length 351 + /Filter /FlateDecode + >> + stream + x???KKC1???gY?????B7.|\p!.|??Jo_^?"?w?????"(C?09a????2G??V?????*?B;?? ??(?Y??#???K z?[?#?????P?V!?????B)m??%,?4L1 at yI??Mu?<??????I??"Ie????????1 kHZiPT?s?[ ?pw???^?"?L?ktYR?1I?D?????????WeV??R0+O?&???????&????b???@M?9>W????;?????^;b?n'?[????????yS?7??.??6?@?L????B>?????_???Z?ti?sU?7?N??????I?6>g_??????0O?.??x?1? ????9?J`?? + endstream + endobj + 1208 0 obj + << + /Producer (GPL Ghostscript 8.63) + /CreationDate (D:20090521011604+01'00') + /ModDate (D:20090521011604+01'00') + /Creator (Graphviz version 2.12 \(Sat Apr 25 01:56:11 UTC 2009\)) + /Author (\(edd\) ) + /Title (G) + >> + endobj + 1209 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 1210 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 1194 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [332.643 671.571 348.484 683.113] + /A << /S /GoTo /D (lstlisting.4.6) >> + >> endobj + 1195 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [425.262 647.661 441.103 659.202] + /A << /S /GoTo /D (section.4.7) >> + >> endobj + 1196 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [280.797 212.077 302.177 223.655] + /A << /S /GoTo /D (figure.caption.32) >> + >> endobj + 1202 0 obj << + /D [1200 0 R /XYZ 89 757 null] + >> endobj + 1203 0 obj << + /D [1200 0 R /XYZ 90 730.319 null] + >> endobj + 1204 0 obj << + /D [1200 0 R /XYZ 90 639.948 null] + >> endobj + 1205 0 obj << + /D [1200 0 R /XYZ 90 619.13 null] + >> endobj + 1206 0 obj << + /D [1200 0 R /XYZ 90 604.884 null] + >> endobj + 162 0 obj << + /D [1200 0 R /XYZ 90 554.265 null] + >> endobj + 166 0 obj << + /D [1200 0 R /XYZ 90 295.137 null] + >> endobj + 1207 0 obj << + /D [1200 0 R /XYZ 90 158.374 null] + >> endobj + 1199 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F19 498 0 R /F31 350 0 R /F30 348 0 R >> + /XObject << /Im12 1197 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1219 0 obj << + /Length 3040 + /Filter /FlateDecode + >> + stream + x???????}?B??p? ??+???]g]??x=????1???1???????^?*#4?F??7Gm6j????w7_?2zS?Ej?????P?,??4?????}?r?d????dy???{7??1*?????-7_q???;???cU??{?P? ?ys?? + ~??????o^??|??@??h>= + ?8?????_?f??oT???V5??D????n~?Q??D?C?E???*7|?8?Bs??J??????B??????& ?#??????i`x?+??=4?a???{??~7????j?mP?Q+I?Y=?y?*8?{??jG`??:???Y?cPQ?x%? ?????>1?w?(eZ'G4nL??`?z?m??????t??Rp|??q?b???????|? ????e9+ ???*9?+#)W??????t?bn?K?=:k???J9|?LI?"1?W$?|E?????H??fG?,??h?bFf?-??2?? 8???g~???d??????q(?9?6???U????a0? + M]x?J"?r?i7??Z?4S=V????}U?9????<*w???:x-?????e??K???, ?]6FyFz?0????j~????D`?:x%?,(Zg??M?d?VE{?P????;g??????p????H? ????;??(j$j"-?$? ?k(?`L ?`V@??W??g?A???k$?????,????R*}?.???????????*7??kb?'?>???' + + endstream + endobj + 1218 0 obj << + /Type /Page + /Contents 1219 0 R + /Resources 1217 0 R + /MediaBox [0 0 612 792] + /Parent 1193 0 R + /Annots [ 1198 0 R 1211 0 R 1212 0 R 1214 0 R ] + >> endobj + 1213 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./3c-compiler-Edd-Barrett-dottex-fig7.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1226 0 R + /BBox [36 36 216 67] + /Resources << + /ProcSet [ /PDF /Text ] + /ExtGState << + /R7 1227 0 R + >>/Font << /R8 1228 0 R>> + >> + /Length 262 + /Filter /FlateDecode + >> + stream + x???MK?@???+?c:??WvA<?I?? J??H??X??????> + endobj + 1227 0 obj + << + /Type /ExtGState + /OPM 1 + >> + endobj + 1228 0 obj + << + /BaseFont /Times-Roman + /Type /Font + /Subtype /Type1 + >> + endobj + 1198 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [238.025 649.984 259.404 661.526] + /A << /S /GoTo /D (figure.caption.33) >> + >> endobj + 1211 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [507.628 539.755 513.996 552.27] + /A << /S /GoTo /D (Hfootnote.18) >> + >> endobj + 1212 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [507.628 448.83 513.996 461.591] + /A << /S /GoTo /D (Hfootnote.19) >> + >> endobj + 1214 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [168.799 110.629 184.639 122.171] + /A << /S /GoTo /D (lstlisting.4.7) >> + >> endobj + 1220 0 obj << + /D [1218 0 R /XYZ 89 757 null] + >> endobj + 170 0 obj << + /D [1218 0 R /XYZ 90 726.045 null] + >> endobj + 1221 0 obj << + /D [1218 0 R /XYZ 90 595.885 null] + >> endobj + 1222 0 obj << + /D [1218 0 R /XYZ 90 492.968 null] + >> endobj + 1223 0 obj << + /D [1218 0 R /XYZ 90 360.658 null] + >> endobj + 174 0 obj << + /D [1218 0 R /XYZ 90 267.009 null] + >> endobj + 1224 0 obj << + /D [1218 0 R /XYZ 104.346 105.531 null] + >> endobj + 1225 0 obj << + /D [1218 0 R /XYZ 104.346 94.762 null] + >> endobj + 1217 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F19 498 0 R /F31 350 0 R /F49 1084 0 R >> + /XObject << /Im13 1213 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1233 0 obj << + /Length 2617 + /Filter /FlateDecode + >> + stream + x??Z[???~?_??/$??N)M + d?b?l????Aci?Bm???????=???e??L????x?x.?????E?_?xu??[??,??0??M???*????"??)?????????m[?=S*?S????5=??rE???????-?V]U?R???K.X??_/?_??xsu?? ?a??e?*M?????wKd?F???"RB?s???? vp'?$,????=??H??|:?????R??\N?????r?,?~????eA ?e9???|Mo??~?G?qK????h??D\?[F?,??oZj??b?emh?l?O??/4?M3?7??_?i%0?+7? ?M$g?U???$????Mcq?^\7??rb9??f%????jQ?=?????????\Q?M????????j:?l?[]?????E?+w]?o????=???????x???5J&???w5(8??????s?K??@Y??w???9??: |???^h?? + ???vUO?jQ"?R?W????, vP?I???7?me????????r3?????j?E??+ ?B???????-`????Q `2X?????d??J;?R?v??6?????V@/'??k?N]:w????KA?m?????g?#Uh?!?\???ui????(?????+ A??l?? Ne????fN????.?w??F?wA??l?)?????e?O?U????x?0`?6??c???+dw?q?[m????? + ?B?????-??%??%??b?,?? ?????vp??w?????????21???????,???tN?????? ?8?r 8: ?A?Hb?U?5??@_? + ??????Nb?8?!? ? a???&?;???",Q??1T$?#?? u???<_??$(b0??+? ?????c|%?1V ??|?g???????????a?'??:d5[?U???(9|R*???RNW??#?2??u???84? z?L?':???????K???Z???+ endstream + endobj + 1232 0 obj << + /Type /Page + /Contents 1233 0 R + /Resources 1231 0 R + /MediaBox [0 0 612 792] + /Parent 1193 0 R + /Annots [ 1215 0 R 1216 0 R 1230 0 R ] + >> endobj + 1215 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [476.111 641.178 497.491 653.656] + /A << /S /GoTo /D (figure.caption.34) >> + >> endobj + 1216 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [495.499 641.178 501.867 653.656] + /A << /S /GoTo /D (Hfootnote.20) >> + >> endobj + 1230 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [336.527 99.203 357.907 110.745] + /A << /S /GoTo /D (figure.caption.35) >> + >> endobj + 1234 0 obj << + /D [1232 0 R /XYZ 89 757 null] + >> endobj + 1235 0 obj << + /D [1232 0 R /XYZ 90 637.02 null] + >> endobj + 1236 0 obj << + /D [1232 0 R /XYZ 90 629.25 null] + >> endobj + 1237 0 obj << + /D [1232 0 R /XYZ 346.673 627.91 null] + >> endobj + 1229 0 obj << + /D [1232 0 R /XYZ 90 554.44 null] + >> endobj + 1238 0 obj << + /D [1232 0 R /XYZ 90 534.503 null] + >> endobj + 1239 0 obj << + /D [1232 0 R /XYZ 90 520.257 null] + >> endobj + 1240 0 obj << + /D [1232 0 R /XYZ 90 506.01 null] + >> endobj + 1241 0 obj << + /D [1232 0 R /XYZ 90 491.763 null] + >> endobj + 1242 0 obj << + /D [1232 0 R /XYZ 90 477.517 null] + >> endobj + 1243 0 obj << + /D [1232 0 R /XYZ 90 463.27 null] + >> endobj + 1244 0 obj << + /D [1232 0 R /XYZ 90 449.024 null] + >> endobj + 1245 0 obj << + /D [1232 0 R /XYZ 90 434.777 null] + >> endobj + 1246 0 obj << + /D [1232 0 R /XYZ 90 420.53 null] + >> endobj + 1247 0 obj << + /D [1232 0 R /XYZ 90 406.284 null] + >> endobj + 1248 0 obj << + /D [1232 0 R /XYZ 90 392.037 null] + >> endobj + 1249 0 obj << + /D [1232 0 R /XYZ 90 377.791 null] + >> endobj + 1250 0 obj << + /D [1232 0 R /XYZ 90 363.544 null] + >> endobj + 1251 0 obj << + /D [1232 0 R /XYZ 90 349.297 null] + >> endobj + 1252 0 obj << + /D [1232 0 R /XYZ 90 335.051 null] + >> endobj + 1253 0 obj << + /D [1232 0 R /XYZ 90 320.804 null] + >> endobj + 1254 0 obj << + /D [1232 0 R /XYZ 90 306.558 null] + >> endobj + 1255 0 obj << + /D [1232 0 R /XYZ 90 292.311 null] + >> endobj + 1256 0 obj << + /D [1232 0 R /XYZ 90 278.064 null] + >> endobj + 1257 0 obj << + /D [1232 0 R /XYZ 90 263.818 null] + >> endobj + 1258 0 obj << + /D [1232 0 R /XYZ 90 249.571 null] + >> endobj + 1259 0 obj << + /D [1232 0 R /XYZ 90 235.325 null] + >> endobj + 1260 0 obj << + /D [1232 0 R /XYZ 90 221.078 null] + >> endobj + 1261 0 obj << + /D [1232 0 R /XYZ 90 206.832 null] + >> endobj + 1262 0 obj << + /D [1232 0 R /XYZ 90 192.585 null] + >> endobj + 1263 0 obj << + /D [1232 0 R /XYZ 90 178.338 null] + >> endobj + 1264 0 obj << + /D [1232 0 R /XYZ 104.346 94.762 null] + >> endobj + 1231 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F14 463 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1270 0 obj << + /Length 3163 + /Filter /FlateDecode + >> + stream + x??ZY???~?_??'?qq???I???M?eW*?I^l?p(h?Y?THj??n4?C?h?U??B ???? ????-?q???????/Ll?,?? ??J?D???j?k?au?7???H????il?AA0?"YP??^?????????vWnlC?}[V7???O?\????_?~???????]p@??F?q??E????w?XA?? K?-?]??B ?????]??3?I?2A3????zG??zc?B?6/n??+ X???S"p???? + ??'??d?????W?4?/7?J@??.?q?????m???Z??N~;ay`?Tr??????T??Eu?"O?~???9????r\?? ?h??VeU+ ?????)?M]????? ???G??'???Hk?O?ws??~D"eq + 6??$?s?f?x + ^FGJ?d?!Pw???\?R??R ??omw[?h???1>???V?) "2??Xj???T?x,?b??c??E!???-?QFo,,?? QA???H???%\?D?J?w????!?>Q???????3??????:fB,tf? ?????:?J-?i??z?c?/`e?????/G/58?e^??????? ?????h1??b?Rp1H??????+ t??,N???~?????7~S?b?|??Z??A????}??MB????Q??u??-??l?KUN1 X2?? P`P(BCVg????tK?v??2.?????Rmw[???-n??l??G???????%?*?tX"0???Q?^???????e?4?;?.? + ???uH@??????\ + ^(??JE??+ ?8??8??? + ??????????Ve[?a????u}G?????t,???@??H?@?i?@c???(]]?4?#,???o???a?????U?yOS???'a??:3Z?????????RN????2???H?'w?+v?m?XB?'?3d????s$f>e?X;2m?-???g{?J?tq??7M??U?m}_M3??^??A??:o'f??d??+?Wp%c?Y`?????t@??1RZK?j?n???8e?$??ws?x????\j>?' ??y&??.M|?+ r??????#??+ 6L?v?????$(0T00S?MG?? |??0s" ?d???`????:Nert m??z)???sK?B??2&aw???t*b?????|???R??W ???72???w [X???=n????????>??&?o???i:5H?????1??~F???9N?????????rR,&i?c?"??|_?????{$+ ?Y 2/??v??9 ??v???1q????Z at F?,??????4u< m{[??+ ???=??_?s???iM???#yU??{p7??u????2?5~a*?;P??c???????T????Za???1?? ??L?3?????????????TM????e![p??%?aI??P????.?r??????Y???}??\?lq?waWjw'??5yZPW? :,8??o?+?d9V?m,|??q ? + ?W?,??)?/%????B?,???G?a??90n?m&5??%Z??? C????C<??Mzt?C?uM?r??B?FF????? ??????;C??_???????,|?+_???~vp87+ endstream + endobj + 1269 0 obj << + /Type /Page + /Contents 1270 0 R + /Resources 1268 0 R + /MediaBox [0 0 612 792] + /Parent 1193 0 R + /Annots [ 1266 0 R 1267 0 R ] + >> endobj + 1266 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [309.696 355.62 325.536 367.162] + /A << /S /GoTo /D (lstlisting.4.8) >> + >> endobj + 1267 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [288.21 191.762 294.578 204.327] + /A << /S /GoTo /D (Hfootnote.21) >> + >> endobj + 1271 0 obj << + /D [1269 0 R /XYZ 89 757 null] + >> endobj + 1265 0 obj << + /D [1269 0 R /XYZ 90 613.135 null] + >> endobj + 178 0 obj << + /D [1269 0 R /XYZ 90 420.161 null] + >> endobj + 1272 0 obj << + /D [1269 0 R /XYZ 90 349.694 null] + >> endobj + 1273 0 obj << + /D [1269 0 R /XYZ 90 329.77 null] + >> endobj + 1274 0 obj << + /D [1269 0 R /XYZ 90 315.523 null] + >> endobj + 1275 0 obj << + /D [1269 0 R /XYZ 90 275.393 null] + >> endobj + 1276 0 obj << + /D [1269 0 R /XYZ 90 254.386 null] + >> endobj + 1277 0 obj << + /D [1269 0 R /XYZ 90 225.683 null] + >> endobj + 1278 0 obj << + /D [1269 0 R /XYZ 90 180.766 null] + >> endobj + 1279 0 obj << + /D [1269 0 R /XYZ 90 152.063 null] + >> endobj + 1280 0 obj << + /D [1269 0 R /XYZ 90 119.138 null] + >> endobj + 1281 0 obj << + /D [1269 0 R /XYZ 104.346 94.762 null] + >> endobj + 1268 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F11 361 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1285 0 obj << + /Length 3060 + /Filter /FlateDecode + >> + stream + x??ZK??6???P?bM?I??Wn?-{????6????EA#?)R!???o7+ "??{}H?[]4xj?C???????8?7?u???n??i??n????e??Z??}???????0[??m??T??hG?M??B_&??F?W\?"????0?":O?????E?i?1jv???:u?c~?,qBk??y?"i? ??????o????/? + l???L_)?P????????~?_1??????&@ ?4 U????g??????k#??p?????h??.H&?_v?S?????8?q2????$???????v???N??Gn???O@?%M????N{K??????6>9!? 9?(L?,H?)??- + ???8[7%?????S]?eS???)???,???%6#???k?????/{?e=??r?,??? ??d?V?jp??N{}?/???F??? o?u??%F??? + ??0R?_???K/_??Fe^*n??*??K???[?aSRJA&?VM??t!s?'J?|v#???~?=WN?!???@??=?0??3????`?S?Jq??I??r???t?u??Dc?o?j ??Z6?j0F64???!?5??B ??/???D ?^bA?" ??R\?7?Ga?????ab??K?'>1`?l?j?z????^Ea?l??Wqx?m?5+ ??z"??9iv?3?h SIEd?h?^[*???v??g?t???????[??n?????5rl?W??Hp?&??? RIL?EbeU ??}?P??c_?.?? ?}f{xqt??&.-??, ?3G&:?G????' ??????K??K*?]8V?j!??/SC??o??g???????&????5????`?xg?we????-.Iqp?;???Y!?nz_N??g_?^???????}M?=?#"@??C?3/??*0CD??9!??m??B?`?\?????????5???????v?k??J;MY ,??????9?Q*qM?????$$?????B?w?,?bA???lr? j????+ ?????;?L?.,Sm??%???????? *????J?xl4 ?n???B.???)???uC#?pM2HzQ????? 3?:J?????`?+ r???d?#`p???r??????????|d??u?~? ?/Z!?jB"? ely?6??7T????pi??#?V$???WE + nGd???r7?? + endstream + endobj + 1284 0 obj << + /Type /Page + /Contents 1285 0 R + /Resources 1283 0 R + /MediaBox [0 0 612 792] + /Parent 1193 0 R + >> endobj + 1286 0 obj << + /D [1284 0 R /XYZ 89 757 null] + >> endobj + 1287 0 obj << + /D [1284 0 R /XYZ 90 726.045 null] + >> endobj + 1288 0 obj << + /D [1284 0 R /XYZ 90 701.95 null] + >> endobj + 1289 0 obj << + /D [1284 0 R /XYZ 90 670.691 null] + >> endobj + 1290 0 obj << + /D [1284 0 R /XYZ 90 615.595 null] + >> endobj + 1291 0 obj << + /D [1284 0 R /XYZ 90 596.328 null] + >> endobj + 1292 0 obj << + /D [1284 0 R /XYZ 90 553.113 null] + >> endobj + 1293 0 obj << + /D [1284 0 R /XYZ 90 521.928 null] + >> endobj + 1294 0 obj << + /D [1284 0 R /XYZ 90 502.661 null] + >> endobj + 1295 0 obj << + /D [1284 0 R /XYZ 90 471.439 null] + >> endobj + 1296 0 obj << + /D [1284 0 R /XYZ 90 440.216 null] + >> endobj + 1297 0 obj << + /D [1284 0 R /XYZ 90 408.957 null] + >> endobj + 1298 0 obj << + /D [1284 0 R /XYZ 90 389.69 null] + >> endobj + 1299 0 obj << + /D [1284 0 R /XYZ 90 370.46 null] + >> endobj + 1300 0 obj << + /D [1284 0 R /XYZ 90 339.237 null] + >> endobj + 1301 0 obj << + /D [1284 0 R /XYZ 90 307.978 null] + >> endobj + 182 0 obj << + /D [1284 0 R /XYZ 90 268.725 null] + >> endobj + 1283 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F30 348 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1304 0 obj << + /Length 1937 + /Filter /FlateDecode + >> + stream + x??XK??6??? |Y:?a?|???=?9??w/?*PuC?2??????A=???'?R)???/??5????|xy???????.e?l?:?t??R????~???'3????U?????&??,?c?0;??>=?0???????????????n?E???????????{???e????DR?(? + ?>?????K???*/??Q?Y%?)yZ?&"?2?#??yz%?Jk?Y?eg?\dqo?????G?B+ ?P)?>S??]Lc??D^???q?g?|?y?$???IFs4?+Q???m??^?2e?!0??????r*2yT:????GQ?????qt???]@???~????_BdY??????& ~? ? ? ? <?fxc????U0NXm???/??;???????&6?R?m??vp??` ??0^fP????'????S[?Mgz?GX??? ??8[??| +?5U?s??e?!o?`?V?\H?/?W????9?8?? &?(?:??C?!?_!}??`U???K?????????l?0RF??y??? PU?kW??p???*?????????C??^? + ??1 t???K?? +?f??)Wq gm~??U]??J  P??D?R?oz?'?+??0???????2N????)??;?RHz + ???????G?Eo????????V????w??Uy??????c??B???????{?K%?u????(%????A????aM??bg??9??y3 _M+ ? \X?T?b?%;[?R'7?-????)??????i????W ?R???%pQ?j????O4@???? ???@?Tc?=?? ??\????C?'2??/???e2v+ endstream + endobj + 1303 0 obj << + /Type /Page + /Contents 1304 0 R + /Resources 1302 0 R + /MediaBox [0 0 612 792] + /Parent 1306 0 R + /Annots [ 1282 0 R ] + >> endobj + 1282 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [246.582 624.156 262.901 635.698] + /A << /S /GoTo /D (section.B.2) >> + >> endobj + 1305 0 obj << + /D [1303 0 R /XYZ 89 757 null] + >> endobj + 186 0 obj << + /D [1303 0 R /XYZ 90 726.045 null] + >> endobj + 190 0 obj << + /D [1303 0 R /XYZ 90 609.546 null] + >> endobj + 1302 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1317 0 obj << + /Length 2952 + /Filter /FlateDecode + >> + stream + x?????F?}?Bo?`-n_<:?;N? ?n???8F@?-?0E??s(A?j??j`??'U???'2D?????1c*q??tA??+ ????DNl?,???????6$??C???+ ??\?I)??R???? b???^?b Da,?@??'Nj??K???7???!????V??e6???y??`n4v4????.??F??z??q2???Q???????Y?G?/??6D??2>?IjdM~??+ ,?r`?s`?g(`?"?)?@??'?-OmM?ak??P(x?27?? ?T?|f??4N?/!{H0??g?????7?=??H?R?H??q?@}?Y??>????)????R??$??$)??A{?{j????B?J=?$ ??~???:?1?|C??????j???@A?cAc???g???S??$?Q?ZA??? ???K>???> endobj + 1307 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [479.356 524.063 511.227 535.58] + /A << /S /GoTo /D (cite.SQT) >> + >> endobj + 1308 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [89.004 512.108 113.153 523.625] + /A << /S /GoTo /D (cite.SQT) >> + >> endobj + 1309 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [146.776 357.232 175.01 368.789] + /A << /S /GoTo /D (cite.MYERS1979) >> + >> endobj + 1310 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [178.945 357.232 203.094 368.789] + /A << /S /GoTo /D (cite.MYERS1979) >> + >> endobj + 1311 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [212.648 357.232 240.264 368.789] + /A << /S /GoTo /D (cite.ROPERS) >> + >> endobj + 1312 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [244.199 357.232 268.348 368.789] + /A << /S /GoTo /D (cite.ROPERS) >> + >> endobj + 1313 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [447.041 285.516 463.639 297.058] + /A << /S /GoTo /D (section.C.2) >> + >> endobj + 1314 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [292.506 206.415 308.347 217.957] + /A << /S /GoTo /D (lstlisting.5.1) >> + >> endobj + 1318 0 obj << + /D [1316 0 R /XYZ 89 757 null] + >> endobj + 194 0 obj << + /D [1316 0 R /XYZ 90 726.045 null] + >> endobj + 198 0 obj << + /D [1316 0 R /XYZ 90 465.284 null] + >> endobj + 202 0 obj << + /D [1316 0 R /XYZ 90 424.862 null] + >> endobj + 1319 0 obj << + /D [1316 0 R /XYZ 90 188.086 null] + >> endobj + 1320 0 obj << + /D [1316 0 R /XYZ 90 167.938 null] + >> endobj + 1321 0 obj << + /D [1316 0 R /XYZ 90 153.691 null] + >> endobj + 1322 0 obj << + /D [1316 0 R /XYZ 90 139.445 null] + >> endobj + 1323 0 obj << + /D [1316 0 R /XYZ 90 125.198 null] + >> endobj + 1324 0 obj << + /D [1316 0 R /XYZ 90 110.951 null] + >> endobj + 1325 0 obj << + /D [1316 0 R /XYZ 90 96.705 null] + >> endobj + 1315 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R /F20 335 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1341 0 obj << + /Length 2995 + /Filter /FlateDecode + >> + stream + x??ZY??F~?_!d_8??a7?+ H??"???t??R+JHYR??grVn??0?+ ?V?????S2?????8???E>?????k??e??.???????e"?x???2?oK&!/?{?9??)y}pbDr>??????G??i.:???G?????i????3?p?LP???% 0???[???bNnHC???F??%T??6???3(%?w?J|????N4??y??7?M?ikKcsfc??N?? ??Z?I??_j?o?x??+ /?x?/? ??K?'?%?P??+ ac=???e'e!?????w]/?m?J?Z3??????TZWtM??>?0??????G?[?b???)l{?E?}???~?L"#ac=?KQ????XUNj}#e?Xc????????v??6??Fk??9???E????7C/???-ie?$???n???]q?Z=??U??)?;=??`???? ?????UCo?b:?)D???A&>F?C]KF????hZ?+UE?sB????Btpv_n?? + ? e???????{]n{M??W?/y????h???AY9)??m????RH???1&3???P????H2bH?????,j??S??ku>dr~? DzF??VF?#??S=??z#D?? + ?n????^??;??w:o?(??#8???Uc y???r -G2?]?x????????????K:W?[v?@?dl{,uPD:? ??T?}Iu8??? *]j????h4G?+?BU?\M??y?|?Y%?r?}A?$c R!P??aum~??f?uG??t??X?n^? ???z/???m???U?;T???????P???? + Zq?u???f??#??By???Y m]T?b?R?U?L]????+?&??j?tN?,?q?z7?????i??Z5?d+ ????^;???3??HYt?;??h?B*b$B??$a-????Zco?geh??c??@????s??b?m??.(????gP?[? ??$B"z)?z?J?XT]#?????FA?????.?S?????????{;B }?!??!RSa?[????? ?> endobj + 1329 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [129.885 478.049 146.482 489.591] + /A << /S /GoTo /D (lstlisting.C.2) >> + >> endobj + 1330 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [122.136 442.183 138.734 453.725] + /A << /S /GoTo /D (figure.caption.47) >> + >> endobj + 1331 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [352.812 406.318 359.18 418.883] + /A << /S /GoTo /D (Hfootnote.22) >> + >> endobj + 1332 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [210.2 370.452 226.797 381.994] + /A << /S /GoTo /D (lstlisting.C.4) >> + >> endobj + 1333 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [304.417 370.452 321.014 381.994] + /A << /S /GoTo /D (lstlisting.C.3) >> + >> endobj + 1334 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [365.553 358.497 390.459 370.039] + /A << /S /GoTo /D (subsection.C.3.2) >> + >> endobj + 1335 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [397.735 346.542 421.885 358.084] + /A << /S /GoTo /D (subsection.5.2.3) >> + >> endobj + 1336 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [159.333 242.199 175.931 253.741] + /A << /S /GoTo /D (lstlisting.C.5) >> + >> endobj + 1342 0 obj << + /D [1340 0 R /XYZ 89 757 null] + >> endobj + 1343 0 obj << + /D [1340 0 R /XYZ 90 730.319 null] + >> endobj + 1344 0 obj << + /D [1340 0 R /XYZ 90 716.072 null] + >> endobj + 1345 0 obj << + /D [1340 0 R /XYZ 90 701.826 null] + >> endobj + 1346 0 obj << + /D [1340 0 R /XYZ 90 687.579 null] + >> endobj + 1347 0 obj << + /D [1340 0 R /XYZ 90 673.332 null] + >> endobj + 1348 0 obj << + /D [1340 0 R /XYZ 90 659.086 null] + >> endobj + 1349 0 obj << + /D [1340 0 R /XYZ 90 644.839 null] + >> endobj + 206 0 obj << + /D [1340 0 R /XYZ 90 593.874 null] + >> endobj + 210 0 obj << + /D [1340 0 R /XYZ 90 324.256 null] + >> endobj + 214 0 obj << + /D [1340 0 R /XYZ 90 208.85 null] + >> endobj + 1350 0 obj << + /D [1340 0 R /XYZ 104.346 94.762 null] + >> endobj + 1339 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1358 0 obj << + /Length 2616 + /Filter /FlateDecode + >> + stream + x??Y???6????????UQ_?v;M??$?Nw???!???h?YtH????(??KOA + H???J?E??????????bQ?u??????N?|??X??,Z??_$qVW????_?im????????? d??.?4?"?8?R2???X<.E?$????F9h??N??????Qu??W?@???z?f??/?B???+Y,?*??????=.? ??zP???W?-?h?)??AYX????z9dtz?????x??l?U-u?gj'i???????V1?{?????f?r?$mA?i?H{?ZT???????9*{&???.~\U???5??k+ ?? + ?????q + ??\l??$m tX?5?yg??;+3?Lxz?1????3Y?(c???+?!?=?!?,2?????{g?????5s???Q?^?8Uo???h??3?U?u??3??IexR??????W????? ?m??@? ???0?H^?? Y?????? \??Ir?N;??V9??????/?|?e8@?&I Ge??=`* 9ftT?s?????q???G?Do?6?$kx&???^P???t???D9i ?FY<{t???C??y??J?b)? ????? ???? #>??????v?aT??\@cC???I?x + {???zM?S??????Y?0????b??]?.??0?$?3??(??ozdWz[f6n?5{V6??????r? %"?????>4???^??z?2y?Q?do?@,????? `?*)????g??Z+ ]??a7w u?~?BJ??????v??./?4<_z?"CF ?{??4#%??????:I???Ez?B??~e?B?|?????o????N??M?o?X??z??YR????J7?&??u?|??K??j?I$M + ??????.??q^a?/(Z9k???Y??dX? + ??IR???')?8? + endstream + endobj + 1357 0 obj << + /Type /Page + /Contents 1358 0 R + /Resources 1356 0 R + /MediaBox [0 0 612 792] + /Parent 1306 0 R + /Annots [ 1337 0 R 1338 0 R ] + >> endobj + 1337 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [349.261 652.629 365.102 664.17] + /A << /S /GoTo /D (figure.caption.36) >> + >> endobj + 1338 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [262.613 497.211 278.453 508.753] + /A << /S /GoTo /D (section.3.2) >> + >> endobj + 1359 0 obj << + /D [1357 0 R /XYZ 89 757 null] + >> endobj + 218 0 obj << + /D [1357 0 R /XYZ 90 726.045 null] + >> endobj + 1360 0 obj << + /D [1357 0 R /XYZ 90 456.557 null] + >> endobj + 1361 0 obj << + /D [1357 0 R /XYZ 90 448.787 null] + >> endobj + 1362 0 obj << + /D [1357 0 R /XYZ 90 441.33 null] + >> endobj + 1363 0 obj << + /D [1357 0 R /XYZ 90 423.696 null] + >> endobj + 1364 0 obj << + /D [1357 0 R /XYZ 90 408.154 null] + >> endobj + 1365 0 obj << + /D [1357 0 R /XYZ 90 392.612 null] + >> endobj + 1366 0 obj << + /D [1357 0 R /XYZ 90 379.163 null] + >> endobj + 1367 0 obj << + /D [1357 0 R /XYZ 90 361.529 null] + >> endobj + 1368 0 obj << + /D [1357 0 R /XYZ 90 345.987 null] + >> endobj + 1369 0 obj << + /D [1357 0 R /XYZ 90 330.445 null] + >> endobj + 1370 0 obj << + /D [1357 0 R /XYZ 90 314.903 null] + >> endobj + 1371 0 obj << + /D [1357 0 R /XYZ 90 299.362 null] + >> endobj + 1372 0 obj << + /D [1357 0 R /XYZ 90 284.627 null] + >> endobj + 1373 0 obj << + /D [1357 0 R /XYZ 90 268.278 null] + >> endobj + 1374 0 obj << + /D [1357 0 R /XYZ 90 252.736 null] + >> endobj + 1375 0 obj << + /D [1357 0 R /XYZ 90 237.195 null] + >> endobj + 1356 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1380 0 obj << + /Length 3851 + /Filter /FlateDecode + >> + stream + x???????}?b?0???y?@D? CFKH??~??=;q????????#J?=??]?????&??q?6??={u??????~????~??M?~???j???]u.??~?????:3 ??(????[n?????_1?M{"?CkK?s?????????e ???'S?'$?{?KY??lt????r`??t?>??v#q?O??3??~?+ ??? M??S;???j?T??i*?k??;?E/??8?G????[??v??g???x???????????? '9ooM9?h?l?6u<8.uC\<\N??????????-[??a????TPJ???u + ?A??A* ????3evqD?B?W????h????A?#???. &???Ywn???????I? + Sue?Y?i3??p??a> s?f?s??~p9?R? ?(?????$w!+ ?I??????4?????b?????4?$8?`???`c?Bx??!.mDY?0?dU?????"?Dl?v ???????.?B-?A????L}"+ ?w?????-?Z?x?`.?? + #????+????Tw????B?R???]k 6??? t?1SB^??????(&?oe?U??Q + ?? ?5f?b ?m:?.?S=?.?,d~.+??I?$+ ???GX??6?Z?? R~?~??*q???nD?8?$? +?+?|???54???xy\?5ZS??za*??g?R6J%???|0???????6?s????{????F??=???D2??'?E? ???{???c?\????tV?????X??ky??$? + ??????P???????@?u??F?e?e?^????w!??,'? m?^?K??U??Xd!???2??\[????X?b?R#E?\?y??H9??????,?[ ?!?l ?3?NZ?S??l??? ??k7o?|-vT?]??????b ???0- g'?E?D??J?HI^w-Q??????e?r?o?????Z ????g?????,?J}???$???x?tB,??wq? ???{q:???y?2??]? PY???Pp?=??H?&?9'?.????: ?Z??)??A?????&!??8 ??4????#C?? ??ms??=7arf??c`? K#i????:\??] ?|?t?@m';?$??f??????&?M?N???r3)?IT?hQ8?`?,2=W] ?f-?7??q?O????,VLl#?????O????v+???W???n8???b?c? + ?^Y?bHT?G?????????#? jr?!C?}rH??I?+ ?`???]!???>f?(?s?#????w?@????\?9?[b?=\}??]?_?$?Q?;)0S%=?a?R???e'??6(??J &?????i????_?ou?z#????l?cy?zB????RO??1??P?> endobj + 1376 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [354.869 268.632 370.71 280.174] + /A << /S /GoTo /D (lstlisting.5.2) >> + >> endobj + 1377 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [321.851 256.677 337.691 268.219] + /A << /S /GoTo /D (lstlisting.5.3) >> + >> endobj + 1381 0 obj << + /D [1379 0 R /XYZ 89 757 null] + >> endobj + 222 0 obj << + /D [1379 0 R /XYZ 90 726.045 null] + >> endobj + 1382 0 obj << + /D [1379 0 R /XYZ 90 202.383 null] + >> endobj + 1383 0 obj << + /D [1379 0 R /XYZ 90 182.184 null] + >> endobj + 1384 0 obj << + /D [1379 0 R /XYZ 90 167.938 null] + >> endobj + 1385 0 obj << + /D [1379 0 R /XYZ 90 153.691 null] + >> endobj + 1386 0 obj << + /D [1379 0 R /XYZ 90 139.445 null] + >> endobj + 1387 0 obj << + /D [1379 0 R /XYZ 90 125.198 null] + >> endobj + 1388 0 obj << + /D [1379 0 R /XYZ 90 110.951 null] + >> endobj + 1389 0 obj << + /D [1379 0 R /XYZ 90 96.705 null] + >> endobj + 1378 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R /F20 335 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1393 0 obj << + /Length 2944 + /Filter /FlateDecode + >> + stream + x??\?o?F?????C????~?z?CR4H>45 + rA K??T?D? ??ovf??lY??$?e?"w??<~;3;/? + ^?|??????E`?J[??N;f?(???????????????|^?5??\?R ?t?????/????lr1Ws?u?M??????????????????} ?ix!???ym?????;^ ????3|q??&?? + ?????_xz????????Ko~n????-????6?zk&???+ g_=????f)+ &????@L|?j?l? ?yyt????G60n?????T2S!6k???P?k?????h?-?BK?u?wo?F?Q? ?'?? >? |?]?Q?K?}?Y U?f???>(hm9@;??,'T?\?|yr?J????CK??? ??iA???????9;???L???V?+?$k}>G?X?AF&}?t?tTD?A?s????s +?3???u???"/??d????%\6h0??t?/???|???? o??????u ?}??F?2????Cl??=?v?g?G????9>Rt?????,?? v????????}1jM??dZ?f-zWF??????????P&D2:??D?"???ee?Bap?????k&????3?o]b?x,???]?}?;X?m???? ????r?9P#h???X.n1A8?@&(Q?L?:??g???????M?M?l?i?r?M??Y???????M??w]KB????^?????m??h;?y?`??>???7dH6??l??Mk??%z??W??+??o + ?T????????Uv/6??2k??XWJ?n ??: + ??X?:[?cq?E?&+?[p?ZU4?? ?aWp ?X??v/?X?????F? + ???O??j?&?? in@?????ds?s?' y;???/U,.?u??#?VZ?U??N???eZWg?~?F\??s??/O??5??`6??M?i?H?N?????>T??Et????1W?Q]????H????D?u?^z??F??T??` + ??4)?P?? ???e??p?K?????M??@?????Q??M??L?&I?&N]}L?????Ty????R?3??p??? ?K?? + endstream + endobj + 1392 0 obj << + /Type /Page + /Contents 1393 0 R + /Resources 1391 0 R + /MediaBox [0 0 612 792] + /Parent 1306 0 R + >> endobj + 1394 0 obj << + /D [1392 0 R /XYZ 89 757 null] + >> endobj + 1395 0 obj << + /D [1392 0 R /XYZ 90 730.319 null] + >> endobj + 1396 0 obj << + /D [1392 0 R /XYZ 90 716.072 null] + >> endobj + 1397 0 obj << + /D [1392 0 R /XYZ 90 701.826 null] + >> endobj + 1398 0 obj << + /D [1392 0 R /XYZ 90 687.579 null] + >> endobj + 1399 0 obj << + /D [1392 0 R /XYZ 90 673.332 null] + >> endobj + 1400 0 obj << + /D [1392 0 R /XYZ 90 659.086 null] + >> endobj + 1401 0 obj << + /D [1392 0 R /XYZ 90 644.839 null] + >> endobj + 1402 0 obj << + /D [1392 0 R /XYZ 90 630.593 null] + >> endobj + 1403 0 obj << + /D [1392 0 R /XYZ 90 616.346 null] + >> endobj + 1404 0 obj << + /D [1392 0 R /XYZ 90 602.1 null] + >> endobj + 1405 0 obj << + /D [1392 0 R /XYZ 90 587.853 null] + >> endobj + 1406 0 obj << + /D [1392 0 R /XYZ 90 573.606 null] + >> endobj + 1407 0 obj << + /D [1392 0 R /XYZ 90 559.36 null] + >> endobj + 1408 0 obj << + /D [1392 0 R /XYZ 90 545.113 null] + >> endobj + 1409 0 obj << + /D [1392 0 R /XYZ 90 530.867 null] + >> endobj + 1410 0 obj << + /D [1392 0 R /XYZ 90 516.62 null] + >> endobj + 1411 0 obj << + /D [1392 0 R /XYZ 90 502.373 null] + >> endobj + 1412 0 obj << + /D [1392 0 R /XYZ 90 488.127 null] + >> endobj + 1413 0 obj << + /D [1392 0 R /XYZ 90 473.88 null] + >> endobj + 1414 0 obj << + /D [1392 0 R /XYZ 90 459.634 null] + >> endobj + 1415 0 obj << + /D [1392 0 R /XYZ 90 445.387 null] + >> endobj + 1390 0 obj << + /D [1392 0 R /XYZ 90 418.168 null] + >> endobj + 1416 0 obj << + /D [1392 0 R /XYZ 90 401.627 null] + >> endobj + 1417 0 obj << + /D [1392 0 R /XYZ 90 387.381 null] + >> endobj + 1418 0 obj << + /D [1392 0 R /XYZ 90 373.134 null] + >> endobj + 1419 0 obj << + /D [1392 0 R /XYZ 90 358.888 null] + >> endobj + 1420 0 obj << + /D [1392 0 R /XYZ 90 344.641 null] + >> endobj + 1421 0 obj << + /D [1392 0 R /XYZ 90 330.394 null] + >> endobj + 1422 0 obj << + /D [1392 0 R /XYZ 90 316.148 null] + >> endobj + 1423 0 obj << + /D [1392 0 R /XYZ 90 301.901 null] + >> endobj + 1424 0 obj << + /D [1392 0 R /XYZ 90 273.408 null] + >> endobj + 1425 0 obj << + /D [1392 0 R /XYZ 90 259.161 null] + >> endobj + 1426 0 obj << + /D [1392 0 R /XYZ 90 230.668 null] + >> endobj + 1427 0 obj << + /D [1392 0 R /XYZ 90 216.422 null] + >> endobj + 1428 0 obj << + /D [1392 0 R /XYZ 90 202.175 null] + >> endobj + 1429 0 obj << + /D [1392 0 R /XYZ 90 187.928 null] + >> endobj + 1430 0 obj << + /D [1392 0 R /XYZ 90 173.682 null] + >> endobj + 1431 0 obj << + /D [1392 0 R /XYZ 90 159.435 null] + >> endobj + 1432 0 obj << + /D [1392 0 R /XYZ 90 145.189 null] + >> endobj + 1433 0 obj << + /D [1392 0 R /XYZ 90 130.942 null] + >> endobj + 1391 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1441 0 obj << + /Length 3469 + /Filter /FlateDecode + >> + stream + x??k?????? + ?E-?V$R??-?\.???4??K.h???????>????(?{????"?E$??p8?g,6?`?????7_|??E???J??E,?(?.???????`??v???????Gh? ?<]0x??W\?|q??g]??j?sk?v??W?nCx?x}???????7?? ??`?????dQ47??,J??\?????F5?Hi(???7? ??I??A?x'???@@??????k?y?-8t\??k?#???j?????R??? ?????4???Q?????X???c;????v?bj???????a??E??a??q?;9???QK?c?????@??????h?}4E?tG??X??Y+ ?$?Vv???qj?2???6???@]%2 o??-;OxJR2???J?+?+ endstream + endobj + 1440 0 obj << + /Type /Page + /Contents 1441 0 R + /Resources 1439 0 R + /MediaBox [0 0 612 792] + /Parent 1452 0 R + /Annots [ 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R ] + >> endobj + 1434 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [317.913 586.537 333.753 598.078] + /A << /S /GoTo /D (lstlisting.5.4) >> + >> endobj + 1435 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [295.143 526.761 319.292 538.303] + /A << /S /GoTo /D (figure.caption.31) >> + >> endobj + 1436 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [424.201 490.895 448.35 502.437] + /A << /S /GoTo /D (subsection.5.1.1) >> + >> endobj + 1437 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [444.998 200.523 464.057 212.065] + /A << /S /GoTo /D (cite.DEJAGNU) >> + >> endobj + 1438 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [467.603 200.523 491.753 212.065] + /A << /S /GoTo /D (cite.DEJAGNU) >> + >> endobj + 1442 0 obj << + /D [1440 0 R /XYZ 89 757 null] + >> endobj + 1443 0 obj << + /D [1440 0 R /XYZ 90 475.208 null] + >> endobj + 1444 0 obj << + /D [1440 0 R /XYZ 90 453.242 null] + >> endobj + 1445 0 obj << + /D [1440 0 R /XYZ 90 438.995 null] + >> endobj + 1446 0 obj << + /D [1440 0 R /XYZ 90 424.749 null] + >> endobj + 1447 0 obj << + /D [1440 0 R /XYZ 90 410.502 null] + >> endobj + 1448 0 obj << + /D [1440 0 R /XYZ 90 396.256 null] + >> endobj + 1449 0 obj << + /D [1440 0 R /XYZ 90 382.009 null] + >> endobj + 1450 0 obj << + /D [1440 0 R /XYZ 90 367.763 null] + >> endobj + 1451 0 obj << + /D [1440 0 R /XYZ 90 353.516 null] + >> endobj + 226 0 obj << + /D [1440 0 R /XYZ 90 310.536 null] + >> endobj + 1439 0 obj << + /Font << /F21 332 0 R /F31 350 0 R /F19 498 0 R /F20 335 0 R /F30 348 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1463 0 obj << + /Length 3663 + /Filter /FlateDecode + >> + stream + x??ZK????????m?-?+ %?M?>????~?+ ????r?.&????+ ?F#?%i?,??!??Kw?%?:h@?(]}?$??5F?G??^???u0W+??I?~???&???&?+?&?z????j?#+ ?I!????Aq???K?6?M????0??)?P?????S???? G??$r????:J-s??????GZBc???5???Y?e?'??w?fX???/???&???L??$-?????m?????{i???????6\?!???``????X??CA%??{?[??!2)z??x????h?`?????n???w??F?9?&K??w?3??? ?????????,+a????]?E?3??^.m?f?l ?DC?G?4F??(MQ?rj????z?Nw???K? ???S??"???2??l???a?:?T???4$+?=?)5?+v?(-????ONA?$?w??????Os? ?yTg9????mn??vE????v???%?Sn????Jv,?I?(|-????\?)?mJ?K?k????P?|I?GY?e Yq+N4???5???S?|??4?z??.-???&r?D??jm?c ?\W???L?1?u?,'??|'?V??$?L????"??}?'o?bl??)?'?u??w??8 ?????Njxk5??VarG???0???3G\??Ra??7V?,???$[?&?d/0~?+ :????????_F???????y*???c??q?"?? ?oe??"? 3;?;?b ??v??m?j?x??DA????_?M?i?5 ?+ 7V?????`????1?M??L&?vD@{?V=2M???h??kz?O?T???????N??@?t???|2s??"M???F??T?X?( ???Q??O-?Xyy?sX??vjj.J????/2x;?Ej&????????,2??[e~?W????B?,W???! ?J@G??6e!y}?1????,\T??Cve??????C,u?4J??????????`???=???EVD6SH?]~?????p??????Y{??A???&??]7?[??ry{? ???????~?d???v??(??q?????.9 + endstream + endobj + 1462 0 obj << + /Type /Page + /Contents 1463 0 R + /Resources 1461 0 R + /MediaBox [0 0 612 792] + /Parent 1452 0 R + /Annots [ 1454 0 R 1455 0 R 1456 0 R ] + >> endobj + 1454 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [185.214 409.899 201.812 421.441] + /A << /S /GoTo /D (section.C.5) >> + >> endobj + 1455 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [431.872 397.944 438.24 410.509] + /A << /S /GoTo /D (Hfootnote.23) >> + >> endobj + 1456 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [197.476 258.394 214.074 269.936] + /A << /S /GoTo /D (lstlisting.C.1) >> + >> endobj + 1464 0 obj << + /D [1462 0 R /XYZ 89 757 null] + >> endobj + 230 0 obj << + /D [1462 0 R /XYZ 90 177.83 null] + >> endobj + 1465 0 obj << + /D [1462 0 R /XYZ 104.346 94.762 null] + >> endobj + 1461 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F31 350 0 R /F30 348 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1477 0 obj << + /Length 3147 + /Filter /FlateDecode + >> + stream + x??Z?????~??6+ {.??R|????????\+??+?!_??T: + ????/W?]?????Ba7?L??q??d??\??%????n?q??v?k33:FY?~???Et|?s?0?V?GQIeZ?b?8T?sEQ??-?rYT?Q??o7??y?6??;???D???a??2???]?c?i?=? + ?+n??b?m??,?'??&X ??*?M+?x???[????4K????4??'?, ?4????????3,????=?U??5SDk??????0RS?????,)(?E?&:Lmv???\3 d??4?? ?o????7?c5FS?u??~N%q+ ?????mI??!?=?J8?????'(7?j^{?kB^?????c??t??~h??? ????u? ??n??K?I??r???sd#?QM.ip#?????B%?]?'$6?????egCY? 0; ?Z+ ??'y?9I???? + ?l`???B8?$?%c????+ ????B???{????m??P????.6?????6???v?NIr~??@;?????+??J???> endobj + 1457 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [391.575 627.134 423.864 638.675] + /A << /S /GoTo /D (cite.BOEHM) >> + >> endobj + 1458 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [429.072 627.134 453.222 638.675] + /A << /S /GoTo /D (cite.BOEHM) >> + >> endobj + 1459 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [137.731 579.313 237.028 590.855] + /A << /S /GoTo /D (cite.LLVMGC) >> + >> endobj + 1460 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [240.575 579.313 264.725 590.855] + /A << /S /GoTo /D (cite.LLVMGC) >> + >> endobj + 1467 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [107.016 489.066 143.728 500.608] + /A << /S /GoTo /D (cite.LLVM:PASSES) >> + >> endobj + 1468 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [147.275 489.066 171.425 500.608] + /A << /S /GoTo /D (cite.LLVM:PASSES) >> + >> endobj + 1469 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [307.132 337.677 322.973 349.219] + /A << /S /GoTo /D (lstlisting.5.5) >> + >> endobj + 1470 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [362.276 325.685 378.117 337.263] + /A << /S /GoTo /D (lstlisting.5.6) >> + >> endobj + 1473 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [371.751 208.117 391.756 225.651] + /A << /S /GoTo /D (cite.RBPG) >> + >> endobj + 1474 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [395.303 208.117 419.452 225.651] + /A << /S /GoTo /D (cite.RBPG) >> + >> endobj + 1478 0 obj << + /D [1476 0 R /XYZ 89 757 null] + >> endobj + 234 0 obj << + /D [1476 0 R /XYZ 90 726.045 null] + >> endobj + 238 0 obj << + /D [1476 0 R /XYZ 90 473.051 null] + >> endobj + 1479 0 obj << + /D [1476 0 R /XYZ 90 308.202 null] + >> endobj + 1480 0 obj << + /D [1476 0 R /XYZ 90 288.459 null] + >> endobj + 1481 0 obj << + /D [1476 0 R /XYZ 90 274.212 null] + >> endobj + 1482 0 obj << + /D [1476 0 R /XYZ 90 259.966 null] + >> endobj + 1483 0 obj << + /D [1476 0 R /XYZ 90 228.324 null] + >> endobj + 1484 0 obj << + /D [1476 0 R /XYZ 90 210.678 null] + >> endobj + 1485 0 obj << + /D [1476 0 R /XYZ 90 196.431 null] + >> endobj + 1486 0 obj << + /D [1476 0 R /XYZ 90 182.184 null] + >> endobj + 1487 0 obj << + /D [1476 0 R /XYZ 90 167.938 null] + >> endobj + 1488 0 obj << + /D [1476 0 R /XYZ 90 153.691 null] + >> endobj + 1489 0 obj << + /D [1476 0 R /XYZ 90 139.445 null] + >> endobj + 1490 0 obj << + /D [1476 0 R /XYZ 90 125.198 null] + >> endobj + 1491 0 obj << + /D [1476 0 R /XYZ 90 110.951 null] + >> endobj + 1492 0 obj << + /D [1476 0 R /XYZ 90 96.705 null] + >> endobj + 1475 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R /F20 335 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1507 0 obj << + /Length 3250 + /Filter /FlateDecode + >> + stream + x??ZK???????!8?E??"?????`??$???H??,E*$?? ??WUM%k?F,d}aWW7????UEF??,?}w??????*?ea???]?fY4KL:????????M?./?*I?o??-?????????x5??;??3?\???U?Bg_W?M%\u???Qf???w?????;??8???.m??|??NX ??????Y?L?aX??H/?????T???y??j?_?????????I&L e? ?OyT??4???=?5??????h????????+ ?wy?C??1??6Q?-???U??o?~??????}[???6_`|)??????????? G?e???$?H?-IDB???G(?E+?|??M=?????nW??2?????E???2??/Unwm???? ??~??R?@K? ?e????l???x??G)?'?-????????mi\????c??t?+ D[?W????%??,?Zh???9?? ?b??9vG?+???2?NT:??@k[????L?%?O?1R????*bz??W ??? QE??u???MV????#???_?????x-]j?H??}???EXs??E??????p???????Aa???????`??x&?\@{?jX?? ?????I?9???m? ?<0??&?????????E?G?1qVI??]????4?mt,?Z?????KK??&?y?4??&%????OET/?$?N%@q65?B?jX? c?Wz?M?0??*K-?>?T??r^? U??I????)?uZ???_f?? h?PH??HC?p?NCw??D`??CH??N??K?????! ?????f?? T? ?s?T?$?f??7????3a??"??t?????4m????@??!?h?:\=,v(q??????2r??~????T??T??????x???CD?e?pp??I??mE??q??7???O???D???<>?F?5T?z? ????K????)]?)?9?8Dd?( + ???9,?"?H? ? ??c?o}???N???#LmKd?>???? ()?H?????G  m????o}?51?W??F?Z?-?g??`???V??T???v {&?????F?v?L?d >/?I????U30???e??M?,?E?.???SU?]??I???[QL??b?!C?=????|`m???M??M!H%???A?+ ?E????@? ??i??fz?,~+?-^ ????,4?~4???oW=???%l??(?b~??0 ??????16??'?RQ??+????vG???x???5-]????J?c9???????c????? ?g? + endstream + endobj + 1506 0 obj << + /Type /Page + /Contents 1507 0 R + /Resources 1505 0 R + /MediaBox [0 0 612 792] + /Parent 1452 0 R + /Group 839 0 R + /Annots [ 1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R ] + >> endobj + 1496 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [429.231 478.562 462.466 490.104] + /A << /S /GoTo /D (cite.KLD) >> + >> endobj + 1497 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [466.276 478.562 490.425 490.104] + /A << /S /GoTo /D (cite.KLD) >> + >> endobj + 1498 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [147.831 139.061 179.084 150.603] + /A << /S /GoTo /D (cite.REFACT) >> + >> endobj + 1499 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [183.557 139.061 207.706 150.603] + /A << /S /GoTo /D (cite.REFACT) >> + >> endobj + 1500 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [250.303 139.061 266.143 150.603] + /A << /S /GoTo /D (figure.caption.37) >> + >> endobj + 1501 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [433.725 103.196 469.271 114.737] + /A << /S /GoTo /D (cite.SMELLS) >> + >> endobj + 1502 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [472.883 103.196 497.033 114.737] + /A << /S /GoTo /D (cite.SMELLS) >> + >> endobj + 1503 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [263.63 91.24 279.471 102.782] + /A << /S /GoTo /D (figure.caption.38) >> + >> endobj + 1508 0 obj << + /D [1506 0 R /XYZ 89 757 null] + >> endobj + 1509 0 obj << + /D [1506 0 R /XYZ 90 730.319 null] + >> endobj + 1510 0 obj << + /D [1506 0 R /XYZ 90 716.072 null] + >> endobj + 1511 0 obj << + /D [1506 0 R /XYZ 90 701.826 null] + >> endobj + 1512 0 obj << + /D [1506 0 R /XYZ 90 687.579 null] + >> endobj + 1513 0 obj << + /D [1506 0 R /XYZ 90 673.332 null] + >> endobj + 1514 0 obj << + /D [1506 0 R /XYZ 90 659.086 null] + >> endobj + 1515 0 obj << + /D [1506 0 R /XYZ 90 644.839 null] + >> endobj + 1516 0 obj << + /D [1506 0 R /XYZ 90 630.593 null] + >> endobj + 1517 0 obj << + /D [1506 0 R /XYZ 90 616.346 null] + >> endobj + 1518 0 obj << + /D [1506 0 R /XYZ 90 602.1 null] + >> endobj + 1519 0 obj << + /D [1506 0 R /XYZ 90 329.505 null] + >> endobj + 1505 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R /F19 498 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1531 0 obj << + /Length 1836 + /Filter /FlateDecode + >> + stream + x??XO?????S?Vyf?H%Y?5??M3?4mw?C?-qW|??????/@?^{?7?N?@?@PY?e?6o6o?????i?q?D????:????q??+*???"???????y}??????;M ?x|???l?#??x?K???'^????N ??,0?? + t( ?u?h???H??#???????gN? o9?????^??\?t^???\b&R? ???$l????F??B?$??kk???n?f?S V??D??Y??/??h!?rWt???X?????eK??T4??P??'??y? ??lK????f*???U?PG\?shJ?b?? + 0??c?c?R,?_?A??_??I?`?A?????A???4b??p??h???n?>?#"T?e?e5??J?0?Qa?D??+K@?????n??V?XH~??(~s??????B# ????????e9?+?'r? f? ?????H`???h??? ?e? ??]?N???rP??}.??h~8???,???j??wu?-?=??R???~?y???z????Tb> endobj + 1504 0 obj << + /Type /XObject + /Subtype /Image + /Width 2300 + /Height 2168 + /BitsPerComponent 8 + /ColorSpace /DeviceRGB + /SMask 1533 0 R + /Length 87446 + /Filter /FlateDecode + >> + stream + x??? ?T???`?]Q??;??D?PQWw hP#?W.rU?}????1?A01I????2??&Q??Q n???jnQ????>{?O??Ja?9????????t?:?+ ?I '@m?f??+ 3???c????&?WW??+ ?y????bxP2????d^I?/e^?=d?Y? + 1??t???!^6?i ??*????d???>?/???Z???C?gS??-A?t}+ 9?+  ?+ ??? ????1??I?+ ??/?i?1?????)o???2? ?g^O?}????i?6m???+ 3?7??i??5????/?l?f??j??I#f??P???u??????A????l?N_}??B?X??}??c??????F?_4????????B?+ ?+ 3?=?M?z??%3??j??? ?{??E?n?????w???????T???j??I?|???63`;?~???fy????Q?P?U??N:???e?M???f????k??j???????nY?K?b?????/? ??~??[ ?????}??? + ??7??sB??W????J???P2???k??Q%~d^?+ ?F???y)%? ?>|??? ??3?y)?+ ?9g???_?T?! 5|? ?+ ??+ (?[??b?1*j"???????????????????gg??????"S???{??~??+?+ ?*??????? + @.?{??<+ ?y4????????????y-?y!?+ X=???b?!+ ??? + ?+ ?Mc+ ???7&+ c+ ? + 2?L? + ?"???1+ P?{~c+ ??&c+ + + u?},??????K,q??C?i^???{???M?d^??[????????g?57???????a2/+ ????????&?????]w?L[???_|1??g&^t????e???d^??~y?1l??????y???R???k??????y??O?>|P?vm3????G?a??y??d^?Q?{????u???????K?E#????;???]?_>????9???W^?)g^<0.?0v????W???K)%?B??H?r??????? ????j?E???O??{?|?r????;????t??Zm>? 6?*??y?v??[n=f??a??o?{?M???/6?m?-?????1??????$6?z????u??_???Qa!y???|???y!????????o?~???y??d^2/???K??d^2?4?G?5"[?z??^???H??_?nV??????????????ru?y???w?l?"???v])??????lf?6mZ??W?h?|???! ????,K??????i?>???Yg,?2?Tv?5{????y?5W*r + ????????u?E???y!?*{????A?~???d^i?'??;j??|????e^2/UG???Yc?}?n?e?q?y??d^2?z??????Vw?M?????????u? 'e????jv?>??_ol?a????????O???{?9??>?g??z?5V???t??i??Kk?y?????y??s??o?????2???g??igENy.?_? ?????? V2/%?B???N=uH1sP?vmw?m???1g??_?vP?<3q???W\1|?}?[t?i?WE??K?%??}??d^2/???+????1?Eo???:9???c??????w?a?R??{????X??????|~?i^}|3g?-x?bN?*??D2??????%?b??-?{??????2?W_?????e9lr??gie^J????,5w?%???Tw?^/????_??~?/????K?U???o???;S??>p?N???y??d^2?T??Cw?_$0?s^w????\e??J???W?9r????~?i???w*???J??????]Y???m????'f???}:??o,?2?TL?u?-???o[?? + O?&??y)?2??T??xu??????)? ??pZ??>3d^aW???_q?=??p?I_|??W{???=????_??~?r3g??I?F^~???^|q???)??????????G?Tx??f?-???????z????????&'Nq???????f^_=???~{???M?|R?+?>e?i?<>lB?????????.liW]??#Y??????/?u}??O?=q???a@&L8?????:??G???7??N?~:???.?>????????}?? ????????o{?????~?%? ???1?u?[I?W?=??0|w?3 o?K??v??V??????^+ l? + _{??????w&V????J;??k??c??9??!??????o?|wI?W???yS??{?3?0????O\Q\X?u?Z?]BVZi?????g+???g????ye>?0t2/G]+ sk??0l???????=???:h??+????/?8?? JC??P????????Q???y?Zu??w?=t???????????Y???_b?????????+ ?^{mS?on?64?/?4??n?N?????vg?~??g????p???I?ydB????-6?????????????%?j?u.??z????l?Q?O??u??????w??????y?????K??fV]?????? ?|4%?Q????p?>????{n]??????8ch$??i???>??????????\???????_~?ZHt?????~?i??qGDN&?h????7?\????????Z?o???3?0,???f?3_????c\?>:!???????w+??t???y????<,??1_??W???X???W??+??????)??N9w??(x?U????g?.>q??m? ?^2/???+? + ???&W??N?:}l???K????k?K??[???k?y?p?I????c????n??????5U???c??W^yl??+L?9????[u??????]e^??+ ?m???G?~??|?5^5?K??????????}?!?? _?5?X1????????9r)?????!? + _?R_???k^?1??+|?s^H?$l??4?y???????j?n?mi?)??y??R?O>?7????R?g??c????\??3?a??o?I?v??O?e^??y?[l??.>????_F^t????????u?_ + ??????Fdx???????Q???y ????T S?O??+??HS??Vu?&[?^???g???????5ai???2???k?u?+??P? ????????]??3??????>?t??/_??7?????y??~???a????`??? ??????7?????y!?*???w??q?:z??o???R?%?l???\?-?*??`U??{o[??Z?h??[?f???_?S?a??b?g^0?,w??Bg?yP?_F??_={? ??r?"?W?;???o??W?u??????JY?r?-??W$????e?.c?T???{S3d??v???+??w?+??y??d^?U?????7?*??y??? ?d^?,???+??????1??>??????j??d????????#??xQ???C??C?????????#r5?V?Z?>?>k?s+ ???Z.s?M???????t??????r? + ??d^?[?Te?aW>??_???[O ??x|??m?jw?+5? + ???=????~?6???'????y%W L??"????\????Z??_????c??3??6mZU;C???k?e^?????>???r?^??w???v???!*)?Zw?UC?_?Qa??tY>??6i??+r/?V?Z????_?z{$??w?"3??W_a??????????@?\{??????m?????P?W??#??L?|RX?E???O????_|1+?v??~?????N?@??5?O???2??7_???6??j??K?s ?|K???W??-???????????N"???y?{?w?Q?0C????7???#??y9??[[i?e#?:??=2g^a{?v??9s??S?x +??y??d^?_?s??;?? ???k7?????7?d^??'_??? [?3?0M???j'P???~zb??jN?5k???"??:%e^?^{b???zU?%????k??????>??I????S?#3=z?Q?R???+~?x5}?v?j? ???)SN?M?u?????r?-?T?~% ?y??x?[W,:??{???d^??0'rYl?2?d+?? + ??????"???E&??N;?????RK?,?C??_??l?Wd}?+ ??9?????????X??-???5?\)?SD2??7^??????c??]}?_???l?W???3 ?k???W????.?????m???????y?o?;?*?B???9L]?g??? + >|P????75?????-C?u? ?d80?F???????H_i????W ?v=?P?-????S#ic???6?l??????d^???>?lf?K]???  ???????#=`??;"????o?????2?B??~y???K?C???r@??+????W???????[???S?fu????y<????_? ?TRd ?CI/}?g3?l??w?=T?+???&?~8?Y??yvd$?j??e??Wf?N*? + +???}???|?????Xc?R3??+??!? ???K?%??y?Vg?14??s??? + ????'??H??W1?? 6???K?GE???????1?q?M?cx?y?f?t?????'_GC?Eo?r?a??9V?.??|??K? ?????ir|?sw?_??/fE???-[???N>y?bMD?a???%e^?; ??3>[?9?9[????n????????;????"?M??????????6??+???G'D???W_y?W?k?U?A?~????/?????lN=g^?:uh\???{o[?8?h????.+?l7?pR?I?{?????w???N???}??)?OL?wM????"l???^[?#?0?y???d^G5P?%??yYi7??+??O^??u?b??VX?O??????V[?\k?????s?xE??W????????a??]:e?ia6?_??Y?"??:h?????i??j?7?????w ??|'~???-??R?zu?????a???+?{l??+?]w????>?????s?[o?????=???1Y?/2/???kQ}?A?{y???e?e????????w??O?vV? ???#????o?????~T????| E?G?q?? ???aK?E???]0?Zj????????.5?*?P?? ?WR?????U????2\.R?~???0?|?-??????W^??:qU???=???]w???"? s???????}wjg^W]5???{?U?+x???3?f??Q1??W??n????|?9W??(?????<9?+ ??;??Z??Tz??|???/W\s??G??Y?n?}B?m?z???r'?S????B??????p??Kz?-l??k?????}?6-u^???'?h????vBNk?_wU~?1c?d????{?r?5d?? ?????^???L???C? ???y?]V?X??n;g????\?????t3???y??(??+d???a:?????kG???? ???g?4ix?7=lX?\nz?????y??(2?????? + ?i?=ZW??[?n?? ?:/???+?o??:??????????O?z ???$?*}?nB?5gN?/?>{s?K5n?0?4?q??=?d?@????J???v:???~??:?C??W?U?????K??+?????Sg???9~??-?|??0????;????} ?????m?????p/???J8GqX???E????????o/J?H?n!??k?????R?v^g?5 ??x??_V????a???*??K?.6n|.???/y$?O???????%?u??a????3}YUr????/^?k?9sL?e+??SYz????]??+?X???_?p??6mZ&\???^??t^:/J??*kR?|?*??????????????5jP^gn?q???7k???!??+$?$G?8:?=u??u??U??(?'?<5hP??????k??u^:/+ [?????x??n?????????;?i?F??1&?d*q??Pi5i???w???9??L??c?v6d?*???H>???W??s????p?;t?????ie?v???T???e??&O>??)?Wk%w^e? + [?J??a? L8/???=3]?U? g??z??p????l???U?T?v& ?????y??t^?r?U~??_???txZ????{??t^e???{?h??I??7n?p??\?????\&ox?????V}??'??c??e???c???7???P???_??S?|K????q?t^:/+ ?o?&?&?f???????a8?g???|^??^[????g~/??.?0???+ ????O?5??????????d:?^U:?m?????%S~?xbz?#^???q???u?r?#? 3?]p9??:/??? ?W?#a?_?v?#?\w????p??a?v??=w?k?-?????????/?F|?????Vv????5"?k??|?????zW??-Z??[o??.?wu???t^v_:/??'???{???s???O'R???0?K[1u^=t???/l???[???z???^ye???x????r?u???4=?[7???????3?\???=?:/?+ ????u^:/+ e?Z4?????K ??[?g????t??3[?nY?????????}?Z?????????????????s??f?X&+ ??c+ ?*d4+ >9?X+ ?!?[?y???+ ?@?jU??z??wo???a????r???~z?%o?5?????vZ?V?vl??n??U + ?O?J?j?????6?GXD#G?r?=???????x9x??l,8???L04/@?"I? ??H???4/@?*%>???On?E?v?v???7??[????y?WI8n???/?SOM-?}???;????)??? 3?]??????????F$???-w???'?z? + +A?]p????y?u?e??UM?5???1??????t? ??y?~X?y??@?*!?|rj?n???m????7?\??5???A?Y?5??)S?$??]d-???y???~????{D???-???????d????|(????o?4?'r????o9??????????L?????e??Q?6%i^??4/@?????+??.r\O~???E6???y????a??K0J??/?&r??????eyY8??y?Z5)~e?Z?t? + ???W?+? 7??ry???&????????#4/?h^????ft???????_?2?????A????c7X???h^%?s??h?t??'???????????;??????}?n?? ?g???yi^????b???????z?o?Y??E?\f????okO:??g ????<'~?5?8??#?r???????o^??_??)?????m^aN?i?*8??_<????Y=?Y???+ 5lX7LQ?????O??????????qgw??g??5fL?,&0U?T?o?????? ??\D3f k?f?B#??5o?d????????y9%u?v?m??U?????x???????????R>P???O?2???o ???3??WoK????W~=??n?]/??4/j^?4? + eX3??DB???,??<8??K????y?W???F??G??$??V??O?U??=?\??ok?|??u??~?????y?p??????#O??K???zkN??GV?T)Y????J??D?q??c?????N?E&?ai??i6????/^|?W_-????????????? g?qD???n??u?q92n??A??3???[????Gn??????>??u??4/?h^???k?Is??f{?????????K?^?;?m??-???yi^????"???fy?jU???:uj??o?n???Y?)?t9??:h?d????4/???v?.??8|??v??w???]??????$;???E?K?4?|y??}"_?0O.??????;??????s?K??+?/?{o^?7??[??s?/?0??O?O?_ydb??? ??M?80Y??\?+?I???&????VB??? NH?X???|?? ???$???lI?3???cc????W?.[vm:C?{4????^ ?????W]u???K???E?K???Uq?7oLd??o???_& o??'??ld???;?????yi^??z??*UR_?|?]????????[~?????a??????K?????h^%a??GF???_??G???T2'O???N:4_?b????????#????oW???V?????h^ ?????Gl??a??<0>?]???9??n?y??e??+G??kz}???h^??4/@????:?{?1%???v??q??37???[??q?a??????K??k?[?????Hy???i^??d?J?y????????&r]???U?&???t?0?U?P??w???_???e???DO~??a?g????}??9sF??S??n???+V??~c?O}???v??I?u??\?V;?u?>}?\|q???'??! ?lc???? 3o???^?:x??>5?_?N????t??={r?'???pg??4???~???nH??5???????9???]?m??i????6??m?aF?d???$??l|??1b??s?=?_???F?W^??????|r??H??u? ?g??????/,??S/|????o?Y?vJxw??h?z?f?? ?u????x??"?A?????pJ??|??EW ?3|???{??l?e???k??^??t???KO}??????'2????????%??_?{????a?v??:????'k^?????L?+ ??Lw??{? + s??jQ?F???v?? ?????'??????y?WJ????????????x?????????????8??n?+W??????Y??y????.??N??T????6W??6???????}?h????nO?????z?<$?{?_?N??Sso^a???&'?????&???+|b?D??>?k^??*???h????%???=v?;4?b??c?fE???y?????????????=?\???c?5?"?C???,~????[e?4?W??? j??y?'&N?M? + 8??6???D??_+r?s?????f??;nih^?????S?f? ?.???????H?*!a??????|0??~e?;?n[????W??EF???|r?d??L?y??????3????D?4???{4K? ??[??;?!???1?*U?????Y?.??y?????????h?UG?t??o??j?r?4????3*?)V????????y?Ssl^ai?s?1Y???U??|?y??V?? ????.???x????e??yp?i?Rn:?W??i^K?????i^???T???????????yN~????????????d????V?i?K?w???0?c?=0?????u??8q`?/?K?}?G?????!=??????h^??x??g?]-?*??F?c.Ubc&O?u??(x5???=|??'f?$?YC??*'?????m^??O??k??*3?=p?q? ?g???LI? ?+?????Km?k^???O?}?f\?a??6G<9m??u?Gl??u?Q???&z}v?+ "?u?4?~???Y?bb????{?????\o^?GV?*V????????,?E?Tp??|! ?(???WO.??+,?w????Q?????F?>=//A???4/?6?`|3K???dz???K???<\?A????????0?&l?E?v???? ??????9?????"+/ ?W?"?)?) ???E?2?????????????U#????WM?Z?J:G?|?^?W.?\|?6mv?xN????????vj???+U???>???y??g??W???,r?2??v?y?"?s)???r?????1l????????_|???#????????W??;????[???????f??????G ?6??K??{??Ya?8fL???#???4?t?D?4???K/???/[??Mz?>l???^{m?o?e|??p??g?b?j???????0?H????m???e???>?b:7LvM??a4????;6???j????_|???'R?????]?????-Lq?|r????/3LN-?*L??'??1??,?2?.t??o???Z5??g?u?eg?yd?? ??x(???^xb:? + ?:cy^?W???/iX?Z?|??OO o\X_????O?>?{???/oX? ??/H???_?SO?:o??u?n?W^?c??)????qg???0?N?y?j?c???[nNX??^Kxi7?8(?z?m??????4/? ?????[????3g????=????c??ms??u????#?o???T??j^?5?0??e?V?v?i^?????????d??C.??&???7[????k???#???)?]3?Jt????y??u?[??7??????????zu*?q??y??e?? k????C=t]X_???????????p?B#u??+???/7??gn??>??vEd7?wl?f???OE}????;?e??~???????-5?o.?k???#7 ?????????D??0 Hv]???W??&?G?G?~?????oU?R?0C??+ ?A??? ?????{???pa??R?{????>?Fv???????>?+?r???%9?+??5r?)???????????3? ??"^qE??oH???????????D??S?&;h????[%??x????#?????\? ????yU?Vu??K???????c#?%r$?c???????s??oKv????,? ???a?M???D??1?w?-oa!l1??y??/?E?F^p? ?^????pd??x?5Y7??-w??????%?\ + M?4??kX= ??9n??C?t?_}????4hP7??T5"??u??J?J??yU?^m?? En5}??t??W?+ ????????????/??'K???S?????y??R?3?U????$|?0???Z?4??? >?gJ?????r???????*??w?????P?j??~?S??????p???K?yE.?x????7???>?n?aE?x???Y?}??7o???????wo??&?W??ZP??ch^??*?k?L???g?v?v?d??9?S?>%~?y??Gf???#&\7??G?x?Hx???)? ?s??$??A????e??}??)?A(??yE????S:'????w+#??<1r ?>}?d??8`?4????{?~?;0???9?@???"G??)?o????"' ?,?Q?yi^?P??Wp??!)???*U + ?W^?#r.?0A???ca,H??????????m?????????U?& j?(???^{5??y??u???m??.??wl??K?G?????0?Y?bbd?nu?%}????gF?U???vh?_?J??????/??/???????_.K?fi^?h^)?_??_??y?O>Y?????X?z?E??????y?N?A;uj????{??=????Fae????I????;???n?[?|?;?mF?+?a?????d?? ???&??s32m^?|?y?W?2?x?+~??t????d??FvuH????~-#k??6?????Ks& 4?~z?V??>;??,Y2.>?}???0?&???OO+U?????6M?n??{??C{?y???S????^Ij???~???????d{???W???&??+????q?T??W?>????Vu?YGr??{???y?&???Wo???Zh?S?????7???v??.???1,,??7[????G?<??????????0??yJ???k?????I?????;?A???Vn4???yH?[%?Q?m???_L3r???Ix1????R?????S?K?}'L87?op???JnI?_?"???????9?a?S?^y????t6?p???? )M:uj????;?'|??;??????? ?? O??????Z??-F????#S^?X?2]??????~???Z?w??l???i??!?C?&[7o??^?-?lmK?????w:w^?J?F????K?0,???h^Y????a&??}??UC?Jg?????+ #o?m?)rm?0?J?????K?T????y??[????o?Q? + 3?ry? ? ??????????N??[%<[]?;\?jR?&??r??Q??=??+r????Lv?f??Mv???????W?l?92i?????"???$?`?x??d?????~%?$??"????;?k???????????s?}??l??o??bI?E%?AD????? ?>??A??^x?????yi^??y\?m???y????6?4?o?Y??E???&k^M?n??H?????tqi^???>?f??T?V5?j^?????s??q?_???+?y???????i?s???k??????Y????U?R??????????W?R??Sd5?~?:??2r??B??????W?B??W???y??m????yA?b?V??#/??O?BW????e???????u7?|?????????Q?z????(r??????-??9#_???7?u?"7i?j?4??S2???E?[???1????j??I???"r'?Qf??5vl???Y?WO??z???o?????????M.?k??u'?xh.???N??y????Kg?a?g???4/? ?Wy:?k??c7A? + ._>!???G?W???4i?u?o^u?????f?~i?+?? + ?P??/?J?*???&??U?4????7?G?>??8i????uJi#w>{????y5hP7??g?q??j^G??m?y???i>?SNI}j?3?e???.Wr/m???5?.]??? ???*??_?F? k?????????"???? ???D|??????8?? '?????C????^B?'??e??????n?????zj?\^W??u?{??w?YG???Lx??H??2eH???o?]?b?}??-%???_?d??ov??`b?p?4??????d???????!?CS5/?E? (???po????9f?"? + /?~V~?W???Y?????/Ly???]???+ a?Z?zr:?}?Op????j????a{??????p?~???? ?F.f?0`?????Y??e?n~?????O?[?v??E?Q??6???]j???G&&??_???7?8% j??a:?????n???M???_?z8,???M?n?6g?d??y???{??}i???^??_?zr???a?Y??G?>=? \?????#_???_?l??>???l?3i??~?!??\???+x?}cSL?)yi^??}O'??s???W??J??u???T?R????4???0w>???<0^???4/@?"+H??????Q????kS?p???|??1???z???mr?am??w??6"c \???d????????V?j????y?#z???????t?*,_?f]Rd?:v?u?+?<#L???sv??????,?M?n?n???E?????????????7w????t??????????uk?????4/?K?4/?&?+WN5?o?n???j??q??{ ????n(g'3???y?6?~X?>??n;???[TKX?Z?????????????yx?.7|?????:?&??????? :???'??x? ?????^~]?T?f??V{?)]f????O?????/????3???????????%?? 7????OHv??.x???nr???7+,??wX?m:??/???1?o??w??q??rw????Gp?e}?K(~???}???/?f?? 'Nx?=??????w?????W??~ ?=??=?9???0?zkN:??V????}??????A?W?;l|????\sV?????_?z???????#??????????~???0\????d?3????G#?????>z}?[-ZtU????????K2??-?v???:$?4????>???F????9?`????%K?]|q?p???WK?>???>?_~?#?L??JFaB?j??0?:??nm??Cs?????67z????m??" 1L?????o???p???^{N? ???hA???uR?<| ?_????E???U??q?t??Wl|R???????f??$??}???n?qP?~????edcK?9???M?9z??[????? /??9s??????q????:Y? ?!???8????}?AY?2]??+ s?????'????a?Z?;??????4}?????i?s??x??9?}???{"?~?????>???????_????.??Z?????~N?}v??????e??7???????s?" oY???|?(?????"[SSV?????\?! ?K????_{mv???NqC? ??/~|? ?C?<?y??_~Y?d??u?g??%,???>0F?K?4/????y?L????/????^???+ P?4/?$5/? ??HR?4/???????????3G\rI?^?:r?????r?=??m??S?6=zt????u? X?j???????y?I????h^$?y?Ij^??E????y?Ij^??H??4/_|?$5/? ??HR???E???A?I??????h^$5/???y???h^$Ij^??y???h^$?y?I????h^$?yA?"Ij^??H????y?Ij^??HR?2?@?"IR?2]??+ + endstream + endobj + 1533 0 obj << + /Type /XObject + /Subtype /Image + /Width 2300 + /Height 2168 + /BitsPerComponent 8 + /ColorSpace /DeviceGray + /Length 40048 + /Filter /FlateDecode + >> + stream + x???w`?e???$???BK ?(Ch?KY + (? *?P?KD*?Q?*(KdY"Z(?w?e?ev???~y?{???K??I???>??07r?{?y{_?{G.+ `I?5Z???????h+ n??[????+???G????????????3g??2????_9&?????_?y?? v<8?j??9???????k?]?g?^?}???+l???~?N??????{?^?mY??W?????O->??#?[{?Wt? ??~v???q?v??>?????[???gtD ?S?J??\?p?I??E?Zl???d??????>w5:v?? +z???dT?+??k?Rq???????}:?X?R?>?@?4n??????4??? g??????t%? o???4u????*????O??t???Ms????1???????k??|???U??f?????g?s?[k'??jr? ?3???y?+?y??O??YyQ????S?????>I^??7??0?u????C??Yw?????g?/?b{??qr??d????o<;??#?%^AV???V?uO?_?qf?a?}'?+????\?????>M?O?MH?k}????\????]?[?5? ??'???9???N;=??0?W?>?A_?n?uI??+~??:?_???????_??????W??????n???????L|?G??6?????x???>??=T??x???K?>???\???q???J?"???kD?:?}?C?-?? + ???[D?n?R?t?oCu?fQ] ???5?{?????q_]&???WN?^t???????F|???c,??g??[F[?w????~V?>?F?v??V?<`??~$}+ >?#nU???n??????:Nh??Ei???yQO?_??h??>'F???}????>??Dk?????Zm???dK???{G_~9${{???r???y????T?????u2??????????????? ????{???b?*?&??????*??i?????hO?? + ?h?kZ??????????C+?,b???a?M{?G??????????z????+Zj? ????Ss?TD??/hX???5???V???????????o??+ ??-Z??Y??????;???__3"??z?&???????7Q?/wz? + ??5????:LK???g???^m????x1????hO?.-??????5???l?? + W?u???Q?R+?????K?D??*~?h_?????????????M???y????WN=???c??????{???6?nn?Y???|??o???&?V??aA???{7?u?7?q?&????yu???????;??????;??}???{?QQQ?O-?????^??w?????['???/M??q???c9GY?;? #/H/m]?[??E? X?m??I+ W?|/????Q?u#e??????EW????? j????? ?5H???_??p?r ??a??Tm???s?x\???]?I.?_??????(????h?????????E?~?},x?CZ?>??nb?N??!?qd??8??Y?? ????9X?+ -?O|???E?j??g???7?=8?~y??????:=?U+?????#Z?F?H+ ??0?=?y??3??{7j?>?Q ???cf????]+???>+ ?G?z????oF?^_?/>???r~??],q???????,???????{Z??????N?s?%???}?h8?R?????At?????{e?3??g~?Rn??}??>w ?N?huLn?l?4??=????[?????/\y???B?E??dX???MtS???/?/,r?t????Qr??&????/?l???Y??????)?Gn??]?3.?????eg7n????i??-??-???6>Ii????>??}?O?7 + ?'?O?0?[A?\?????4Q?4?'5? ?\???J ?:8P??>????Y??h?In?????Wj[?T\?,?????O?*?=?6`N??gl?7??gW?>??'$=??vZ??n??d?G?+ ???o??u2??????5???%??g?????,?etU|??^ }=????En????y??r????*??>M????????????"?????[Q?6????????????n??}1K{?H+ ??]??????x??7?o??Gt??\n??Oe? ??G???q???????[?>????????????=; ????\???M?Oz???m??l\??????N??nv?????\??G?+ ??1?n^@@??k???0?@?h+ ?G?+ ??7}??h??}(???K?h??}(????G?+ -????}???????>??>?????YP????M?p??q?6?=???j?C?z?v?l??}+ ?????}????G?h????>?}???A?h??G?h????>?}???A?h??G?h????>?}?>h??}@??}??G??}??G??}@?h???A????>h?????}????G?h??????>h??}@?h????>?????>h??}@?h????>?????>h??}@??}?>KO??|l??S??}??G??$???????h???A?h?h????>h?>???}?>?}???A?????z?R???A?h???aI??RG??}??G??}@?h???A????>h?????}????G?h????>?}???A?h??G?h????>?}???A?h??G?h????>?}???A?h????}?>???}?>???G??}?????A?h?h????>h?>?G??}?>?}???A?h??G?h????>?}???A?h??G?h????>?}???A?h??????>???G??}??G??}?????A?h?h???! ?>h?>?G??}?>?}???A??}@?h????>?????>h??}@?h????>?????>h??}@?h????>?????}??G??}??G??}??G??}@?h???A????>h?????}????G?h??????>h??}@?h????>?????>h??}@?h????>?????>h??}@??}????}??G??}?????A?h?h????>h?>???}?>?}???A??}@?h????>?????>h??}@?h????>?????>h??}@?h????>?????>h??}@??}??G??}??G??}@?h???A????>h?????}????G?h??????>h??}@?h????>?????>h??}@?h????>?????>h??}@??}?>?G???A?h???A?h???A????>h?????}?>???G?h?????)?? + ?????}???t??A????>??????_??QM????>???}?>???L??k????>h????>h?>???}?>????G??}?e?/???}?>y?=????0???A?hl??q????A?h?h????>??+?????>h?22Y????>??????6m??}??G??}???f???>h????>h?>a?????~??Zh??}?>?}+ ?????????go=|????Y?f?? ?r??_??#?????_?N???h???Mj?o`f?=z?????u??????a??h???1+?H7?m(????:#???1????y???????y????}??g????p?iC?3v???gpt???????gg????=??Q???t??@?+ ???Y??j?CY??/?%???,4?>@V?????W???V?????~:^`^????|?????S?'??J????h 3??????u????/??{?G}???+?6i????kY?????n[????}? ??:k?[??M?&??A?b?/????w????|<??????q?m?_sCg?>@6?N????-?W?Y?G7?M???Wg????{?&y#??#??8? ?A?+ ?k??Q???/?:???@?+ ??W%?vM??Y?/wuCg?>@?????????/?P??R???????I?v?"n??sz???dM??2??{????o??H???y?z???#?????X???????h ?~???}? ?%}d?F?????|zU??^???,???#????mQ??2?6|?}??o? ???V?????@v???x??z?/?????ey5G}??79?g? + ?+??g?yo?>67w???h ?Z O~??q??m ?L??}9??79?????J??????y>#???????\????}?LjwW???"?q??4F?? vl????W?{????????:o????0??O??;h ???'??Q?????????+?cX?79???{?P????1??j???:?2%????>v?on?7??!?o??????????w??7????? m?>?h #????????7???|???_?????H???????G???%??????z-f'???'?n????p?????Q:p?_?9?=????,?Y????????l??O^??????K?i}X?/o???B_oyy|p???@?+ X-???:??r?|o?Y????{?8V??[?{??A?~c???n?h????n?I???k?:???M?N???????J?&??3?qq?y|????u???>@?m>?5???~?z?????????Y9{??o??????z?????A?+ ?7?G?Y~F? q#????2A?+ ?h\'?t?????????????^????xq??*?|i???x}^?{_??N)???99??`???s?>@?Y????????????Gw??K??]?t?>@xq???=3?O?????X?????x?=??}??????i???c?3?YQ?p???????;h?'?? ?????L???iq?Qq??76??A?@????;??Y>??z???????Q??t??U?r;\???k9"?y????})y???X7?8^fG???A?@Q??;?x/???g?Z?4X?????p??????????p??????:.y????z%?pq????h?????o????????????m?R;???? + g???Ywc????/5?4^tG-o?} ???N?W??I?J?????|??;\???Y???3?f?/?S_1}?+[_???x????a???|9|v????|??????"X?c??y/8h??_?] v)??_5}????h[????????F????R?sl?????m?Q? + |is?+ ????q?????T??? ??? ;?M???????x???a??????????uqg???Y ??=3?p??+ ?i?^f?2????T?? ?????.????>??53 ?>?=????I???NM?r?9,??W???= ?dM??????bg$S?????????73 ?>?-?????????N?r?9,????.?0 ?>?%=? ???]?b!?%s???V???%zXk?+ sXf+>??????TL????3y???u??.3?e?*?????0 ?>P???????fQ??]??Cc8tfXpooj?}?:??????E?nNFt?94?M? Kn??f?????p?Pf+??????E}?L?t?94????+??? ???:???3??Y???dJ??C?????????,@?@m?A8o.???b?o?:???c?'?????N3?i?k?X???9 1?F?\?|???3 ?>P??JO?9G?b?N&u?94????c?4 ?>P?? ?X?e???dT?3????{?????h(???Sf??F?+ ??S??????nk?{d??_??0@?@??3?Lx??S?i?d?o?C?5?4^?G-oh??U_'?-???1? ?5s?????x#??G?@b?w?y0??Y4?????d???a??:?,?>??l=5???|?????s????????m ??}(??~??????$??3?? ???.?Y?0?>??b;$?cq?Q4?c??>a????z???f???>?/?)???F??~???1s??U????n? ?????j.g?????Ta9?2?????{g?@?h???_? ?????????>drL????????}(?????o?,?_'????d?w?????Y?}L????P??Ko?(?3???m??|??e??? ??????Gv2?9'?????--.???????2????okc???t???5????-?! ??^|???~?_:%??2g?????????Y?S????>%?n~?9dO?;?????D?@A?????Q??????3? ?=3?p??+ ???vfQn?'??????q????????????G ?(????????F??~Y?????????},*`b2?}???t?;?. kmh?>;?+??FQ ????iU??9??a?J????j???p??#??"??cw3?????????7?????a?O?o?????b?g??K??!v?@?@593??m{????????P????? ??????~?kfQ)?????*??0;?@/?eh?-?k??5??b?#`??*5xr?+ q?@?@???:6,????E?I?????3?????f???L[????G?4?JZ.= + D???p.??a???????????aX? ?Y?{????V??????????O7? + ???AQ???_&?gh???> ?X??(*?Wz$?4?*??G?VY?????????,??W? + ??X? ??????O?????????FQy+????AT??n?/7.gh???????>W????? ?_?Iq???~????Li1??IzD?????w?8?,?>P????a)_??,2???!im??????q?.?>Pa??;???(2d???47?iv~|?xlE?@?@%???8?(?d????Q6g'[?w???f????9"?wm?~F?)??Aj9??Kq???p???J9%??;E????O?!o:?_8n??J?TD?%a??Yd??i??C?? ?;\???a?}???_???u?"kvM?4s????????????????_^?,2g???q??G+??/????????a??a?????L2?\j=,?z???0?>PF}? ??f?A????4??:"?Yb?????e3???~or??L: 98o?C^m6>??lh(??&???{?A6????!?z>_A?????????-?"?O??n??????h_?@?@?}ofX??3???qz s??????p?6f???R;,?]???"??N??3??k??^D>;?,?>PZC?????F?]?%??Is???????? ??SsQX?navBr??gy?O?N???J????????Yd?I?Am????????Y?}?4???????"?NN??C?????/%g???J????j??e?vZr?0?"?{???ZrWW?@?@?[???h???,2?7?q?? + ???????????5???f?u?&?Ns(??'?.4 ?4? ? K?/??"??O??m?P???'?????h??a????,??w????(?__PF?1 ?4?]? ????O?????8??N?w?2 ?4??? w???(????u?9??W??????????1?????p????S?????? ??????X?X???/???? + ??????????M?aa????YT?t????P0;?.??bhX??f???bU?????f?S?d?sf?a?}`?u??y??YT???C?s(?6??W?;???R????:?E?19f??C=+????5????W?:???YT?????Cm11??`hX + ????????.????6?B?=2??\??0?>????V?????2?I???PL?/?//??7 ?,?]>??$??6?&??Ls(????x?A???a??b?!FQu???_?Ca???7??@?@?V???????J?????:?_b?mkhh??s????YT?G?c? s(??????))??????|wC??Fc???ss(??? '??;????May?aS??????Xs(?U??;\?n? ?,N??~?>"[??K?O????^_gn?lh?W?'??A\0?????;? + ?????k??????+???> R??O8fl?N8?g?gh??? ai^??,???,??0???0?>O??:|?kf?#+???M?e?????????>N?a???Y??*?Q?g?e?sq???k ?C???;????E????>A?'?w??[:????XX??v5?|Y;=?n?B}??;\???Y?}(???5??vf?3????AP?m&?+?????CA??VX????"w6J?????_?G???E? ?Cl?^X???E?|-=?? ????"?=??0?>???????^?????(?{???Lo?qq? {??}??#?>{E.}#=?~?It?w??;??a?}??_??w|?(?i???z?@C4='??Y?0?>?U?ea???7?y?cr|g? ???xI??!?9?bxXzo?ey???+ +??~f?[?M??4s????_?n?`hr??#a????Y?????@???0;\^??`?y???a????wy?Wr?'?K`??pm?hO?@??+???? -?"??K?Ds`I??6?{?.?>????_vW45?\?ar??2?H??????= ?C^l?QXtgE??????%t???!?M??C>??ks~jywxr?_1??&???37 ?y???9?Y?E???????~o|i??0?>T???????Q??O?C??9????_??gh?[?%a?}??Y???c??9?4v?? |o;?@?P???=,??k?E?????X*k??;\?d? ?????????i.?_&G?s`?,wc|}?q9?@?P! ?:??w?(?S??=?XJ5'?.??ih?R?g?Z????????x?`,?m??;\?nh??jo?_??ja???{???????u?.?>T? '??v?},??????e,?VC????? ?Cu?fZXhgE?\??????????????j?[???8?(?????/s`?l?V???P?@?P= ???l?(???7x????????*?D?P-~??;E?\?????jv~|?zlE?@?P j. + k??-??`?J???????3?p1y?Y?}???W?%6q?Y????_m4??^?;\?h? ?Y?????^?o?sMr??????????wGE??m?F??dO?(??????9?(j??.^X?0?>dX????z??Y??????h$???'?v3 ????kay???,?????_j4????W?s??CF??NX]C??SL?&G?"s???_???fh?h??qB??(?;???9????4\V?mdh?g?O????Q???o'??????pa??`?@??5}??8?( + ??d?i4?????+[??L91??l?(??%?ks?q5?0?n=??0?>dGM?~g??Ud'k?ds???5=\`&mch2?????e??zfQd?%??$s????r??|v?Y?}???? + ???fQhc????xK|???0?>d????????m?????Xs?jN??3?4 ???????d?|??6Jb???f??f??????????(?????cs?4??_???????ZwbXQ???vn??%????vWW?@?P9[N ??X?d\?2J????????J???a=??(h?$?|?+ ?'????@)5?8????ch?????????T?????????p?yw+?@?P^M????A?????Pj?^?;\gh???Ma%???Y?LV???@?u?-?? ogh????a!=??Y???????(??S???fh???a??l|?&]?e?S??b?.f???,V~9,??1 ??,]??0 n$8??Z?@?Pz???U???f??W?? ?b?W??????????>??rZ5=?+eV{Z???????>??rZ#=?+e???????t?>?G?PF????AP~?<w?8?h??}(?????? ????????M???}???Qz;qL????? ??}?eS??}?.???F?l?????G?h?(?u?!?}?????-v?? *???W???Z?UJ?h???;?????P???S^?G?h????>h??}???A?h????>?G??}??G?h??}?>???}????>h????>h????>h????>h?>???}?????}?>?G?h?>???}?????}?>h??G?0?)??C??}??G?h?8?+Q??}??????}???G?h?8?+Q??}?^q??G??}?^q??G??}?^q??????+????h??W?c%j?>??8??J?>?}??+Q????>h2i?????}???? ??}????>d?}?Jk???>?G??}??G?h??}?>???}????>h????>?G?h???A?h???A?h???A?h???A?h???A????>h??}?h????>?G????>h?????}?>h??G??}?>???}????>h????>?G?h???A?h??}??G??}????>???}?>???}?>???}?>???G??}?????A?h??}@?h????>????A??}?h???A?h?>?????>h??}???A?h????>?G??}??G?h??}?>???}????>h????>h????>h????>h?>???}?????}?>?G?h?>???}?????}?>h??G??}?>?????>???}?! >?G?h????>h??}???A?h????>?G??}??G??}??G??}??G??}??G??}?????A?h??}@?h????>????A?h??}@?h??G????>h???A?h??}??G??}????>???}?>?G?h????>h??}???A?h???A?h???A?h???A?8?h????>h?>???}?????}?>?G?h?>?????>?}????}@?h??G??}????>???}?>?G?h????>h??}???A?h????>?G??}??G??}??G??}??G??}@?h???A????>h??}?h????>?G????>h?????}?>h??G??}?>???}????>h????>?G?h???A?h??}??G??}????>???}?>???}?>???}?>???G??}????>?}??G?h??G??}????>?}????}@?h??G????>?G??}??G?h??}?>???}????>h????>?G?h???A?h???A?h???A?h???A?h???A????>h??}?h????>?G????>h??}?h???A?h?>?????>h??}???A?h????>?G??}??G?h??}?>???}????>h????>h????>h????>h?>???}?>?}??G?h??G??}????>?}????}@?h??G????>h???A?h??}??G??}????>???}?>?G?h????>h??}???A?h???A?h???A?h???A????>h??}?h????>?G????>h??}?h???A?h?>?????>?}????>h????>?G?h???A?h??}??G??}????>???}?>???}?>???}?>???}?>???}?>?}??G?h??G??}????>?}??G?h??G??}?>????A??}??G?h??}?>???! }????>h????>?G?h???A?h??}??G??}??G??}??G??}??G??}??G??! }@?h??? ?>????A?h??}@?h??G????>h?????}?>h????>?G?h???A?h??}??G??}????>???}?>?G?h????>h????>h????>h?????}?>???G??}????>?}??G?h??G??}?>????A??}?h???A?h????>?G??}??G?h??}?>???}????>h????>?????>h????>??@??>h????>?j??m???}??G??} + ?F?M?h???A?h???A????>h??}?h????>?G????>h??}?h???A?h?>?????>h??}???!C?>PZ?????>??,?@?@i??}????>h????>?G?T???H?;??'??-z?6??G?h??2?? k??2??G?h????>??Ouj???k?qA???G??}?h???A?h?>h????>?}?>???}@??}???>h?????G??}+ endstream + endobj + 1524 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [111.486 230.148 251.49 241.69] + /A << /S /GoTo /D (cite.EXTENDPY) >> + >> endobj + 1525 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [255.671 230.148 279.82 241.69] + /A << /S /GoTo /D (cite.EXTENDPY) >> + >> endobj + 1526 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [289.62 230.148 364.253 241.69] + /A << /S /GoTo /D (cite.EXTENDLUA) >> + >> endobj + 1527 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [368.434 230.148 392.583 241.69] + /A << /S /GoTo /D (cite.EXTENDLUA) >> + >> endobj + 1528 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [192.007 206.237 216.157 217.779] + /A << /S /GoTo /D (subsection.2.6.3) >> + >> endobj + 1532 0 obj << + /D [1530 0 R /XYZ 89 757 null] + >> endobj + 1523 0 obj << + /D [1530 0 R /XYZ 90 733.816 null] + >> endobj + 242 0 obj << + /D [1530 0 R /XYZ 90 396.007 null] + >> endobj + 246 0 obj << + /D [1530 0 R /XYZ 90 152.563 null] + >> endobj + 1529 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R >> + /XObject << /Im14 1504 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 1536 0 obj << + /Length 1818 + /Filter /FlateDecode + >> + stream + x??X???8 ??S??????8???h?S`w;?K??b+????Jv????"???Q?IEQ$C~??Dm?Dn?;04? 6???A?=1?~n7?????e???~??Q??B?p?=)?tC??C?E,{oI ????/$?-I?jZ???=??j?k?V?=?\??{g???gm?;?6??m6k??qS+?^Q????&?*?\Q?a"????f????37??1urZ??z`A????DA???aU?5?si? ?}j?? ??J??b?L????|?K?????[Z:f at 05$??v?H+V9?g??0?j??? n?????Y?C???b + ??VE???m???Xs"-C??&d?X?CvI???@a?-?h??S-y??/???`BB???@W?.Z:?vO?YMn??S4??" ?|???U$? Q$???]?' E X? Q?WI m@??z>?????Z$W???j7n?4?????g???>?t+ 0!??,?*?????]??@?mD&???54?j6P!'*?? + ?M?SZ?M?4>?j"I .? SM???a?6)???#j??A??J???Vx???????+ endstream + endobj + 1535 0 obj << + /Type /Page + /Contents 1536 0 R + /Resources 1534 0 R + /MediaBox [0 0 612 792] + /Parent 1452 0 R + >> endobj + 1537 0 obj << + /D [1535 0 R /XYZ 89 757 null] + >> endobj + 1534 0 obj << + /Font << /F21 332 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1559 0 obj << + /Length 2053 + /Filter /FlateDecode + >> + stream + x??Y[??6~?_!`?? ???A?&i??m?L??n??e?V"K?$?q???-y?O??XE?;????E??7W/n?????$???\?v?MN?G???(?Hh?'LD???G???,B??@?????s?/L?k'??Ig??1??HiE??Oi:K?o?q???JkD???Bw-O1ALYf???????1?+ N E?-#/??1S#37??S?U?u??bZ]????<BcE? ????QZ??8K??????@lcIG?K3?rN????:M?Mi,???P?????????ku?Q zh????????0???7qY?2???X??V?S?9?S'???H4N????C*????~X? ????????JS??L?^???P]?@ ???'???4I????&?????~+ iF/????L?F??T?r????/???w5? ?u? ????+?h??|?!Kz6???~?K/?S!?;%??=?C?I?Z?????e?42?7pr.T+??Ky???a?T???>.???=????g?????dM????e???????#"D(?s???^? ????L_?????}??/??S?8=?s??*6eb??R?rSjX?s?7?U???p?? \$?!TT?"?p??F6???=?~???e`????????|??1Yf?Km?e^d?b?&?[??????26??D D-?q?.??&??p??l???q?+ ?9+ ??~m????????N7?T?8:???b?! ,???I,Ag?]Q??+ ????)w?8L7&???pC???c???/???0I??6?:?#*?B??>?6G6?79??b ??z?N???>???????w{?Y?e ??O ???7?}??.?[O?l???lF?hB?&?d????$3?D?Mf???|????C??????&3;r??O/^???????Q?5'?o?????3?IX> endobj + 1538 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [370.785 577.782 513.996 589.361] + /Subtype/Link/A<> + >> endobj + 1561 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 565.827 358.74 577.406] + /Subtype/Link/A<> + >> endobj + 1539 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [192.605 546.347 372.429 557.925] + /Subtype/Link/A<> + >> endobj + 1540 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [412.627 526.867 513.996 538.445] + /Subtype/Link/A<> + >> endobj + 1562 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 514.911 373.435 526.49] + /Subtype/Link/A<> + >> endobj + 1541 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [178.299 495.431 295.359 507.01] + /Subtype/Link/A<> + >> endobj + 1542 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [183.469 475.951 373.754 487.53] + /Subtype/Link/A<> + >> endobj + 1543 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [244.122 456.471 371.643 468.05] + /Subtype/Link/A<> + >> endobj + 1544 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [163.793 436.991 312.235 448.57] + /Subtype/Link/A<> + >> endobj + 1545 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [178.299 417.511 279.668 429.09] + /Subtype/Link/A<> + >> endobj + 1546 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [308.02 398.031 513.996 409.61] + /Subtype/Link/A<> + >> endobj + 1564 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 386.076 257.869 397.655] + /Subtype/Link/A<> + >> endobj + 1547 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [433.549 366.596 513.996 378.174] + /Subtype/Link/A<> + >> endobj + 1565 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 354.678 148.032 366.219] + /Subtype/Link/A<> + >> endobj + 1548 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [360.324 335.16 513.996 346.739] + /Subtype/Link/A<> + >> endobj + 1566 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 323.205 179.414 334.784] + /Subtype/Link/A<> + >> endobj + 1549 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [219.033 303.725 425.507 315.304] + /Subtype/Link/A<> + >> endobj + 1550 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [307.522 272.29 513.996 283.869] + /Subtype/Link/A<> + >> endobj + 1567 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 260.335 163.723 271.913] + /Subtype/Link/A<> + >> endobj + 1551 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [475.391 240.855 513.996 252.433] + /Subtype/Link/A<> + >> endobj + 1568 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 228.899 467.581 240.478] + /Subtype/Link/A<> + >> endobj + 1552 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [334.983 197.464 452.043 209.043] + /Subtype/Link/A<> + >> endobj + 1553 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [401.668 166.029 513.996 177.608] + /Subtype/Link/A<> + >> endobj + 1570 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 154.074 430.968 165.653] + /Subtype/Link/A<> + >> endobj + 1554 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [454.47 122.639 513.996 134.217] + /Subtype/Link/A<> + >> endobj + 1571 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 110.683 504.691 121.808] + /Subtype/Link/A<> + >> endobj + 1555 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [215.529 79.248 332.589 90.827] + /Subtype/Link/A<> + >> endobj + 1560 0 obj << + /D [1558 0 R /XYZ 89 757 null] + >> endobj + 250 0 obj << + /D [1558 0 R /XYZ 90 726.045 null] + >> endobj + 605 0 obj << + /D [1558 0 R /XYZ 65.093 592.947 null] + >> endobj + 583 0 obj << + /D [1558 0 R /XYZ 65.093 561.512 null] + >> endobj + 580 0 obj << + /D [1558 0 R /XYZ 65.093 542.032 null] + >> endobj + 584 0 obj << + /D [1558 0 R /XYZ 65.093 510.597 null] + >> endobj + 1453 0 obj << + /D [1558 0 R /XYZ 65.093 491.117 null] + >> endobj + 1563 0 obj << + /D [1558 0 R /XYZ 65.093 471.636 null] + >> endobj + 581 0 obj << + /D [1558 0 R /XYZ 65.093 452.156 null] + >> endobj + 585 0 obj << + /D [1558 0 R /XYZ 65.093 432.676 null] + >> endobj + 608 0 obj << + /D [1558 0 R /XYZ 65.093 413.196 null] + >> endobj + 464 0 obj << + /D [1558 0 R /XYZ 65.093 381.761 null] + >> endobj + 678 0 obj << + /D [1558 0 R /XYZ 65.093 350.326 null] + >> endobj + 684 0 obj << + /D [1558 0 R /XYZ 65.093 318.89 null] + >> endobj + 782 0 obj << + /D [1558 0 R /XYZ 65.093 287.455 null] + >> endobj + 579 0 obj << + /D [1558 0 R /XYZ 65.093 256.02 null] + >> endobj + 1569 0 obj << + /D [1558 0 R /XYZ 65.093 212.63 null] + >> endobj + 1495 0 obj << + /D [1558 0 R /XYZ 65.093 181.194 null] + >> endobj + 578 0 obj << + /D [1558 0 R /XYZ 65.093 137.804 null] + >> endobj + 874 0 obj << + /D [1558 0 R /XYZ 65.093 94.413 null] + >> endobj + 1557 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1589 0 obj << + /Length 2818 + /Filter /FlateDecode + >> + stream + x??Y[s??~???KZj???%3????d7vf?v??4??(HbM /?z??{+ ??$Z x?Z??V?M&??O?3???kTaG=??,?? s8???p??y?Yr? ?D????????a:*?N???d????0?F?H +p?$???m.w? ??}???????~?k?????/????',??????G?W?n?v??>????? ???z??N??4?v????????hq??????i??9R=??`?)?Drd+ ?&L?E?#R'?:?n????6+??VK3?n??e???2???,!La?!K??A?\?%?g??}`D.?r?????e?P??r?? ????mZ+ ?R Sc???=??Y]OA???'????E + d?I?l_I??,?c+N????$?Q?KE??O?kC?%}?C????1?5?#I??q????pH?????*?????o8@??FP????j??! ??-??e??i????!?+ (?Tc?VF?v?n\???~??*+ ?0?????u??6??iG + =Xj @}?(?R?9^?v?o? + ?"??jMr ?!uT??v:F?# ????r!??f?)~1 E????C+ ?Q,%?f???U?????>k?2??M?B?/?lc??r?6L????}????_??(??od?N?4Q????w0r?Y????Q?+???M??`.???pN?????#??&??? 1??|???fN??????)?XL??C??6????^??y?Iw9? ?n'?VW???H?P? >?t????>T,I?? ?????1ppY?????#:_ns<; w^???UM? + [|kQ??!mTa?{?>????z???,R?y??k3J=x?_??(Y??J??X:1t?????.?ax?????X`?+ endstream + endobj + 1588 0 obj << + /Type /Page + /Contents 1589 0 R + /Resources 1587 0 R + /MediaBox [0 0 612 792] + /Parent 1572 0 R + /Annots [ 1556 0 R 1573 0 R 1591 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1592 0 R 1579 0 R 1593 0 R 1580 0 R 1594 0 R 1581 0 R 1595 0 R 1582 0 R 1596 0 R 1583 0 R 1598 0 R 1584 0 R 1599 0 R ] + >> endobj + 1556 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [357.554 712.872 511.227 724.451] + /Subtype/Link/A<> + >> endobj + 1573 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [433.549 680.327 513.996 691.906] + /Subtype/Link/A<> + >> endobj + 1591 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 668.372 488.004 679.497] + /Subtype/Link/A<> + >> endobj + 1574 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [210.279 635.828 343.03 647.406] + /Subtype/Link/A<> + >> endobj + 1575 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [358.32 615.238 491.071 626.817] + /Subtype/Link/A<> + >> endobj + 1576 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [245.367 582.694 351.967 594.272] + /Subtype/Link/A<> + >> endobj + 1577 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [198.909 562.104 431.535 573.683] + /Subtype/Link/A<> + >> endobj + 1578 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [454.47 529.559 513.996 541.138] + /Subtype/Link/A<> + >> endobj + 1592 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 517.604 430.968 529.183] + /Subtype/Link/A<> + >> endobj + 1579 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [317.983 440.56 513.996 452.139] + /Subtype/Link/A<> + >> endobj + 1593 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 428.605 158.493 440.183] + /Subtype/Link/A<> + >> endobj + 1580 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [255.717 408.015 513.996 419.594] + /Subtype/Link/A<> + >> endobj + 1594 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 396.097 121.88 407.639] + /Subtype/Link/A<> + >> endobj + 1581 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [485.852 354.881 513.996 366.46] + /Subtype/Link/A<> + >> endobj + 1595 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 342.926 341.555 354.505] + /Subtype/Link/A<> + >> endobj + 1582 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [417.858 322.337 513.996 333.915] + /Subtype/Link/A<> + >> endobj + 1596 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 310.381 242.178 321.96] + /Subtype/Link/A<> + >> endobj + 1583 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [485.852 265.882 513.996 277.421] + /Subtype/Link/A<> + >> endobj + 1598 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 253.926 315.403 265.051] + /Subtype/Link/A<> + >> endobj + 1584 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [151.11 123.748 513.996 134.873] + /Subtype/Link/A<> + >> endobj + 1599 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 111.793 221.257 123.372] + /Subtype/Link/A<> + >> endobj + 1590 0 obj << + /D [1588 0 R /XYZ 89 757 null] + >> endobj + 871 0 obj << + /D [1588 0 R /XYZ 65.093 728.037 null] + >> endobj + 542 0 obj << + /D [1588 0 R /XYZ 65.093 695.493 null] + >> endobj + 780 0 obj << + /D [1588 0 R /XYZ 65.093 650.993 null] + >> endobj + 872 0 obj << + /D [1588 0 R /XYZ 65.093 630.403 null] + >> endobj + 783 0 obj << + /D [1588 0 R /XYZ 65.093 597.859 null] + >> endobj + 582 0 obj << + /D [1588 0 R /XYZ 65.093 577.269 null] + >> endobj + 543 0 obj << + /D [1588 0 R /XYZ 65.093 544.725 null] + >> endobj + 479 0 obj << + /D [1588 0 R /XYZ 65.093 500.225 null] + >> endobj + 577 0 obj << + /D [1588 0 R /XYZ 65.093 467.68 null] + >> endobj + 1522 0 obj << + /D [1588 0 R /XYZ 65.093 423.181 null] + >> endobj + 1326 0 obj << + /D [1588 0 R /XYZ 65.093 390.636 null] + >> endobj + 856 0 obj << + /D [1588 0 R /XYZ 65.093 370.046 null] + >> endobj + 1493 0 obj << + /D [1588 0 R /XYZ 65.093 337.502 null] + >> endobj + 1597 0 obj << + /D [1588 0 R /XYZ 65.093 304.957 null] + >> endobj + 870 0 obj << + /D [1588 0 R /XYZ 65.093 248.502 null] + >> endobj + 818 0 obj << + /D [1588 0 R /XYZ 65.093 215.958 null] + >> endobj + 517 0 obj << + /D [1588 0 R /XYZ 65.093 183.413 null] + >> endobj + 855 0 obj << + /D [1588 0 R /XYZ 65.093 150.868 null] + >> endobj + 1521 0 obj << + /D [1588 0 R /XYZ 65.093 106.369 null] + >> endobj + 1587 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1615 0 obj << + /Length 2804 + /Filter /FlateDecode + >> + stream + x??Y?s?6?_??+5?@?2ssc???n|???????HHbL?*H?U?o?].??P??'?+ ???? ?????.?5O?$ + 8??+ ??}???(?q????????\???e?(b????l????k B??pPJ|??M^tBL|?H&Gr$??,%??_?k4? + hjI??j?k??????  + bR+???%???U^4U ??2v?KM?????|!K"?F?x?0#????9???@ ??+T?h??~_???J4$???]???2o4??V`?1???K??????e'< ???_?0???dzw???wW??#????$F??p!? ???Up??????8??? Y??i* /?????U???t?s_va???!??hL??R?2/?J5?g?*?????o???q???o9g?6?H3y?f????&+ ??g?????ta? ? HH?i?r?????U???Mk/8eV???fE??"D?R????????u??`???'Nkt(?\??~X;???2]????T?? ???@u?yY??%??t'(???T??? + W?! ?}+ ?gU?BY?9??W7??(/Q?~??????A??6jV??????!d/?0??>?.???Sq.$K~;?????*t ?????m????`???O`?9?C8@??????yT?.SoY7?k!?=?r???? ~???y ??+ ?L a?B??e???$ ??)\q????_?E?}G??4Po,,I?k?#???? ??xY? ????Z??8???!G?????2?? ??*3???J?$?????q???Uf????????t??VJig??p??9J??D0?FD?|sP?Nf??W?z=??v?=?TB?????-y??$??Rho??I?:a?h??~?^?Z???p?F5}?????@????????@??????? ????? ???????g"%?$K?iB?8?ClZ??4????/,?w;?X?D???b???V??eU7[$'??7??C?%????_h???F??__t ?????~?????*??^%?1???\?6?2????????????GP ?]QWt????&??0???8T??'N?????~,t??/%?????j ??f5?f'??Z??????+ endstream + endobj + 1614 0 obj << + /Type /Page + /Contents 1615 0 R + /Resources 1613 0 R + /MediaBox [0 0 612 792] + /Parent 1572 0 R + /Annots [ 1585 0 R 1586 0 R 1600 0 R 1601 0 R 1618 0 R 1602 0 R 1603 0 R 1619 0 R 1604 0 R 1605 0 R 1606 0 R 1607 0 R 1620 0 R 1608 0 R 1621 0 R 1609 0 R 1622 0 R 1610 0 R 1611 0 R 1623 0 R ] + >> endobj + 1585 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [150.009 700.917 429.708 712.496] + /Subtype/Link/A<> + >> endobj + 1586 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 656.612 463.347 668.191] + /Subtype/Link/A<> + >> endobj + 1600 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [215.157 612.308 405.442 623.887] + /Subtype/Link/A<> + >> endobj + 1601 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [375.517 579.959 513.996 591.537] + /Subtype/Link/A<> + >> endobj + 1618 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 568.004 237.446 579.582] + /Subtype/Link/A<> + >> endobj + 1602 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [172.495 535.654 452.194 547.233] + /Subtype/Link/A<> + >> endobj + 1603 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [485.852 470.956 513.996 482.534] + /Subtype/Link/A<> + >> endobj + 1619 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 459 304.942 470.579] + /Subtype/Link/A<> + >> endobj + 1604 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 382.347 325.864 393.926] + /Subtype/Link/A<> + >> endobj + 1605 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [122.189 349.997 511.227 361.122] + /Subtype/Link/A<> + >> endobj + 1606 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [336.633 285.299 511.227 296.878] + /Subtype/Link/A<> + >> endobj + 1607 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [417.858 252.95 513.996 264.528] + /Subtype/Link/A<> + >> endobj + 1620 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 241.032 168.953 252.573] + /Subtype/Link/A<> + >> endobj + 1608 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [360.324 220.6 513.996 232.179] + /Subtype/Link/A<> + >> endobj + 1621 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 208.645 221.257 220.224] + /Subtype/Link/A<> + >> endobj + 1609 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [155.842 176.296 513.996 187.421] + /Subtype/Link/A<> + >> endobj + 1622 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 164.341 310.173 175.92] + /Subtype/Link/A<> + >> endobj + 1610 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [330.904 143.947 511.227 155.525] + /Subtype/Link/A<> + >> endobj + 1611 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [360.324 91.203 513.996 102.782] + /Subtype/Link/A<> + >> endobj + 1623 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 79.248 368.703 90.827] + /Subtype/Link/A<> + >> endobj + 1616 0 obj << + /D [1614 0 R /XYZ 89 757 null] + >> endobj + 1617 0 obj << + /D [1614 0 R /XYZ 65.093 728.037 null] + >> endobj + 785 0 obj << + /D [1614 0 R /XYZ 65.093 683.733 null] + >> endobj + 505 0 obj << + /D [1614 0 R /XYZ 65.093 639.428 null] + >> endobj + 606 0 obj << + /D [1614 0 R /XYZ 65.093 595.124 null] + >> endobj + 817 0 obj << + /D [1614 0 R /XYZ 65.093 562.775 null] + >> endobj + 681 0 obj << + /D [1614 0 R /XYZ 65.093 518.47 null] + >> endobj + 1520 0 obj << + /D [1614 0 R /XYZ 65.093 486.121 null] + >> endobj + 755 0 obj << + /D [1614 0 R /XYZ 65.093 453.772 null] + >> endobj + 1494 0 obj << + /D [1614 0 R /XYZ 65.093 409.467 null] + >> endobj + 757 0 obj << + /D [1614 0 R /XYZ 65.093 377.118 null] + >> endobj + 1327 0 obj << + /D [1614 0 R /XYZ 65.093 332.814 null] + >> endobj + 685 0 obj << + /D [1614 0 R /XYZ 65.093 300.464 null] + >> endobj + 784 0 obj << + /D [1614 0 R /XYZ 65.093 268.115 null] + >> endobj + 895 0 obj << + /D [1614 0 R /XYZ 65.093 235.766 null] + >> endobj + 1063 0 obj << + /D [1614 0 R /XYZ 65.093 203.416 null] + >> endobj + 682 0 obj << + /D [1614 0 R /XYZ 65.093 159.112 null] + >> endobj + 1328 0 obj << + /D [1614 0 R /XYZ 65.093 126.763 null] + >> endobj + 604 0 obj << + /D [1614 0 R /XYZ 65.093 106.369 null] + >> endobj + 1613 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1632 0 obj << + /Length 1646 + /Filter /FlateDecode + >> + stream + x??Wmo?6??_!`h&c5??? + ??&i?$Kw?+Z?e%z?(????w$e???5?0 _?<?{xw?^?a???xt08??KP?)?F/?^D?3??2?7?$[ + ???4??c?????R7?w??5?#?y?T??????mQ??{y?#??]??]???: ` ???:Cq???:???e0?a???[?U?Pm??|8??I???OF8?1u'?ZO???'$kz`2? ?o{,????;???N?^,??4*?$o??????4????.?nm? Ve?ZT?y???N????????K?? P%k???????4?m+??1 } ?s?z??Wb?n?z????????^? + hi???O?y=??2?nZ?? ?wbQdn?L?> endobj + 1612 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [266.178 700.917 513.996 712.042] + /Subtype/Link/A<> + >> endobj + 1634 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 688.962 513.996 700.087] + /Subtype/Link/A<> + >> endobj + 1635 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 677.006 513.996 688.131] + /Subtype/Link/A<> + >> endobj + 1636 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 665.051 425.738 676.63] + /Subtype/Link/A<> + >> endobj + 1624 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [208.146 621.216 513.996 632.531] + /Subtype/Link/A<> + >> endobj + 1637 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 609.261 116.65 620.839] + /Subtype/Link/A<> + >> endobj + 1625 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [365.554 589.335 513.996 600.914] + /Subtype/Link/A<> + >> endobj + 1638 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 577.417 121.88 588.959] + /Subtype/Link/A<> + >> endobj + 1626 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [449.24 525.574 513.996 537.153] + /Subtype/Link/A<> + >> endobj + 1639 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 513.619 367.706 525.198] + /Subtype/Link/A<> + >> endobj + 1627 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [449.24 493.694 513.996 505.273] + /Subtype/Link/A<> + >> endobj + 1640 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 481.739 284.021 493.318] + /Subtype/Link/A<> + >> endobj + 1628 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [485.852 461.813 513.996 473.392] + /Subtype/Link/A<> + >> endobj + 1641 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 449.858 216.026 461.437] + /Subtype/Link/A<> + >> endobj + 1629 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [485.852 429.933 513.996 441.512] + /Subtype/Link/A<> + >> endobj + 1642 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 417.978 513.996 429.103] + /Subtype/Link/A<> + >> endobj + 1643 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [98.966 406.06 163.723 417.601] + /Subtype/Link/A<> + >> endobj + 1633 0 obj << + /D [1631 0 R /XYZ 89 757 null] + >> endobj + 539 0 obj << + /D [1631 0 R /XYZ 65.093 728.037 null] + >> endobj + 607 0 obj << + /D [1631 0 R /XYZ 65.093 648.336 null] + >> endobj + 756 0 obj << + /D [1631 0 R /XYZ 65.093 604.501 null] + >> endobj + 679 0 obj << + /D [1631 0 R /XYZ 65.093 572.62 null] + >> endobj + 835 0 obj << + /D [1631 0 R /XYZ 65.093 540.74 null] + >> endobj + 680 0 obj << + /D [1631 0 R /XYZ 65.093 508.859 null] + >> endobj + 873 0 obj << + /D [1631 0 R /XYZ 65.093 476.979 null] + >> endobj + 541 0 obj << + /D [1631 0 R /XYZ 65.093 445.098 null] + >> endobj + 1630 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1646 0 obj << + /Length 1249 + /Filter /FlateDecode + >> + stream + x??WYo?6~???? ?,OQ*?I6m??d???@??A?[][??r?????h??? ?3????D??D????_?`4?p??$?>F??P8?4???]|Qn??#???,o?????1/<???/'SO????Z??m?U=???Oc?H??r|??8?????(??D?[?8IT,Gw?$*??1"?gi?uR?H0?"?}??????I???H???*??R.3,?Nq\???Dd?F???G?m?_`t??F{?.??DL`?*j?|??E?? ????S???????0R??W? y???/W?p??2?s????9p)?%??j???[?l?m?&?????M???j??xr?b??wp??D?????? ?q3?Y??~??3??K{??f4p`????+ ']o?> `]?% + ?:p?????![? + endstream + endobj + 1645 0 obj << + /Type /Page + /Contents 1646 0 R + /Resources 1644 0 R + /MediaBox [0 0 612 792] + /Parent 1572 0 R + >> endobj + 1647 0 obj << + /D [1645 0 R /XYZ 89 757 null] + >> endobj + 254 0 obj << + /D [1645 0 R /XYZ 90 726.045 null] + >> endobj + 258 0 obj << + /D [1645 0 R /XYZ 90 593.293 null] + >> endobj + 1648 0 obj << + /D [1645 0 R /XYZ 90 506.349 null] + >> endobj + 1649 0 obj << + /D [1645 0 R /XYZ 90 482.519 null] + >> endobj + 1650 0 obj << + /D [1645 0 R /XYZ 90 458.726 null] + >> endobj + 262 0 obj << + /D [1645 0 R /XYZ 90 404.003 null] + >> endobj + 1651 0 obj << + /D [1645 0 R /XYZ 90 317.2 null] + >> endobj + 1652 0 obj << + /D [1645 0 R /XYZ 90 223.502 null] + >> endobj + 1653 0 obj << + /D [1645 0 R /XYZ 90 129.982 null] + >> endobj + 1644 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F19 498 0 R /F11 361 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1658 0 obj << + /Length 1396 + /Filter /FlateDecode + >> + stream + x??W?r?6}?W?o?L??B?D'??N??;Nm%3?$ ?l)R??????-???>hB???=? ?`?????b??kJ??!j?dS/?V?????????2?s??g??+ endstream + endobj + 1657 0 obj << + /Type /Page + /Contents 1658 0 R + /Resources 1656 0 R + /MediaBox [0 0 612 792] + /Parent 1572 0 R + >> endobj + 1659 0 obj << + /D [1657 0 R /XYZ 89 757 null] + >> endobj + 1660 0 obj << + /D [1657 0 R /XYZ 90 708.7 null] + >> endobj + 1661 0 obj << + /D [1657 0 R /XYZ 90 532.02 null] + >> endobj + 1662 0 obj << + /D [1657 0 R /XYZ 90 467.168 null] + >> endobj + 1663 0 obj << + /D [1657 0 R /XYZ 90 404.936 null] + >> endobj + 1664 0 obj << + /D [1657 0 R /XYZ 90 306.345 null] + >> endobj + 1656 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F31 350 0 R /F11 361 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1667 0 obj << + /Length 2978 + /Filter /FlateDecode + >> + stream + x??[[s??~???[????%?ffw??d'?N???l???(??L?$????+ ?????\MxZ?eu???8??????????.?}?`7t????ROfw?????O(?N????????????.?6%??DH?{R?"??@?".??Rv?X??K???C????d??h?jV???r?(???L9??????j?f=?0k???-?YS??????ik??? mR??v?]c?#??s??m?:?V?+?X?m(? ?2????m?W??-???)??Hm??E???l?? ;d?Z?8?7??(???o?? ??US?m???Z?v??~??? 1=??6_.???r*?n ??????@u?A0?uS??t?%?M&,?F?????>???X?&Z2??<$EA`? 5?4Z?~??j ?$`T?%N?-M??* + ,A"??N?4??m='?SKY?]u9??aag???W/v^}??+X24?g` *I^?PL?{7?gK???}O??`"m?;?}?>v~??k?e???;????????E l;??????[??=??????K(?Yl?_??0~?????%??8??[?o?????J+???+? + ?U? $???b?+?r??u???? ?????%??R"????X5$w?3QJ??cOqp?-B??KI?u^WE*??m??7??.???B7o7D?J,????????Et*???b?c?Y ??9???dj???SA#??d?4 at Nj??}L???A????`?1????????U? + m??+?| ?7????>??????B??^??+ J?} + ?????f?S???}c??????a??????mn???{_?????e?c?g??0p?????O????????r?_??q??? ?}???~?<4!??/BB??!?& ?W?0 ?{???f?,?. Z???)?%O????+???|0???????a??D??W?d:?"\????z???R??VX_???,???m^?+??!O???????Sh??u?S???X?)ga?e?0?????^?~?if????????X?8?-?G"??{??R? ??5Tv~q?]ds[?@???dO??N:?x??eU/??A ?| ???t\?#P?Q???9?????p$???0??O$???W???lv?F?l?9?W_?Z7> endobj + 1654 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [355.339 263.973 371.658 275.515] + /A << /S /GoTo /D (figure.caption.46) >> + >> endobj + 1655 0 obj << + /Type /Annot + /Subtype /Link + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [444.194 155.181 460.513 166.723] + /A << /S /GoTo /D (figure.caption.46) >> + >> endobj + 1668 0 obj << + /D [1666 0 R /XYZ 89 757 null] + >> endobj + 266 0 obj << + /D [1666 0 R /XYZ 90 726.045 null] + >> endobj + 1665 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F19 498 0 R /F11 361 0 R /F31 350 0 R /F7 1669 0 R /F10 1147 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1673 0 obj << + /Length 3392 + /Filter /FlateDecode + >> + stream + x??\mo7??_?kq???6| p at c??s_[M?k?A?dG?-???:??o^??Rb?]W??Y??%?3? g?\??yGt^???w??P???????:Qt??????u~??~?G?=?Cwo0???K???1]=??_????a? ??????x?????9_???Jt?????s???uG?lDG??? + ?u??;??":#???????u?1J???s??vG?7?}]?)???2/]e?jv,?N???????? .;?D??????hjc + ??^??W?L???L?????[=??3/>????'??[??Zg?? + Q?}??:~???cM%?NPB?>2????'??????5<y???????????`9?O??7?"w?UB?????ic??c?Zr?P}S?p6?Yu~=,'???,?:_???q???O<??(?+??W4???xq???"+ ????'??{H??e?F?D'+ + ?????i?u?YQSx?#??Y????P???Z`?g???L????? ??? ~1p????Q?j?Pw?Kws'D?????F?Q?r??eCo\?c?[?R????[?? ?B?8L%???_n????F?????=?w?|N??zR???^Z_???I6J?&?O2?[???h-???*??b?????zC???#??Q?h??t??DO6H?d3??Nw3= ?VOG????v??=?/??(?iJ?O?b???????????????D?[?`o??"?????"(Xph?`??TVTvT?EYS9?P"H?V?@????eEe? IS?$?A?=?S1??????z2?h?dH2?w?INe_"?!?????|??^ ???CX?A8???J?kS0vV????IG???Lh???|??ea???cX ?22/?????( ?7$?}??,Av?????H???????!GZ??u????bu??? ??b??3.?????>???Oq}L?X~??q??S?zA?>?????????oAh???! ?o.?????u?6rP-?\B?#?&?,?1g?H5?L5??G?4???&Y???K?x?x???P??p??SYr??E??c???????A?9G???BU#X??c?C`"Vg4!`?*/|a+???>??????m>-?k?v?"%??????S0???"g??(5;nY??b?} ?1p:Y??? /P???2??????????? ???b??n???u??n?>?o?`n???w?3??A??_?@????]?B,Hok? ???/I?fH???q??h?YuF?}????]V??A??U???O:p,R?????uJ>c?t;X?? ??|2??>??q%????. + :?w?)?X\%D????K????mV?J?NZ?V?{????U?@??i 0?v?f??'kn?g %???a?i???I???9S?N???-??????????0 + ??P.?fP~??rx:|?I????t???????v???ex??C?-??*%TGBH????r?Gd+????;????jK???"0c???????U????cN?S?Sbz??eq??,l9C??S*????>bH??C?IEHg?'?g1?|Y?????F? ??9???t?]> endobj + 1674 0 obj << + /D [1672 0 R /XYZ 89 757 null] + >> endobj + 270 0 obj << + /D [1672 0 R /XYZ 90 726.045 null] + >> endobj + 274 0 obj << + /D [1672 0 R /XYZ 90 595.574 null] + >> endobj + 1466 0 obj << + /D [1672 0 R /XYZ 90 546.108 null] + >> endobj + 1675 0 obj << + /D [1672 0 R /XYZ 90 524.103 null] + >> endobj + 1676 0 obj << + /D [1672 0 R /XYZ 90 509.856 null] + >> endobj + 1677 0 obj << + /D [1672 0 R /XYZ 90 495.61 null] + >> endobj + 1678 0 obj << + /D [1672 0 R /XYZ 90 467.116 null] + >> endobj + 1679 0 obj << + /D [1672 0 R /XYZ 90 438.623 null] + >> endobj + 1680 0 obj << + /D [1672 0 R /XYZ 90 424.377 null] + >> endobj + 1681 0 obj << + /D [1672 0 R /XYZ 90 410.13 null] + >> endobj + 1682 0 obj << + /D [1672 0 R /XYZ 90 395.883 null] + >> endobj + 1683 0 obj << + /D [1672 0 R /XYZ 90 367.39 null] + >> endobj + 1684 0 obj << + /D [1672 0 R /XYZ 90 353.144 null] + >> endobj + 1685 0 obj << + /D [1672 0 R /XYZ 90 338.897 null] + >> endobj + 1686 0 obj << + /D [1672 0 R /XYZ 90 324.65 null] + >> endobj + 1687 0 obj << + /D [1672 0 R /XYZ 90 310.404 null] + >> endobj + 1688 0 obj << + /D [1672 0 R /XYZ 90 296.157 null] + >> endobj + 1689 0 obj << + /D [1672 0 R /XYZ 90 281.911 null] + >> endobj + 1690 0 obj << + /D [1672 0 R /XYZ 90 267.664 null] + >> endobj + 1691 0 obj << + /D [1672 0 R /XYZ 90 253.417 null] + >> endobj + 1692 0 obj << + /D [1672 0 R /XYZ 90 239.171 null] + >> endobj + 1693 0 obj << + /D [1672 0 R /XYZ 90 224.924 null] + >> endobj + 1694 0 obj << + /D [1672 0 R /XYZ 90 196.431 null] + >> endobj + 1695 0 obj << + /D [1672 0 R /XYZ 90 182.184 null] + >> endobj + 1696 0 obj << + /D [1672 0 R /XYZ 90 153.691 null] + >> endobj + 1697 0 obj << + /D [1672 0 R /XYZ 90 139.445 null] + >> endobj + 1698 0 obj << + /D [1672 0 R /XYZ 90 125.198 null] + >> endobj + 1699 0 obj << + /D [1672 0 R /XYZ 90 110.951 null] + >> endobj + 1700 0 obj << + /D [1672 0 R /XYZ 90 96.705 null] + >> endobj + 1671 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F19 498 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1703 0 obj << + /Length 2498 + /Filter /FlateDecode + >> + stream + x??\Ko?F??W??bf??+ ?+???n???E???? ?????6c????B?X?'?fC??R??M 9?"??z&?V?d(??t]???????????}CC?????6v??bgA-<8uSD5[?K???oy! J#???9???NP'???U?U'?:o?????}g at 2j??d3g????????? H^??&A??B?@?&|a???i?????.???\?? g??p??Ig@??????!?)(?(??w???k???)?? ?w???_??|???l????|Y,??+?#?"?b)%???I9?3??)?!?u?? #7?y@??D?p?,i7?????R?D]:??w???????c?W(???k?(??I?;PN??`??????3???Rqn"??e?????v+??)?C??Q??~??e??????? ??? ??Q]?????.????Dc?0pOQ^?=63sZ??K?>?=???N9D9)???$??????-??3 3????_??N?rZ??G'4?a??@????IAD?8@?$*?/?z??5L?.?DO?c??????? ?x?X?5(?,????7l?19??~?+ ??r?? ?????M?=???O??$???jw + 0-????j?8;????+ [3 + ???8v?????f?1??? x??????VM?2c????a'M?f?a&???? X??q?T?g???j?E?T?_?'k???C] > endobj + 1704 0 obj << + /D [1702 0 R /XYZ 89 757 null] + >> endobj + 1705 0 obj << + /D [1702 0 R /XYZ 90 730.319 null] + >> endobj + 1706 0 obj << + /D [1702 0 R /XYZ 90 716.072 null] + >> endobj + 1707 0 obj << + /D [1702 0 R /XYZ 90 701.826 null] + >> endobj + 1708 0 obj << + /D [1702 0 R /XYZ 90 687.579 null] + >> endobj + 1709 0 obj << + /D [1702 0 R /XYZ 90 673.332 null] + >> endobj + 1710 0 obj << + /D [1702 0 R /XYZ 90 659.086 null] + >> endobj + 1711 0 obj << + /D [1702 0 R /XYZ 90 644.839 null] + >> endobj + 1712 0 obj << + /D [1702 0 R /XYZ 90 630.593 null] + >> endobj + 1713 0 obj << + /D [1702 0 R /XYZ 90 616.346 null] + >> endobj + 1714 0 obj << + /D [1702 0 R /XYZ 90 602.1 null] + >> endobj + 1715 0 obj << + /D [1702 0 R /XYZ 90 587.853 null] + >> endobj + 1716 0 obj << + /D [1702 0 R /XYZ 90 573.606 null] + >> endobj + 1717 0 obj << + /D [1702 0 R /XYZ 90 559.36 null] + >> endobj + 1718 0 obj << + /D [1702 0 R /XYZ 90 545.113 null] + >> endobj + 1719 0 obj << + /D [1702 0 R /XYZ 90 530.867 null] + >> endobj + 1720 0 obj << + /D [1702 0 R /XYZ 90 516.62 null] + >> endobj + 1721 0 obj << + /D [1702 0 R /XYZ 90 502.373 null] + >> endobj + 1722 0 obj << + /D [1702 0 R /XYZ 90 488.127 null] + >> endobj + 1723 0 obj << + /D [1702 0 R /XYZ 90 473.88 null] + >> endobj + 1724 0 obj << + /D [1702 0 R /XYZ 90 459.634 null] + >> endobj + 1725 0 obj << + /D [1702 0 R /XYZ 90 445.387 null] + >> endobj + 1726 0 obj << + /D [1702 0 R /XYZ 90 431.14 null] + >> endobj + 1727 0 obj << + /D [1702 0 R /XYZ 90 416.894 null] + >> endobj + 1728 0 obj << + /D [1702 0 R /XYZ 90 402.647 null] + >> endobj + 1729 0 obj << + /D [1702 0 R /XYZ 90 388.401 null] + >> endobj + 1730 0 obj << + /D [1702 0 R /XYZ 90 374.154 null] + >> endobj + 1731 0 obj << + /D [1702 0 R /XYZ 90 359.907 null] + >> endobj + 1732 0 obj << + /D [1702 0 R /XYZ 90 345.661 null] + >> endobj + 1733 0 obj << + /D [1702 0 R /XYZ 90 331.414 null] + >> endobj + 1734 0 obj << + /D [1702 0 R /XYZ 90 317.168 null] + >> endobj + 1735 0 obj << + /D [1702 0 R /XYZ 90 302.921 null] + >> endobj + 1736 0 obj << + /D [1702 0 R /XYZ 90 288.674 null] + >> endobj + 1737 0 obj << + /D [1702 0 R /XYZ 90 274.428 null] + >> endobj + 1738 0 obj << + /D [1702 0 R /XYZ 90 260.181 null] + >> endobj + 1739 0 obj << + /D [1702 0 R /XYZ 90 245.935 null] + >> endobj + 1740 0 obj << + /D [1702 0 R /XYZ 90 231.688 null] + >> endobj + 1741 0 obj << + /D [1702 0 R /XYZ 90 217.441 null] + >> endobj + 1742 0 obj << + /D [1702 0 R /XYZ 90 203.195 null] + >> endobj + 1743 0 obj << + /D [1702 0 R /XYZ 90 188.948 null] + >> endobj + 1744 0 obj << + /D [1702 0 R /XYZ 90 174.702 null] + >> endobj + 1745 0 obj << + /D [1702 0 R /XYZ 90 160.455 null] + >> endobj + 1746 0 obj << + /D [1702 0 R /XYZ 90 146.209 null] + >> endobj + 1747 0 obj << + /D [1702 0 R /XYZ 90 131.962 null] + >> endobj + 1748 0 obj << + /D [1702 0 R /XYZ 90 117.715 null] + >> endobj + 1749 0 obj << + /D [1702 0 R /XYZ 90 103.469 null] + >> endobj + 1701 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1752 0 obj << + /Length 3517 + /Filter /FlateDecode + >> + stream + x??\Ys?~??@?%?*q5??JR%J?-??8??U! HB???CV~}z??Y ???????h??.v????b?q ?n?l=?F?Al?Snp?a???:-??O??????p{G???N&??+???1?>??;?????s????????h???/?g?}?v[*??c?????^l??%?i?@???678>???g1?????1 >c???(M?'??[??MD???np?s?qp??w?V?l?x)[O?u???h?*???*i??g??+ ???* ??VzK?^???T???+? ???IW?H?RtcG?;Q4??^????r?????w?????N0??J:p???t\?s??P????SXA?h?J??/?>H+?????D=h???t'?e?t?,?Z?1's?#?KeC???K??GI~F???]???j?/d?=B??>???ZSd?&[?r?|?H??? ????*]? ?1O?Yi*?? + ?#^???E?[?O3?.??n??r????????????~xz???>7? 8KR? ??2D?"|lNAG8N??b?8??T6I.?%?t???Crs??? ??.N??X>&??$ ?+?|+ ???w??/? C?i2= C*???%??W'???I_UV?_? + ?Rr?&8?? ?x *Y?,???a?$??9,u????A??!??1??????\??k?!N?b B?N7!z?#g????8X?C?#z???????Q?7/?,??:???Q?w JP7J??j?@?ASP"???????M?f?01Q?e????qf?3??????h?ZFy{J???e???`?? ?k?L?I???zv???I?a?zF??Z?Cu????Vb?+?e????buY???*?54?T?3?????????4??+????+!??! :?%????;5_W??9??4?@?5k????3???*?oIf?`?[q?t??M9????*#Lb???4]?D???P1?Fa???{?9? )?NNr??a?????????d?q??!+??~H??H????9l??;?+ ??2F:??.? ??Jj???t?J?1????5???|6l?|?2??????%??d?,??uz:?jJ?N + ?0H%?%??U????W?QD???r????J??-E?Y?0k?z3h?,???S??*??nR!?????t?F????J???-?>??lL?&M??yNL ????(?j_??J?L?z?????????K?c????????F??;????$?????,???w|???pPK5UB,?&?????w???b?3O??????Z???U)??????3?)??:D???k???KY(?)??FSU#?EM?????F??k'??,5?????k^????s???)D+n?B???h?E~?S?+?#v?#?l??\ ?Y ?:??? ???5"/?^Uk?Umw??W??B?O?????SxI????O??A((l at o??$[??~?3w??F?????q????W( ?[ ???????a??6??nH??J_W??l??6FX;?>? :C????r???????4a?(?4S??%?A%?*?8??m?q/?>Nm\?J??{? a? + ?q?+?????????W]?F???'?c?l?(?E-o?#N?????????z?;??????{?;?&99?:??#?.???_????????1_?~m??X??%Xc:\c?_=? 71\?zJ???????y?m??L?nB?oRu????y ??l???)?!?????? Q???h????(0???r???#z?-`????K??AP$A??+?$%u?????J?x??M?:??????????J???.|???????oqlo?? 7??6?*x?????. ?b}!u;?c?Z?????]Q???????y/+???|?.?$ e??S?+?WNQe??W? 7)???%? e??;j>7/??\????o????i????`??????#.?.o`}?7?bg? ???0???Ptz?W? ???????P????E???o|?}Z??]1=?.C_jk??&?U/?'???K$)????p????\]?Tu????]2??r?,c/+ ?J???u?g??r&@-?yn '%T???u?@??!!k?????K!??"t??????m?????w?b?0???&?I?;0?.?bUG?-f?a????+???????*?89`?|??>???U\??#?????}]Tm_uL?$? c??M??2N????%??eL?l???? + N?Z?i?5B??tAH!??5?T?&???uMj??~t???1???zH?\?C???zn?S???,?%??????J???5??t?@!M???V??M??De?+?_????p????(? ???????j??+???7Y4{=?????nW?_4???????3?J?rwC??+ `?????t{+ ????ug?w?????^?????k??e??-?*?zn???g?[I7%??~i|?????!iU? [????Qq??Q??!ZB??x???e??|??||R-?L??I??????????y????/??U???B?????B??^??&???H?u?%~?e?,[?OY6????.?[??????Z-e??????$???V[s????? + ??Znt ?[e3???;??_delv^?;?Oh?????Qn?}???????13?"?iM?e??t?? ??N??^=??????????????^???? + endstream + endobj + 1751 0 obj << + /Type /Page + /Contents 1752 0 R + /Resources 1750 0 R + /MediaBox [0 0 612 792] + /Parent 1670 0 R + >> endobj + 1753 0 obj << + /D [1751 0 R /XYZ 89 757 null] + >> endobj + 1754 0 obj << + /D [1751 0 R /XYZ 90 730.319 null] + >> endobj + 1755 0 obj << + /D [1751 0 R /XYZ 90 716.072 null] + >> endobj + 1756 0 obj << + /D [1751 0 R /XYZ 90 701.826 null] + >> endobj + 1757 0 obj << + /D [1751 0 R /XYZ 90 687.579 null] + >> endobj + 1758 0 obj << + /D [1751 0 R /XYZ 90 673.332 null] + >> endobj + 1759 0 obj << + /D [1751 0 R /XYZ 90 659.086 null] + >> endobj + 1760 0 obj << + /D [1751 0 R /XYZ 90 644.839 null] + >> endobj + 1761 0 obj << + /D [1751 0 R /XYZ 90 630.593 null] + >> endobj + 1762 0 obj << + /D [1751 0 R /XYZ 90 616.346 null] + >> endobj + 1763 0 obj << + /D [1751 0 R /XYZ 90 602.1 null] + >> endobj + 1764 0 obj << + /D [1751 0 R /XYZ 90 587.853 null] + >> endobj + 1765 0 obj << + /D [1751 0 R /XYZ 90 573.606 null] + >> endobj + 1766 0 obj << + /D [1751 0 R /XYZ 90 545.113 null] + >> endobj + 1767 0 obj << + /D [1751 0 R /XYZ 90 516.62 null] + >> endobj + 1768 0 obj << + /D [1751 0 R /XYZ 90 502.373 null] + >> endobj + 1769 0 obj << + /D [1751 0 R /XYZ 90 488.127 null] + >> endobj + 1770 0 obj << + /D [1751 0 R /XYZ 90 473.88 null] + >> endobj + 1771 0 obj << + /D [1751 0 R /XYZ 90 459.634 null] + >> endobj + 1772 0 obj << + /D [1751 0 R /XYZ 90 445.387 null] + >> endobj + 1773 0 obj << + /D [1751 0 R /XYZ 90 431.14 null] + >> endobj + 1774 0 obj << + /D [1751 0 R /XYZ 90 416.894 null] + >> endobj + 1775 0 obj << + /D [1751 0 R /XYZ 90 388.401 null] + >> endobj + 1776 0 obj << + /D [1751 0 R /XYZ 90 345.661 null] + >> endobj + 1777 0 obj << + /D [1751 0 R /XYZ 90 331.414 null] + >> endobj + 1778 0 obj << + /D [1751 0 R /XYZ 90 317.168 null] + >> endobj + 1779 0 obj << + /D [1751 0 R /XYZ 90 302.921 null] + >> endobj + 1780 0 obj << + /D [1751 0 R /XYZ 90 288.674 null] + >> endobj + 1781 0 obj << + /D [1751 0 R /XYZ 90 274.428 null] + >> endobj + 1782 0 obj << + /D [1751 0 R /XYZ 90 260.181 null] + >> endobj + 1783 0 obj << + /D [1751 0 R /XYZ 90 245.935 null] + >> endobj + 1784 0 obj << + /D [1751 0 R /XYZ 90 231.688 null] + >> endobj + 1785 0 obj << + /D [1751 0 R /XYZ 90 203.195 null] + >> endobj + 1786 0 obj << + /D [1751 0 R /XYZ 90 188.948 null] + >> endobj + 1787 0 obj << + /D [1751 0 R /XYZ 90 174.702 null] + >> endobj + 1788 0 obj << + /D [1751 0 R /XYZ 90 160.455 null] + >> endobj + 1789 0 obj << + /D [1751 0 R /XYZ 90 146.209 null] + >> endobj + 1790 0 obj << + /D [1751 0 R /XYZ 90 131.962 null] + >> endobj + 1791 0 obj << + /D [1751 0 R /XYZ 90 117.715 null] + >> endobj + 1792 0 obj << + /D [1751 0 R /XYZ 90 103.469 null] + >> endobj + 1750 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1795 0 obj << + /Length 2008 + /Filter /FlateDecode + >> + stream + x??ZKs?6??Wpz?f"o?i?3????$??QrIs?D??X???????!K?X??tY >???%ht??u???y?gQB?u??D ??4D ???K|?? ??????'?<d8?2#_???????????|9??s?[???K?|???8????~?????;?: ??F??.??:?;_??(??7%"?? ??G? x????Z??CY?????2???????V?td#?zdt?- ?f?g?????????+ ?,?n at + Q[???`n(??kec??]?? ????]?b?9??IPN]3?f?????X??? + "?:?f?v?I??"??4??/}???>?P?P.??????WX'??#0??+ ?p?????U {2a?<(q??3??? ??WIx??? + P???S?R???}Hq???0(?e???M?20Vym??v????-z]z????C??j k????H???*??aIw???@?MU ?5?1D0Ro???????????i?2??????n???; + }x ?"???K4'?K?i?0?????D?I?vN??7?Q?????3<%?t?1d?{,????E??o)???I)??V? + )?)?3???5??'#???????o]Eq?j????\V?$? + ???g?|??f?? ?# 6?h???$I?S?r?qI??EN&\?10 ???L7?n@w???????a!???4H???;:??????F???&?:??????2?G???i??C??68f?!?M?u?V??V?i????x????\???>?????k?ko?I??a????? ??!S??&[}L??N?P?????y$d????N???-????"??j??_???e?0???(/jIu ?o??n????K?[?J2??? ?VfT? ?0*?Z??I??rL??V?{?qoe???????V?V@?R + ??&????> ????????i9w?=?M?????}s_??"M?????????sw?x?%z?%D????w??R?d?E:???rP??]?*??z??/???j???~71?xU?v? ???3b?6pa?6???o+ ???#F?QuF???i???H????r??????? + endstream + endobj + 1794 0 obj << + /Type /Page + /Contents 1795 0 R + /Resources 1793 0 R + /MediaBox [0 0 612 792] + /Parent 1670 0 R + /Group 839 0 R + >> endobj + 1796 0 obj << + /D [1794 0 R /XYZ 89 757 null] + >> endobj + 1797 0 obj << + /D [1794 0 R /XYZ 90 730.319 null] + >> endobj + 1798 0 obj << + /D [1794 0 R /XYZ 90 716.072 null] + >> endobj + 1799 0 obj << + /D [1794 0 R /XYZ 90 701.826 null] + >> endobj + 1800 0 obj << + /D [1794 0 R /XYZ 90 687.579 null] + >> endobj + 1801 0 obj << + /D [1794 0 R /XYZ 90 673.332 null] + >> endobj + 1802 0 obj << + /D [1794 0 R /XYZ 90 659.086 null] + >> endobj + 1803 0 obj << + /D [1794 0 R /XYZ 90 644.839 null] + >> endobj + 1804 0 obj << + /D [1794 0 R /XYZ 90 630.593 null] + >> endobj + 1805 0 obj << + /D [1794 0 R /XYZ 90 616.346 null] + >> endobj + 1806 0 obj << + /D [1794 0 R /XYZ 90 602.1 null] + >> endobj + 1807 0 obj << + /D [1794 0 R /XYZ 90 587.853 null] + >> endobj + 1808 0 obj << + /D [1794 0 R /XYZ 90 573.606 null] + >> endobj + 1809 0 obj << + /D [1794 0 R /XYZ 90 559.36 null] + >> endobj + 1810 0 obj << + /D [1794 0 R /XYZ 90 545.113 null] + >> endobj + 1811 0 obj << + /D [1794 0 R /XYZ 90 530.867 null] + >> endobj + 1812 0 obj << + /D [1794 0 R /XYZ 90 516.62 null] + >> endobj + 1813 0 obj << + /D [1794 0 R /XYZ 90 502.373 null] + >> endobj + 1814 0 obj << + /D [1794 0 R /XYZ 90 488.127 null] + >> endobj + 1815 0 obj << + /D [1794 0 R /XYZ 90 473.88 null] + >> endobj + 1816 0 obj << + /D [1794 0 R /XYZ 90 459.634 null] + >> endobj + 1817 0 obj << + /D [1794 0 R /XYZ 90 445.387 null] + >> endobj + 278 0 obj << + /D [1794 0 R /XYZ 90 351.991 null] + >> endobj + 282 0 obj << + /D [1794 0 R /XYZ 90 169.619 null] + >> endobj + 1793 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F31 350 0 R >> + /XObject << /Im8 1068 0 R >> + /ProcSet [ /PDF /Text /ImageC ] + >> endobj + 1820 0 obj << + /Length 1360 + /Filter /FlateDecode + >> + stream + x??Z?n7}?W??? + ?r??yHZ7????-?% + ?? ?E????;????????? ???r9?g???(q.?x?{9?=???2:pbx&??x?P??H??F?'?Q+ ?H0~m?M?/_y???#???*???`h"?_?T?y??7?J??3?mer?;???X?@e??],???n?????????-?\-Y?l?b?'*THe???Y???\??!?%?[???4>v?SG?[???Ff???-?+???I ??????|j?X}??$?Q??? n?p}??z@??? ??M??<?'k?k?_??=%`b?????u?-????W?+ endstream + endobj + 1819 0 obj << + /Type /Page + /Contents 1820 0 R + /Resources 1818 0 R + /MediaBox [0 0 612 792] + /Parent 1670 0 R + >> endobj + 1821 0 obj << + /D [1819 0 R /XYZ 89 757 null] + >> endobj + 1822 0 obj << + /D [1819 0 R /XYZ 95.978 699.744 null] + >> endobj + 1823 0 obj << + /D [1819 0 R /XYZ 95.978 710.493 null] + >> endobj + 1824 0 obj << + /D [1819 0 R /XYZ 95.978 696.247 null] + >> endobj + 1825 0 obj << + /D [1819 0 R /XYZ 95.978 682 null] + >> endobj + 1826 0 obj << + /D [1819 0 R /XYZ 95.978 667.754 null] + >> endobj + 1827 0 obj << + /D [1819 0 R /XYZ 95.978 653.507 null] + >> endobj + 1828 0 obj << + /D [1819 0 R /XYZ 95.978 639.26 null] + >> endobj + 1829 0 obj << + /D [1819 0 R /XYZ 95.978 625.014 null] + >> endobj + 1830 0 obj << + /D [1819 0 R /XYZ 95.978 610.767 null] + >> endobj + 1831 0 obj << + /D [1819 0 R /XYZ 95.978 596.521 null] + >> endobj + 1832 0 obj << + /D [1819 0 R /XYZ 95.978 582.274 null] + >> endobj + 1833 0 obj << + /D [1819 0 R /XYZ 95.978 568.027 null] + >> endobj + 1834 0 obj << + /D [1819 0 R /XYZ 95.978 553.781 null] + >> endobj + 1835 0 obj << + /D [1819 0 R /XYZ 95.978 539.534 null] + >> endobj + 1836 0 obj << + /D [1819 0 R /XYZ 95.978 525.288 null] + >> endobj + 1837 0 obj << + /D [1819 0 R /XYZ 95.978 511.041 null] + >> endobj + 1838 0 obj << + /D [1819 0 R /XYZ 95.978 496.794 null] + >> endobj + 1839 0 obj << + /D [1819 0 R /XYZ 95.978 482.548 null] + >> endobj + 1840 0 obj << + /D [1819 0 R /XYZ 95.978 468.301 null] + >> endobj + 1841 0 obj << + /D [1819 0 R /XYZ 95.978 454.055 null] + >> endobj + 1842 0 obj << + /D [1819 0 R /XYZ 95.978 439.808 null] + >> endobj + 1843 0 obj << + /D [1819 0 R /XYZ 95.978 425.561 null] + >> endobj + 1844 0 obj << + /D [1819 0 R /XYZ 95.978 411.315 null] + >> endobj + 1845 0 obj << + /D [1819 0 R /XYZ 95.978 397.068 null] + >> endobj + 1846 0 obj << + /D [1819 0 R /XYZ 95.978 382.822 null] + >> endobj + 1847 0 obj << + /D [1819 0 R /XYZ 95.978 368.575 null] + >> endobj + 1848 0 obj << + /D [1819 0 R /XYZ 331.388 699.744 null] + >> endobj + 1849 0 obj << + /D [1819 0 R /XYZ 331.388 710.493 null] + >> endobj + 1850 0 obj << + /D [1819 0 R /XYZ 331.388 696.247 null] + >> endobj + 1851 0 obj << + /D [1819 0 R /XYZ 331.388 682 null] + >> endobj + 1852 0 obj << + /D [1819 0 R /XYZ 331.388 667.754 null] + >> endobj + 1853 0 obj << + /D [1819 0 R /XYZ 331.388 653.507 null] + >> endobj + 1854 0 obj << + /D [1819 0 R /XYZ 331.388 639.26 null] + >> endobj + 1818 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1857 0 obj << + /Length 1197 + /Filter /FlateDecode + >> + stream + x???Mo7???l{Y]?3?.zIR??? ?-??"??u%'???p?+??Dr?UVrE??????KR?s?????h??wet???LD%???i??xWL?????D????-??1????2g?sv?j?^?\?^\????n~q}????????????hp0?3+ endstream + endobj + 1856 0 obj << + /Type /Page + /Contents 1857 0 R + /Resources 1855 0 R + /MediaBox [0 0 612 792] + /Parent 1880 0 R + >> endobj + 1858 0 obj << + /D [1856 0 R /XYZ 89 757 null] + >> endobj + 286 0 obj << + /D [1856 0 R /XYZ 90 726.045 null] + >> endobj + 1859 0 obj << + /D [1856 0 R /XYZ 95.978 613.491 null] + >> endobj + 1860 0 obj << + /D [1856 0 R /XYZ 95.978 624.24 null] + >> endobj + 1861 0 obj << + /D [1856 0 R /XYZ 95.978 609.994 null] + >> endobj + 1862 0 obj << + /D [1856 0 R /XYZ 95.978 595.747 null] + >> endobj + 1863 0 obj << + /D [1856 0 R /XYZ 95.978 581.501 null] + >> endobj + 1864 0 obj << + /D [1856 0 R /XYZ 95.978 567.254 null] + >> endobj + 1865 0 obj << + /D [1856 0 R /XYZ 95.978 553.007 null] + >> endobj + 1866 0 obj << + /D [1856 0 R /XYZ 95.978 538.761 null] + >> endobj + 1867 0 obj << + /D [1856 0 R /XYZ 95.978 524.514 null] + >> endobj + 1868 0 obj << + /D [1856 0 R /XYZ 95.978 510.268 null] + >> endobj + 1869 0 obj << + /D [1856 0 R /XYZ 95.978 496.021 null] + >> endobj + 1870 0 obj << + /D [1856 0 R /XYZ 95.978 481.774 null] + >> endobj + 1871 0 obj << + /D [1856 0 R /XYZ 95.978 467.528 null] + >> endobj + 1872 0 obj << + /D [1856 0 R /XYZ 95.978 453.281 null] + >> endobj + 1873 0 obj << + /D [1856 0 R /XYZ 95.978 439.035 null] + >> endobj + 1874 0 obj << + /D [1856 0 R /XYZ 95.978 424.788 null] + >> endobj + 1875 0 obj << + /D [1856 0 R /XYZ 95.978 410.542 null] + >> endobj + 1876 0 obj << + /D [1856 0 R /XYZ 95.978 396.295 null] + >> endobj + 1877 0 obj << + /D [1856 0 R /XYZ 331.388 613.491 null] + >> endobj + 1878 0 obj << + /D [1856 0 R /XYZ 331.388 624.24 null] + >> endobj + 1879 0 obj << + /D [1856 0 R /XYZ 331.388 609.994 null] + >> endobj + 290 0 obj << + /D [1856 0 R /XYZ 90 215.622 null] + >> endobj + 1855 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1883 0 obj << + /Length 1158 + /Filter /FlateDecode + >> + stream + x??YMo7??W??et??c? + $??H??z ?B?dC?e??????CrWYI??8+?.?.?%9?o?oI%.?/{/??g ? ?C'??"(A??? ???L>??~?????b?\? *c + =??e??????0??v=??]N???vvu?_?????7????`???<% ???7N??????p??PR/>?VsaPs~)?z?z?i?VMK? ?[C.[????.??@?vq}???%8????n????$???|q!?????? )hA?I???%???*k?z??pAE?z????? ??`??-L? + ??@z7 + `$???E????q???\?l1n?u?H?#??c???n?R???p?:???l???,#=?5??????Md??)]F???b???U#??u? ?8]?t??\>O??m^? Q?[-??????c?*?o?????????>?O???MZ??+ ?I5t??kj?ums??~? ?.*??ei?U???o?1????y{?I#IT?{??cJ}?A???vy]??Q?'C???h?????$ + ????h???? + ??O?w????????@??~,??u?:?_^??M???Fh??s-? w"^????}{88??R???.??? ~_?n???q||??i?1m??]X^ + [????????P????????r?%Ne?T??Wb?An?6h#??u??????/???~???g?????U *6??YG]" + endstream + endobj + 1882 0 obj << + /Type /Page + /Contents 1883 0 R + /Resources 1881 0 R + /MediaBox [0 0 612 792] + /Parent 1880 0 R + >> endobj + 1884 0 obj << + /D [1882 0 R /XYZ 89 757 null] + >> endobj + 1885 0 obj << + /D [1882 0 R /XYZ 95.978 699.744 null] + >> endobj + 1886 0 obj << + /D [1882 0 R /XYZ 95.978 710.493 null] + >> endobj + 1887 0 obj << + /D [1882 0 R /XYZ 95.978 696.247 null] + >> endobj + 1888 0 obj << + /D [1882 0 R /XYZ 95.978 682 null] + >> endobj + 1889 0 obj << + /D [1882 0 R /XYZ 95.978 667.754 null] + >> endobj + 1890 0 obj << + /D [1882 0 R /XYZ 95.978 653.507 null] + >> endobj + 1891 0 obj << + /D [1882 0 R /XYZ 95.978 639.26 null] + >> endobj + 1892 0 obj << + /D [1882 0 R /XYZ 95.978 625.014 null] + >> endobj + 1893 0 obj << + /D [1882 0 R /XYZ 95.978 610.767 null] + >> endobj + 1894 0 obj << + /D [1882 0 R /XYZ 95.978 596.521 null] + >> endobj + 1895 0 obj << + /D [1882 0 R /XYZ 95.978 582.274 null] + >> endobj + 1896 0 obj << + /D [1882 0 R /XYZ 95.978 568.027 null] + >> endobj + 1897 0 obj << + /D [1882 0 R /XYZ 95.978 553.781 null] + >> endobj + 1898 0 obj << + /D [1882 0 R /XYZ 95.978 539.534 null] + >> endobj + 1899 0 obj << + /D [1882 0 R /XYZ 95.978 525.288 null] + >> endobj + 1900 0 obj << + /D [1882 0 R /XYZ 95.978 511.041 null] + >> endobj + 1901 0 obj << + /D [1882 0 R /XYZ 95.978 496.794 null] + >> endobj + 1902 0 obj << + /D [1882 0 R /XYZ 95.978 482.548 null] + >> endobj + 1903 0 obj << + /D [1882 0 R /XYZ 331.388 699.744 null] + >> endobj + 1904 0 obj << + /D [1882 0 R /XYZ 331.388 710.493 null] + >> endobj + 1905 0 obj << + /D [1882 0 R /XYZ 331.388 696.247 null] + >> endobj + 1906 0 obj << + /D [1882 0 R /XYZ 331.388 682 null] + >> endobj + 1907 0 obj << + /D [1882 0 R /XYZ 331.388 667.754 null] + >> endobj + 1881 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1910 0 obj << + /Length 1246 + /Filter /FlateDecode + >> + stream + x????o?6???Wp??L,??=lm? R?K?????Nf _?????w$%G?S;I??/?DJ????x< + v?;????????Jer?????H???Azxusu;????m1?^_????Pd??? ?{?A?Sh4?A?]r? ]??lL??Lp????b + %?????WO4g"? ?^k??? ?i*?8r? ??N(??d6?!y?????M??????2=?????y]1????q?u?u?pSso+??F?4?????yj?]ysQ?h$?I??]?CUl?[?????`??:=Z# ?z? ??l?)??????J ?+fPr?j[ ???????CZ+ RB?,?? 1??(c?X~Drs?C????b???b:i[? ?Q9+ k???TX??,pi4??9??"x(V?XO????????E?-??LX*??!? IKm*?a?64> endobj + 1911 0 obj << + /D [1909 0 R /XYZ 89 757 null] + >> endobj + 294 0 obj << + /D [1909 0 R /XYZ 90 726.045 null] + >> endobj + 1912 0 obj << + /D [1909 0 R /XYZ 95.978 613.491 null] + >> endobj + 1913 0 obj << + /D [1909 0 R /XYZ 95.978 624.24 null] + >> endobj + 1914 0 obj << + /D [1909 0 R /XYZ 95.978 609.994 null] + >> endobj + 1915 0 obj << + /D [1909 0 R /XYZ 95.978 595.747 null] + >> endobj + 1916 0 obj << + /D [1909 0 R /XYZ 95.978 581.501 null] + >> endobj + 1917 0 obj << + /D [1909 0 R /XYZ 95.978 567.254 null] + >> endobj + 1918 0 obj << + /D [1909 0 R /XYZ 95.978 553.007 null] + >> endobj + 1919 0 obj << + /D [1909 0 R /XYZ 95.978 538.761 null] + >> endobj + 1920 0 obj << + /D [1909 0 R /XYZ 95.978 524.514 null] + >> endobj + 1921 0 obj << + /D [1909 0 R /XYZ 95.978 510.268 null] + >> endobj + 1922 0 obj << + /D [1909 0 R /XYZ 95.978 496.021 null] + >> endobj + 1923 0 obj << + /D [1909 0 R /XYZ 95.978 481.774 null] + >> endobj + 1924 0 obj << + /D [1909 0 R /XYZ 95.978 467.528 null] + >> endobj + 1925 0 obj << + /D [1909 0 R /XYZ 95.978 453.281 null] + >> endobj + 1926 0 obj << + /D [1909 0 R /XYZ 95.978 439.035 null] + >> endobj + 1927 0 obj << + /D [1909 0 R /XYZ 95.978 424.788 null] + >> endobj + 1928 0 obj << + /D [1909 0 R /XYZ 95.978 410.542 null] + >> endobj + 1929 0 obj << + /D [1909 0 R /XYZ 95.978 396.295 null] + >> endobj + 1930 0 obj << + /D [1909 0 R /XYZ 331.388 613.491 null] + >> endobj + 1931 0 obj << + /D [1909 0 R /XYZ 331.388 624.24 null] + >> endobj + 1932 0 obj << + /D [1909 0 R /XYZ 331.388 609.994 null] + >> endobj + 1933 0 obj << + /D [1909 0 R /XYZ 331.388 595.747 null] + >> endobj + 1934 0 obj << + /D [1909 0 R /XYZ 331.388 581.501 null] + >> endobj + 298 0 obj << + /D [1909 0 R /XYZ 90 215.622 null] + >> endobj + 1908 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1937 0 obj << + /Length 1156 + /Filter /FlateDecode + >> + stream + x??Ymo?6??_?m_d`by??#l@?yE??c_?bpm'???N???II????R9?R?Q??s???gB???????D????S? C?i??x_?f?'???D????b1_???1????2W?su?j?/~???9??/??????,_?~=T??o??G??x??+ endstream + endobj + 1936 0 obj << + /Type /Page + /Contents 1937 0 R + /Resources 1935 0 R + /MediaBox [0 0 612 792] + /Parent 1880 0 R + >> endobj + 1938 0 obj << + /D [1936 0 R /XYZ 89 757 null] + >> endobj + 1939 0 obj << + /D [1936 0 R /XYZ 95.978 699.744 null] + >> endobj + 1940 0 obj << + /D [1936 0 R /XYZ 95.978 710.493 null] + >> endobj + 1941 0 obj << + /D [1936 0 R /XYZ 95.978 696.247 null] + >> endobj + 1942 0 obj << + /D [1936 0 R /XYZ 95.978 682 null] + >> endobj + 1943 0 obj << + /D [1936 0 R /XYZ 95.978 667.754 null] + >> endobj + 1944 0 obj << + /D [1936 0 R /XYZ 95.978 653.507 null] + >> endobj + 1945 0 obj << + /D [1936 0 R /XYZ 95.978 639.26 null] + >> endobj + 1946 0 obj << + /D [1936 0 R /XYZ 95.978 625.014 null] + >> endobj + 1947 0 obj << + /D [1936 0 R /XYZ 95.978 610.767 null] + >> endobj + 1948 0 obj << + /D [1936 0 R /XYZ 95.978 596.521 null] + >> endobj + 1949 0 obj << + /D [1936 0 R /XYZ 95.978 582.274 null] + >> endobj + 1950 0 obj << + /D [1936 0 R /XYZ 95.978 568.027 null] + >> endobj + 1951 0 obj << + /D [1936 0 R /XYZ 95.978 553.781 null] + >> endobj + 1952 0 obj << + /D [1936 0 R /XYZ 95.978 539.534 null] + >> endobj + 1953 0 obj << + /D [1936 0 R /XYZ 95.978 525.288 null] + >> endobj + 1954 0 obj << + /D [1936 0 R /XYZ 95.978 511.041 null] + >> endobj + 1955 0 obj << + /D [1936 0 R /XYZ 95.978 496.794 null] + >> endobj + 1956 0 obj << + /D [1936 0 R /XYZ 95.978 482.548 null] + >> endobj + 1957 0 obj << + /D [1936 0 R /XYZ 331.388 699.744 null] + >> endobj + 1958 0 obj << + /D [1936 0 R /XYZ 331.388 710.493 null] + >> endobj + 1959 0 obj << + /D [1936 0 R /XYZ 331.388 696.247 null] + >> endobj + 1960 0 obj << + /D [1936 0 R /XYZ 331.388 682 null] + >> endobj + 1961 0 obj << + /D [1936 0 R /XYZ 331.388 667.754 null] + >> endobj + 1935 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1964 0 obj << + /Length 1994 + /Filter /FlateDecode + >> + stream + x??[Yo7~????}X???+ ?M ?*?p:?k?Q?I>?? ^?"9??????r=!)?Q0?Z????K;??">t9o????u?"???:tA??*?????A ?gd????Y??2??I??R??5?l{n??m????z 7????Z/??-HF??s???cVj?&?? "? .?n3?L>%G9???`?RJ????^????kA?p????[I&r??YIz???????ZI????????????????O?????P??#@??w????%:)??1??7???! ??? dUp> endobj + 1965 0 obj << + /D [1963 0 R /XYZ 89 757 null] + >> endobj + 302 0 obj << + /D [1963 0 R /XYZ 90 726.045 null] + >> endobj + 1966 0 obj << + /D [1963 0 R /XYZ 95.978 663.649 null] + >> endobj + 1967 0 obj << + /D [1963 0 R /XYZ 95.978 674.399 null] + >> endobj + 1968 0 obj << + /D [1963 0 R /XYZ 95.978 660.152 null] + >> endobj + 1969 0 obj << + /D [1963 0 R /XYZ 95.978 645.905 null] + >> endobj + 1970 0 obj << + /D [1963 0 R /XYZ 95.978 631.659 null] + >> endobj + 1971 0 obj << + /D [1963 0 R /XYZ 95.978 617.412 null] + >> endobj + 1972 0 obj << + /D [1963 0 R /XYZ 95.978 603.166 null] + >> endobj + 1973 0 obj << + /D [1963 0 R /XYZ 95.978 588.919 null] + >> endobj + 1974 0 obj << + /D [1963 0 R /XYZ 95.978 574.673 null] + >> endobj + 1975 0 obj << + /D [1963 0 R /XYZ 95.978 560.426 null] + >> endobj + 1976 0 obj << + /D [1963 0 R /XYZ 95.978 546.179 null] + >> endobj + 1977 0 obj << + /D [1963 0 R /XYZ 95.978 531.933 null] + >> endobj + 1978 0 obj << + /D [1963 0 R /XYZ 95.978 517.686 null] + >> endobj + 1979 0 obj << + /D [1963 0 R /XYZ 95.978 503.44 null] + >> endobj + 1980 0 obj << + /D [1963 0 R /XYZ 95.978 489.193 null] + >> endobj + 1981 0 obj << + /D [1963 0 R /XYZ 95.978 474.946 null] + >> endobj + 1982 0 obj << + /D [1963 0 R /XYZ 95.978 460.7 null] + >> endobj + 1983 0 obj << + /D [1963 0 R /XYZ 95.978 446.453 null] + >> endobj + 1984 0 obj << + /D [1963 0 R /XYZ 95.978 432.207 null] + >> endobj + 1985 0 obj << + /D [1963 0 R /XYZ 95.978 417.96 null] + >> endobj + 1986 0 obj << + /D [1963 0 R /XYZ 95.978 403.713 null] + >> endobj + 1987 0 obj << + /D [1963 0 R /XYZ 95.978 389.467 null] + >> endobj + 1988 0 obj << + /D [1963 0 R /XYZ 95.978 375.22 null] + >> endobj + 1989 0 obj << + /D [1963 0 R /XYZ 95.978 360.974 null] + >> endobj + 1990 0 obj << + /D [1963 0 R /XYZ 95.978 346.727 null] + >> endobj + 1991 0 obj << + /D [1963 0 R /XYZ 95.978 332.48 null] + >> endobj + 1992 0 obj << + /D [1963 0 R /XYZ 331.388 663.649 null] + >> endobj + 1993 0 obj << + /D [1963 0 R /XYZ 331.388 674.399 null] + >> endobj + 1994 0 obj << + /D [1963 0 R /XYZ 331.388 645.905 null] + >> endobj + 306 0 obj << + /D [1963 0 R /XYZ 90 266.284 null] + >> endobj + 310 0 obj << + /D [1963 0 R /XYZ 90 225.819 null] + >> endobj + 1351 0 obj << + /D [1963 0 R /XYZ 90 186.698 null] + >> endobj + 1995 0 obj << + /D [1963 0 R /XYZ 90 167.938 null] + >> endobj + 1996 0 obj << + /D [1963 0 R /XYZ 90 153.691 null] + >> endobj + 1997 0 obj << + /D [1963 0 R /XYZ 90 139.445 null] + >> endobj + 1998 0 obj << + /D [1963 0 R /XYZ 90 125.198 null] + >> endobj + 1999 0 obj << + /D [1963 0 R /XYZ 90 110.951 null] + >> endobj + 2000 0 obj << + /D [1963 0 R /XYZ 90 96.705 null] + >> endobj + 1962 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2003 0 obj << + /Length 2162 + /Filter /FlateDecode + >> + stream + x??[[o?~??X?i}R????m? ???(P?A!KJ? + [Ne?iQ??~f??-?????????????|???}%?'???|?\AEt?U???(+o?p??i??~6?8^N?F?????r9[??DIcj=I?G??m:???u_?:%??<{{??????'?_#+H??E0??\??y+?)^YI?c?>?SW?Q???O'?9?y&Rx ?U??????[?_???* e???R?' ?] ?-??5=??????????????????Q??Qu??rBC+ ??????VbO?????t?b=??1U1f?k ?yH?k??H????=???k??"????)???????-?Eb?,?T"3y?Gb?9Q??'k????????,??5?X^???BdAD/?~?E???B?/??)K? ??q??k?/????Y????#??p,?C&C&???++ ??????e?v,C ???Q5!P?"?? ?f8??>??????@????o?x8m??" ???????O_>D|?3r???O???h???!@???i?1?? O(-???> endobj + 2004 0 obj << + /D [2002 0 R /XYZ 89 757 null] + >> endobj + 2005 0 obj << + /D [2002 0 R /XYZ 90 730.319 null] + >> endobj + 2006 0 obj << + /D [2002 0 R /XYZ 90 716.072 null] + >> endobj + 2007 0 obj << + /D [2002 0 R /XYZ 90 701.826 null] + >> endobj + 2008 0 obj << + /D [2002 0 R /XYZ 90 687.579 null] + >> endobj + 2009 0 obj << + /D [2002 0 R /XYZ 90 673.332 null] + >> endobj + 2010 0 obj << + /D [2002 0 R /XYZ 90 659.086 null] + >> endobj + 2011 0 obj << + /D [2002 0 R /XYZ 90 644.839 null] + >> endobj + 2012 0 obj << + /D [2002 0 R /XYZ 90 630.593 null] + >> endobj + 2013 0 obj << + /D [2002 0 R /XYZ 90 616.346 null] + >> endobj + 2014 0 obj << + /D [2002 0 R /XYZ 90 602.1 null] + >> endobj + 2015 0 obj << + /D [2002 0 R /XYZ 90 587.853 null] + >> endobj + 2016 0 obj << + /D [2002 0 R /XYZ 90 573.606 null] + >> endobj + 2017 0 obj << + /D [2002 0 R /XYZ 90 559.36 null] + >> endobj + 2018 0 obj << + /D [2002 0 R /XYZ 90 545.113 null] + >> endobj + 2019 0 obj << + /D [2002 0 R /XYZ 90 530.867 null] + >> endobj + 2020 0 obj << + /D [2002 0 R /XYZ 90 516.62 null] + >> endobj + 2021 0 obj << + /D [2002 0 R /XYZ 90 502.373 null] + >> endobj + 2022 0 obj << + /D [2002 0 R /XYZ 90 488.127 null] + >> endobj + 2023 0 obj << + /D [2002 0 R /XYZ 90 473.88 null] + >> endobj + 2024 0 obj << + /D [2002 0 R /XYZ 90 459.634 null] + >> endobj + 2025 0 obj << + /D [2002 0 R /XYZ 90 445.387 null] + >> endobj + 2026 0 obj << + /D [2002 0 R /XYZ 90 431.14 null] + >> endobj + 1354 0 obj << + /D [2002 0 R /XYZ 90 399.326 null] + >> endobj + 2027 0 obj << + /D [2002 0 R /XYZ 90 381.637 null] + >> endobj + 2028 0 obj << + /D [2002 0 R /XYZ 90 367.39 null] + >> endobj + 2029 0 obj << + /D [2002 0 R /XYZ 90 353.144 null] + >> endobj + 2030 0 obj << + /D [2002 0 R /XYZ 90 338.897 null] + >> endobj + 2031 0 obj << + /D [2002 0 R /XYZ 90 324.65 null] + >> endobj + 2032 0 obj << + /D [2002 0 R /XYZ 90 310.404 null] + >> endobj + 2033 0 obj << + /D [2002 0 R /XYZ 90 296.157 null] + >> endobj + 2034 0 obj << + /D [2002 0 R /XYZ 90 281.911 null] + >> endobj + 2035 0 obj << + /D [2002 0 R /XYZ 90 267.664 null] + >> endobj + 2036 0 obj << + /D [2002 0 R /XYZ 90 253.417 null] + >> endobj + 2037 0 obj << + /D [2002 0 R /XYZ 90 239.171 null] + >> endobj + 2038 0 obj << + /D [2002 0 R /XYZ 90 224.924 null] + >> endobj + 2039 0 obj << + /D [2002 0 R /XYZ 90 210.678 null] + >> endobj + 2040 0 obj << + /D [2002 0 R /XYZ 90 196.431 null] + >> endobj + 2041 0 obj << + /D [2002 0 R /XYZ 90 182.184 null] + >> endobj + 2042 0 obj << + /D [2002 0 R /XYZ 90 167.938 null] + >> endobj + 2043 0 obj << + /D [2002 0 R /XYZ 90 153.691 null] + >> endobj + 2044 0 obj << + /D [2002 0 R /XYZ 90 139.445 null] + >> endobj + 2045 0 obj << + /D [2002 0 R /XYZ 90 125.198 null] + >> endobj + 2046 0 obj << + /D [2002 0 R /XYZ 90 110.951 null] + >> endobj + 2047 0 obj << + /D [2002 0 R /XYZ 90 96.705 null] + >> endobj + 2001 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2050 0 obj << + /Length 1361 + /Filter /FlateDecode + >> + stream + x??YYo7~????/+??????M`1?+ ?%WG?>??w8???F?????&?~??+??BW?????%?"????/E??7^8??v??X^??:?~?>??;??`6? HcJ???'?sr???o??????s??pt??77M???]?S??q?n??P?Y(?]?`\?{h|?$?>?_R??'j?P????4>4d??^????trW|???je?`EP??J ?Sm?[??[?e???)-???n??E?E??J(o1qBz?C+ ??1?+?r at rFrN??G??2P????[?BK{|?\??1?f????0?U??S7". + iO??8?G???c?2) + ???T?ZvYU?J:?M??????f8?-??a^6[???r??:???+????2????l???QV??N????0?????x??P?Fp4B?m??_>!?>#?B?N? J??+ _r?d)?5B?E??(????:E@?????+??#??x???QrI?????a???$??U??6}????u?J7??(??}???V??Vq?> endobj + 2051 0 obj << + /D [2049 0 R /XYZ 89 757 null] + >> endobj + 2052 0 obj << + /D [2049 0 R /XYZ 90 730.319 null] + >> endobj + 2053 0 obj << + /D [2049 0 R /XYZ 90 716.072 null] + >> endobj + 2054 0 obj << + /D [2049 0 R /XYZ 90 701.826 null] + >> endobj + 2055 0 obj << + /D [2049 0 R /XYZ 90 687.579 null] + >> endobj + 1353 0 obj << + /D [2049 0 R /XYZ 90 657.103 null] + >> endobj + 2056 0 obj << + /D [2049 0 R /XYZ 90 639.748 null] + >> endobj + 2057 0 obj << + /D [2049 0 R /XYZ 90 625.502 null] + >> endobj + 2058 0 obj << + /D [2049 0 R /XYZ 90 611.255 null] + >> endobj + 2059 0 obj << + /D [2049 0 R /XYZ 90 597.009 null] + >> endobj + 2060 0 obj << + /D [2049 0 R /XYZ 90 582.762 null] + >> endobj + 2061 0 obj << + /D [2049 0 R /XYZ 90 568.515 null] + >> endobj + 2062 0 obj << + /D [2049 0 R /XYZ 90 554.269 null] + >> endobj + 2063 0 obj << + /D [2049 0 R /XYZ 90 540.022 null] + >> endobj + 2064 0 obj << + /D [2049 0 R /XYZ 90 525.776 null] + >> endobj + 2065 0 obj << + /D [2049 0 R /XYZ 90 511.529 null] + >> endobj + 2066 0 obj << + /D [2049 0 R /XYZ 90 497.282 null] + >> endobj + 2067 0 obj << + /D [2049 0 R /XYZ 90 483.036 null] + >> endobj + 2068 0 obj << + /D [2049 0 R /XYZ 90 468.789 null] + >> endobj + 2069 0 obj << + /D [2049 0 R /XYZ 90 454.543 null] + >> endobj + 2070 0 obj << + /D [2049 0 R /XYZ 90 440.296 null] + >> endobj + 2048 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2074 0 obj << + /Length 892 + /Filter /FlateDecode + >> + stream + x????O?0???W???s>????+ 6?????q??s??w8\.'??AP?'G?:??P?~???????f? ??g??pyv?????W???h???yL??K??a?yvqlL?? ???=???L????}??fG?.?? ?.?S????? ??N? r?? `?Kg?5 ??`8?]Bwxn?s+ ]X???/?:???{r????P9?)???????D?9??F?g4??l?O4j??"W?C???H???a???L ? ?+ P???}????J?h?????D{We?m?E??FW?F??>?h+?,r?rI????R[????????\??????`q??????4?>?~2?y&? J?\ + ?3????rO??x?????/w??|v?\????hq{ ??x?????????~?N??k??ox??:*???p=?q P???k??+???g?p{?w?w??!b?~(c$7cD&???]<???c????h> endobj + 2075 0 obj << + /D [2073 0 R /XYZ 89 757 null] + >> endobj + 1352 0 obj << + /D [2073 0 R /XYZ 90 570.175 null] + >> endobj + 2076 0 obj << + /D [2073 0 R /XYZ 90 556.426 null] + >> endobj + 2077 0 obj << + /D [2073 0 R /XYZ 90 567.176 null] + >> endobj + 2078 0 obj << + /D [2073 0 R /XYZ 90 552.929 null] + >> endobj + 2079 0 obj << + /D [2073 0 R /XYZ 90 538.683 null] + >> endobj + 2080 0 obj << + /D [2073 0 R /XYZ 90 524.436 null] + >> endobj + 2081 0 obj << + /D [2073 0 R /XYZ 90 510.189 null] + >> endobj + 2082 0 obj << + /D [2073 0 R /XYZ 90 495.943 null] + >> endobj + 2083 0 obj << + /D [2073 0 R /XYZ 90 481.696 null] + >> endobj + 2084 0 obj << + /D [2073 0 R /XYZ 90 467.45 null] + >> endobj + 2085 0 obj << + /D [2073 0 R /XYZ 90 453.203 null] + >> endobj + 2086 0 obj << + /D [2073 0 R /XYZ 90 438.957 null] + >> endobj + 2087 0 obj << + /D [2073 0 R /XYZ 90 424.71 null] + >> endobj + 2088 0 obj << + /D [2073 0 R /XYZ 90 410.463 null] + >> endobj + 2089 0 obj << + /D [2073 0 R /XYZ 90 396.217 null] + >> endobj + 2090 0 obj << + /D [2073 0 R /XYZ 90 381.97 null] + >> endobj + 2091 0 obj << + /D [2073 0 R /XYZ 90 367.724 null] + >> endobj + 2092 0 obj << + /D [2073 0 R /XYZ 90 353.477 null] + >> endobj + 2093 0 obj << + /D [2073 0 R /XYZ 90 339.23 null] + >> endobj + 2094 0 obj << + /D [2073 0 R /XYZ 90 324.984 null] + >> endobj + 2095 0 obj << + /D [2073 0 R /XYZ 90 310.737 null] + >> endobj + 2096 0 obj << + /D [2073 0 R /XYZ 90 296.491 null] + >> endobj + 2072 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F19 498 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + + 2102 0 obj << + /Length 1890 + /Filter /FlateDecode + >> + stream + x???[??6???~???????$??d?????K??8[??Kl????K??d ??`}???>?F???x????lt?\?*?`??f???+??JT?E?n|??6_/&S????|???[?"??cu???6?'???????lu?yy[??o???M??????|????????r6?2 ?DCW?k[]???}???_U????o???*-lo????G?? ???l[??5P?5? ?8v@)M??,?, N????? ??,??Li????)???? ?:n7??}????c????X?2????tP?g??Tc??z25J?????m}??_l???9s????&` ???T?? N$+ ???dal??i?aD??????~???|_???????8? ??????jh?#)???%?y?????6o??fG??u??????2??YT?Hn????H + pvdY?^!??+ endstream + endobj + 2101 0 obj << + /Type /Page + /Contents 2102 0 R + /Resources 2100 0 R + /MediaBox [0 0 612 792] + /Parent 2071 0 R + >> endobj + 2103 0 obj << + /D [2101 0 R /XYZ 89 757 null] + >> endobj + 314 0 obj << + /D [2101 0 R /XYZ 90.96 82.458 null] + >> endobj + 2104 0 obj << + /D [2101 0 R /XYZ 111.529 82.458 null] + >> endobj + 2100 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F60 571 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2107 0 obj << + /Length 432 + /Filter /FlateDecode + >> + stream + x??RKs?0??W???A????$n???@?p)=[ ????u????-?4??C???E??yrV&?5Xi .???E????"(?NW?s?7 ???gU??a?c???n?? 6???|?w?????uxl?vA??Xc??rqSn?U?<$??A??]I?Pw?? B??@????)???????5??`?d????2??X?!}"|???;?%[?(Ms?V?MHz?O?sbt,???????,?`5d?T8??rM$?2P??Ap_??C?"?R?_???y_??t??????.??W?v????cP????????????O95????c????&V?Uf?Y?7??????? AJ????'w,/??'??1ji5R?P??ivU?z?4??X5???*?v???1?:??6??4!????C??K???k~???~?)z?? ??? ?[?? + endstream + endobj + 2106 0 obj << + /Type /Page + /Contents 2107 0 R + /Resources 2105 0 R + /MediaBox [0 0 612 792] + /Parent 2071 0 R + >> endobj + 2099 0 obj << + /Type /XObject + /Subtype /Form + /BBox [0 0 572.959 340.613] + /FormType 1 + /Matrix [1 0 0 1 0 0] + /Resources 2110 0 R + /Length 39 + /Filter /FlateDecode + >> + stream + x?+?2T0+ endstream + endobj + 2097 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./img/exec_times.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2111 0 R + /BBox [0 0 658 454] + /Group 2098 0 R + /Resources << + /Font << /F1 2112 0 R>> + /ProcSet [ /PDF /Text ] + >> + /Length 1338 + /Filter /FlateDecode + >> + stream + x??XM??6 ??W???HJ? d??r?v?????v 4??????????4??E?????$??????Xc;g????8O]0??0?|07/FQ???g?pn+ 0?Tc?F^K#??$?!???h??(????'P?L}????g|?Q??]?F???!?:??0????]????3 ?Z?Bn}~k$???-$?u??????^Bw?????v??????ah{]0?.#????5?)?????z?WZ?h?i?????{???E????m{???V?s8???g?W????5h?fBTa?????'VX8b??e??Ta!??j?? + /Producer + /CreationDate (D:20090515122543+01'00') + >> + endobj + 2112 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /BAAAAA+ArialMT + /FirstChar 0 + /LastChar 42 + /Widths [ 750 556 500 277 500 277 610 556 556 277 556 777 556 277 556 556 556 722 556 222 500 556 556 556 556 333 556 556 666 556 666 500 556 833 500 277 556 556 333 333 666 666 556] + /FontDescriptor 2113 0 R + /ToUnicode 2114 0 R + >> + endobj + 2113 0 obj + << + /Type /FontDescriptor + /FontName /BAAAAA+ArialMT + /Flags 4 + /FontBBox [ -222 -324 1151 1037] + /ItalicAngle 0 + /Ascent 905 + /Descent -211 + /CapHeight 1037 + /StemV 80 + /FontFile2 2115 0 R + >> + endobj + 2114 0 obj + << + /Length 410 + /Filter /FlateDecode + >> + stream + x?]??n?0E?|???";?$R???!e????LR?? ?,???????????1??~???????>??N?o]?[?I???D???0??]_?>Ic??~????n?L??xv?]MVMw??$} ?????c}???????B~PYR???S??T????R????x??iL? x?????5T???k_?*?d?e?Z?veB??wf R???? + 1T??,????F? ??M?l???9/??pn? ???s?c^???y????uv?k?Bzm?Rs???y6?u?x ???????=5? ???w?????3???W??IM???v? ?B???J_?;v?????{?;?????0????oFv6?w?;??????}????????????wVc?+ endstream + endobj + 2115 0 obj + << + /Length 2116 0 R + /Filter /FlateDecode + /Length1 22508 + >> + stream + x???y|T??8~?????}??kfn2?I???L b?7L$! $a??*KP?????X?qA?0,??+j?u{?*Xqm??R?bf???3??????~>???????9?s??????,?Ej???^X???[??z!l?^?&?h????GH?>?i???IO?!????`???w?+EH??P?????F>l??r?a?auP??^?:('?-l[?uB?-??B????U?=?????\??jY??qAy;??EU koM;?9?C?M??m????o????????m? ??????0tu??#+*D????h#??YP?M????_c{? ??G??Ao??h5:?,???A?????z?A ?+ k?q?E???>|jBn????x?????#?Iy?L#;??_????W??+v?x{?v}MU?F???h???UR???|(??P?????GI????K????$??+ ??)?????8;Q0-P"???????\p????? ?p?????%??Y?tpz4MM??h???6???4B??m??q #7o?? + !6M:?spj?A???0?????6*@2v??aU?5???Ub`d?T&l??????a??p?G`??J??K{^????g????>z?G ???R?m$)I?l?n?>??????#?K???-?bv????o?I??+ ?M??`?\???? Y0*????Vg?MZ?4G??U??A?n-?juA36?]?nr????Z???^????g ??a?? + ?Al?9?0? 6b?.??l???????=?K??s?&??K????Hb??^??+\?(?V '?W?a5W T)?G??0 ?2?x*kf?h??????[o????]???&?????????>?.tl9?????-???????/????;?S??|?}???????+:lL&???dY?5??*'????????ZmN"??????AG)W??Y???m?e?m????????v7??*??/??w???8??r??U]N??R????B?eH$?????***????`? ?MH$9????U?Mx???????????G?????v.??????#??B????'?|.????????? ??Y?y+ F??h0?`V???2 ??=??&??!??U?W4 ??? ?I#^?Yl??8Z:?? ???/SB???\=? )???r?!F?{? 9U??????a?????????w??aC?J?{?W???Z?`?u^t???^0???? ?m?"?A??!UD.n? ??N?&??!w9L??q ?????zw5n??!:L??V?[??|??E"@???%??!,9B?o? 7*???{%7 ?s?Q?x?vH@ R-?$I5Qn????9?g?]o'S}D????C????f???n6???o]????-w??[?W?????s?????????[????7U ???B?@C???v?N^'U??X  ?@C?ae?&?&?kZN??l??8?|?}?s???\n?????WU???+???R?? + ?F????5?Y???]?:???r&?FcmUHZB??BP?v???"1??~?_#D??@Q(?G??Q??^??,P?N???zA??3???{Ig????y{????^????W?????Dz?s??#g???+{???????7|]??R??{N???oP??e?Yr?#/7???? #W??(x9??2W!??????T5??U?J?+ R?V?????9??\z47?anO.???s?>[BZ?q?i???eD6t???]??L+ VLRlW?V?=?s?? + )Wa1???42??+ .h?dqA?&K???>???P(C?#??A?? + ??,?? + a.M?? ?`0?@??y0???c??B$A????O?????U?U8l?*(Z?? u??@??I?d?[T?+ \S ?$\U???*?2?2?er?& ?i????JK?,A?va7?n?t)yD?Y??5?X?5????HJ? + i????n???E?`?`?X2?D>???E/T&? owg?DM???? pe??????O????????:?????:%j\??x?????/(cn=????/??`????Z??????[???)??37?|??>??=`??qr???????H?w???'???4??v??V?E??\0'??Y?Y???S??)??*? + ?d?????b? + ??????kU??4wZ???4?9?t???bM?~?1??j??!??=d?;?????? _~??????l?_?~??y?F??>m?????y?q??a??s???7(???c?q??????uw???????????l???=@? MX$???K?a?Ru?????a???x??Y?+ ????=$X??UD???5g?y???O????+ q??hQc?E???-?2->?U" +??b?D??J??????9"???)?????? X"?b??????S????????K ?`?F?!2^.?sr? V?D???(U???I??-??I~?R?z????_????MT]*??)S???`?? 'e??{??9t??i?6?\P?$?~B?t????`u??.???)*?M?v?5???G?(??\??:UH????h????ZF6??5Z????????<%^ ^????? + 7???2F?M?? + $W$??#X?O4?ET?3S'???s,?=z?TMV?????v0*hY???y??o? ?+???:A??!???W+ /??^&?1?3?$??GR???}?y?}???? ?Lz???? ?,????;?????|??F)?b?R??L?*?i???$S???RU~S?7W5?t???4?/U??~P????MM??4>i{??T~X??A???????A????????U????M?"?k?7Iz?Ef?&???]F^z?#????{?v??Jm?U????)?\j?????T?l?3V,X??Jk??????%x??N???":????M?1:{ ?-> (80?=??}????2?????????s??V?W?g??J??W????????????eR??s??WN???(? + ?mE?%h?qn???????? + ? + ?y??.???Ogn???(V!???Dm.??`"???KQIl.??R?B?hD??l??3??a?qG???? k?R??M?w?2^????u????+ '?I|HaBH??I?G}j??V3J??a?L?h?:PN2`?8?ju?RW%S????|!(?,k?XxLP+2?I?$??8??? "???^?T??+???9Oc??1??"v???m????NDcHx???'???]Z[\?J???? + ??U*w?? + ? ??\?????/????? + ? + 2???????I?:?.??????R}? ???|xvD?K?????M?y%?????,\A}?B???s5??^ + Vx?]=Vv?|??L>OV/?g # #,??"??Pb)??s???B???2???[??ZjlK?Y!?4?0????[? ?Z?V?@???X^?R?L?M}Y? :y???z?????N?kQ@<(7?A????Rs??rE??+&??S?J1??????Q????(??A?w@9??????+ g&?&?T??X???????????Y?KR??rN2?!+m??rE??\U?.?4? ?U??A???J?%?? K??,S??k???m????R>??'???{?W>?~,??????-q?? ??Y?$?Z?:D??U ?sP5?????????????2??co?????6;?%3?kFT?8????`??? ?^??B/0z?n?> ?!?q ?H?????!*?;?A?-??Mn??S+ ?,A#:?"?wbn0Dn??^'J?j??AJ'NNR(e????}?Fk=k???o?????;??x?"??K3?s?? 7^7??????'????ZVF????J?K??%?QaATU??U?? ?3Q&?#?_z???????@ }?D???V?=6k???||????Y??w????a9P??`??h???9?]??o"%B????R?uZ-????????!:0?9l??il??]O?+.O?? ?Fq_^???? I???x=??a%????A?LXpO???????m???t]x3wDk?=??h???9o]S~?YS?G>g? + xJG????L5?????/)??u?a?????=?bb?t?S??Z?/?bI???????U??L?\>2?`J????????7pGt{?=?;?_??b???^ ?c'~OXt???[ ??y?U???j_??c?v?]ko???9?y??%?O??} ?S V?9?[uT??+?D?g?????r??~?t?'??????{?????G???D4???8~?S?? ??V4?Eh2?M ?9?g?A?P?(?t?,???PN?? + B??^EBz~m????@??!????C????H?????Q??A?P? ??|?H?!l?>+i+ ?xD4U??Z[?R-??+ ???(gQltzBt?+Q???I??K??oH??+au??? ??4?v?+??wil?_??&???????bk?;?E?????k???p _?? ?E*????d?I>.?x?Q,?J?n???g?? ?y[??5?GO?zyD???U?:4?????X?B?c1????XT??1Q???I!??Z??0?|+ endstream + endobj + 2116 0 obj + 15011 + endobj + 2098 0 obj + << + /S /Transparency + /CS /DeviceRGB + /I true + >>endobj + 2110 0 obj << + /XObject << /Im15 2097 0 R >> + /ProcSet [ /PDF ] + >> endobj + 2108 0 obj << + /D [2106 0 R /XYZ 89 757 null] + >> endobj + 2109 0 obj << + /D [2106 0 R /XYZ -3927.786 82.458 null] + >> endobj + 2105 0 obj << + /Font << /F21 332 0 R /F19 498 0 R /F31 350 0 R >> + /XObject << /Fm1 2099 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2119 0 obj << + /Length 1897 + /Filter /FlateDecode + >> + stream + x??[?n7}?Wl?>???? ?R? ? ?S???????JJ?D?\K????pH???h?d????Y??^L??Q??I??|<}_}??????y#?"?\KY??g}??{??XBt?W???????Q??,?{X??i??8?U t???Le + ?#@?????4+ b?_?K??c + Q???q*???D3bv?3??K??!?!??a3T9U%??Y?U?f:r????,^p?)M???;GT??>?e?j?????-????m??\??6MU?T??????EjL t?zqI???\y'FI|?A?\! ???i\??&4"u)n?Fl?4??I?{??m8]y??%U??-X???F??Ht(???F?????D??=H@??}??ku;B#?shT??"??p?????C?T?^s??#??#YF??)b8??> endobj + 2120 0 obj << + /D [2118 0 R /XYZ 89 757 null] + >> endobj + 318 0 obj << + /D [2118 0 R /XYZ 90 726.045 null] + >> endobj + 1355 0 obj << + /D [2118 0 R /XYZ 90 693.808 null] + >> endobj + 2121 0 obj << + /D [2118 0 R /XYZ 90 674.686 null] + >> endobj + 2122 0 obj << + /D [2118 0 R /XYZ 90 660.44 null] + >> endobj + 2123 0 obj << + /D [2118 0 R /XYZ 90 646.193 null] + >> endobj + 2124 0 obj << + /D [2118 0 R /XYZ 90 631.947 null] + >> endobj + 2125 0 obj << + /D [2118 0 R /XYZ 90 617.7 null] + >> endobj + 2126 0 obj << + /D [2118 0 R /XYZ 90 603.453 null] + >> endobj + 2127 0 obj << + /D [2118 0 R /XYZ 90 589.207 null] + >> endobj + 2128 0 obj << + /D [2118 0 R /XYZ 90 574.96 null] + >> endobj + 2129 0 obj << + /D [2118 0 R /XYZ 90 560.714 null] + >> endobj + 2130 0 obj << + /D [2118 0 R /XYZ 90 546.467 null] + >> endobj + 2131 0 obj << + /D [2118 0 R /XYZ 90 532.22 null] + >> endobj + 2132 0 obj << + /D [2118 0 R /XYZ 90 517.974 null] + >> endobj + 2133 0 obj << + /D [2118 0 R /XYZ 90 503.727 null] + >> endobj + 2134 0 obj << + /D [2118 0 R /XYZ 90 489.481 null] + >> endobj + 2135 0 obj << + /D [2118 0 R /XYZ 90 475.234 null] + >> endobj + 2136 0 obj << + /D [2118 0 R /XYZ 90 460.987 null] + >> endobj + 2137 0 obj << + /D [2118 0 R /XYZ 90 446.741 null] + >> endobj + 2138 0 obj << + /D [2118 0 R /XYZ 90 432.494 null] + >> endobj + 2139 0 obj << + /D [2118 0 R /XYZ 90 418.248 null] + >> endobj + 2140 0 obj << + /D [2118 0 R /XYZ 90 404.001 null] + >> endobj + 2141 0 obj << + /D [2118 0 R /XYZ 90 389.755 null] + >> endobj + 2142 0 obj << + /D [2118 0 R /XYZ 90 375.508 null] + >> endobj + 2143 0 obj << + /D [2118 0 R /XYZ 90 361.261 null] + >> endobj + 2144 0 obj << + /D [2118 0 R /XYZ 90 347.015 null] + >> endobj + 2145 0 obj << + /D [2118 0 R /XYZ 90 332.768 null] + >> endobj + 2146 0 obj << + /D [2118 0 R /XYZ 90 318.522 null] + >> endobj + 2147 0 obj << + /D [2118 0 R /XYZ 90 304.275 null] + >> endobj + 2148 0 obj << + /D [2118 0 R /XYZ 90 290.028 null] + >> endobj + 2149 0 obj << + /D [2118 0 R /XYZ 90 275.782 null] + >> endobj + 2150 0 obj << + /D [2118 0 R /XYZ 90 261.535 null] + >> endobj + 2151 0 obj << + /D [2118 0 R /XYZ 90 247.289 null] + >> endobj + 2152 0 obj << + /D [2118 0 R /XYZ 90 233.042 null] + >> endobj + 2153 0 obj << + /D [2118 0 R /XYZ 90 218.795 null] + >> endobj + 2154 0 obj << + /D [2118 0 R /XYZ 90 204.549 null] + >> endobj + 2155 0 obj << + /D [2118 0 R /XYZ 90 171.652 null] + >> endobj + 2156 0 obj << + /D [2118 0 R /XYZ 90 153.691 null] + >> endobj + 2157 0 obj << + /D [2118 0 R /XYZ 90 139.445 null] + >> endobj + 2158 0 obj << + /D [2118 0 R /XYZ 90 125.198 null] + >> endobj + 2159 0 obj << + /D [2118 0 R /XYZ 90 110.951 null] + >> endobj + 2160 0 obj << + /D [2118 0 R /XYZ 90 96.705 null] + >> endobj + 2117 0 obj << + /Font << /F21 332 0 R /F30 348 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2163 0 obj << + /Length 1788 + /Filter /FlateDecode + >> + stream + x??[[o?6}??0 ?????;?uX??E??o/]??- ?6??a~??$GN?DM?HA^(ZJ??'???!?;?O ?P??\??G??qqx?b\d???g??y??????C?}?jHJ????l??_#3*??E0.?;?}'? ?????1d?????(??~?3?s ??H?%E??=??d?]z????`E ?y"??? ????P??V?M????_zsJ???V8?>? ?UA?c??7??0?Lz?? q?o??????N}~?y?TR>???_8?q?(??|+???????J!u??_???T!?p?r?? N?BK?=8.?%D ?8\???m?\??@???1]?06j??!?'%P??c??.?'e?2????? ?X|? ?I^a?.CP???s?P?K?5F????e???b???+?(???Hq??=Pp?T??-+ K;?Q?\???V??y8??????????h?????t?g^p?i??#????? G??v?4?? -G? ??=?|S6L??G{?????=????l??e????J!?8lTr?HS Q2??????IF3?p?H?.?7?~\?w?Or~??{??????)???e????[?????K???G??xXG`?????!???????Ej?c?? ?\???q??@? ??M6??@?VF??! ?????4??eX??N?zgF?`???Eu??`Q}??w??"???w??B8??d3??,R?E*?? + ??X????????)#Y?????&???!? + ????bP-5?0s>???J???;'? + /m??????J?1? Mv?R9gl???b=a8?Jx????s?????????zuP??BUU?{????????d2*??(?/kv?(i?_??y*7??_BiMX??x???~*??(???i^?~-2??3J?x?????' + endstream + endobj + 2162 0 obj << + /Type /Page + /Contents 2163 0 R + /Resources 2161 0 R + /MediaBox [0 0 612 792] + /Parent 2071 0 R + >> endobj + 2164 0 obj << + /D [2162 0 R /XYZ 89 757 null] + >> endobj + 2165 0 obj << + /D [2162 0 R /XYZ 90 730.319 null] + >> endobj + 2166 0 obj << + /D [2162 0 R /XYZ 90 716.072 null] + >> endobj + 2167 0 obj << + /D [2162 0 R /XYZ 90 701.826 null] + >> endobj + 2168 0 obj << + /D [2162 0 R /XYZ 90 687.579 null] + >> endobj + 2169 0 obj << + /D [2162 0 R /XYZ 90 673.332 null] + >> endobj + 2170 0 obj << + /D [2162 0 R /XYZ 90 659.086 null] + >> endobj + 2171 0 obj << + /D [2162 0 R /XYZ 90 644.839 null] + >> endobj + 2172 0 obj << + /D [2162 0 R /XYZ 90 630.593 null] + >> endobj + 2173 0 obj << + /D [2162 0 R /XYZ 90 616.346 null] + >> endobj + 2174 0 obj << + /D [2162 0 R /XYZ 90 602.1 null] + >> endobj + 2175 0 obj << + /D [2162 0 R /XYZ 90 587.853 null] + >> endobj + 2176 0 obj << + /D [2162 0 R /XYZ 90 573.606 null] + >> endobj + 2177 0 obj << + /D [2162 0 R /XYZ 90 559.36 null] + >> endobj + 2178 0 obj << + /D [2162 0 R /XYZ 90 545.113 null] + >> endobj + 2179 0 obj << + /D [2162 0 R /XYZ 90 530.867 null] + >> endobj + 2180 0 obj << + /D [2162 0 R /XYZ 90 516.62 null] + >> endobj + 2181 0 obj << + /D [2162 0 R /XYZ 90 502.373 null] + >> endobj + 322 0 obj << + /D [2162 0 R /XYZ 90 448.403 null] + >> endobj + 2182 0 obj << + /D [2162 0 R /XYZ 90 399.789 null] + >> endobj + 2183 0 obj << + /D [2162 0 R /XYZ 90 381.637 null] + >> endobj + 2184 0 obj << + /D [2162 0 R /XYZ 90 367.39 null] + >> endobj + 2185 0 obj << + /D [2162 0 R /XYZ 90 353.144 null] + >> endobj + 2186 0 obj << + /D [2162 0 R /XYZ 90 338.897 null] + >> endobj + 2187 0 obj << + /D [2162 0 R /XYZ 90 324.65 null] + >> endobj + 2188 0 obj << + /D [2162 0 R /XYZ 90 310.404 null] + >> endobj + 2189 0 obj << + /D [2162 0 R /XYZ 90 296.157 null] + >> endobj + 2190 0 obj << + /D [2162 0 R /XYZ 90 281.911 null] + >> endobj + 2191 0 obj << + /D [2162 0 R /XYZ 90 267.664 null] + >> endobj + 2192 0 obj << + /D [2162 0 R /XYZ 90 253.417 null] + >> endobj + 2193 0 obj << + /D [2162 0 R /XYZ 90 239.171 null] + >> endobj + 2194 0 obj << + /D [2162 0 R /XYZ 90 224.924 null] + >> endobj + 2195 0 obj << + /D [2162 0 R /XYZ 90 210.678 null] + >> endobj + 2196 0 obj << + /D [2162 0 R /XYZ 90 196.431 null] + >> endobj + 2197 0 obj << + /D [2162 0 R /XYZ 90 182.184 null] + >> endobj + 2198 0 obj << + /D [2162 0 R /XYZ 90 167.938 null] + >> endobj + 2199 0 obj << + /D [2162 0 R /XYZ 90 153.691 null] + >> endobj + 2200 0 obj << + /D [2162 0 R /XYZ 90 139.445 null] + >> endobj + 2201 0 obj << + /D [2162 0 R /XYZ 90 125.198 null] + >> endobj + 2202 0 obj << + /D [2162 0 R /XYZ 90 110.951 null] + >> endobj + 2203 0 obj << + /D [2162 0 R /XYZ 90 96.705 null] + >> endobj + 2161 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F30 348 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2206 0 obj << + /Length 2202 + /Filter /FlateDecode + >> + stream + x??\mo?F??_a??p?????Q@JT?F????HH?T??wvv???#?&_??~Y?????yf??????m!??;?w~?M??W?(S??)?(,???,????????h??S??G??xL;J ????{qs?n?>??????????(?}:???6????I%???????y???qG???B??C???????????????3?:)Pm???w???MDe??????-.;??q??NWN??JYY????So????J?0??????^L `+O `e%?????U?J????? + Q82??p??? + ????n??[$?o+?U4"d?HY#0??_?AB???????O??K+ ?0nx'???47??{?G? #D*f??#$?z&ci?x?P?)h/?kb+qM?t? qM?*?;???z?i??e/}???&F?l?V????N? D??K???D?>`?w5??,?_=e??R?j??D?Cn??D??HQ ??? ?OYz???????)??????????V31?@???=?J???????+??v&F?p?v&F??Mv?T\?mT\??}?O???H?IM?????Z???K?B?*?}???? ??b?B????{t??p?p????Y7}?Mxk'dc/?? /A?*i ?c?b????o?b??%??&??7l+ i( ??}? 5&??e?U??^<['???m\????8?jT?K@?@#?W?Y?|????8a?b???$??Tx?]?I?????*?t?J??~?t^e']{}???t????78?tm?????\J0D\?)a~F?6??j?@|???"??S????1???wY+r2?k???b??C??l?!@]?+ ?Zl?y??\1???[?mB?? t}?@<9????`?.?+ QT???=L?fH???+ 4??p3$?$,???Y3?? ?C????????P^?oEAp?9????hjV?q[??v~??v?????=?{o?jLNW?]cR?????)?|?????+X7c<35^?0s? $?M?Zi_?T6Y?????c??3+ A??go?9?_?-}????????t??J????????9Hu??J?? + T??g%??k????RY/??/???J??V ???FA?tD ?3?????????}f?"?I6?~???????{4????T??????@ Z? + endstream + endobj + 2205 0 obj << + /Type /Page + /Contents 2206 0 R + /Resources 2204 0 R + /MediaBox [0 0 612 792] + /Parent 2249 0 R + >> endobj + 2207 0 obj << + /D [2205 0 R /XYZ 89 757 null] + >> endobj + 2208 0 obj << + /D [2205 0 R /XYZ 90 730.319 null] + >> endobj + 2209 0 obj << + /D [2205 0 R /XYZ 90 716.072 null] + >> endobj + 2210 0 obj << + /D [2205 0 R /XYZ 90 701.826 null] + >> endobj + 2211 0 obj << + /D [2205 0 R /XYZ 90 687.579 null] + >> endobj + 2212 0 obj << + /D [2205 0 R /XYZ 90 673.332 null] + >> endobj + 2213 0 obj << + /D [2205 0 R /XYZ 90 659.086 null] + >> endobj + 2214 0 obj << + /D [2205 0 R /XYZ 90 644.839 null] + >> endobj + 2215 0 obj << + /D [2205 0 R /XYZ 90 616.346 null] + >> endobj + 2216 0 obj << + /D [2205 0 R /XYZ 90 602.1 null] + >> endobj + 2217 0 obj << + /D [2205 0 R /XYZ 90 587.853 null] + >> endobj + 2218 0 obj << + /D [2205 0 R /XYZ 90 559.36 null] + >> endobj + 2219 0 obj << + /D [2205 0 R /XYZ 90 545.113 null] + >> endobj + 2220 0 obj << + /D [2205 0 R /XYZ 90 530.867 null] + >> endobj + 2221 0 obj << + /D [2205 0 R /XYZ 90 502.373 null] + >> endobj + 2222 0 obj << + /D [2205 0 R /XYZ 90 488.127 null] + >> endobj + 2223 0 obj << + /D [2205 0 R /XYZ 90 473.88 null] + >> endobj + 2224 0 obj << + /D [2205 0 R /XYZ 90 459.634 null] + >> endobj + 2225 0 obj << + /D [2205 0 R /XYZ 90 445.387 null] + >> endobj + 2226 0 obj << + /D [2205 0 R /XYZ 90 431.14 null] + >> endobj + 2227 0 obj << + /D [2205 0 R /XYZ 90 416.894 null] + >> endobj + 2228 0 obj << + /D [2205 0 R /XYZ 90 402.647 null] + >> endobj + 2229 0 obj << + /D [2205 0 R /XYZ 90 388.401 null] + >> endobj + 2230 0 obj << + /D [2205 0 R /XYZ 90 374.154 null] + >> endobj + 2231 0 obj << + /D [2205 0 R /XYZ 90 359.907 null] + >> endobj + 2232 0 obj << + /D [2205 0 R /XYZ 90 345.661 null] + >> endobj + 2233 0 obj << + /D [2205 0 R /XYZ 90 331.414 null] + >> endobj + 2234 0 obj << + /D [2205 0 R /XYZ 90 317.168 null] + >> endobj + 2235 0 obj << + /D [2205 0 R /XYZ 90 302.921 null] + >> endobj + 2236 0 obj << + /D [2205 0 R /XYZ 90 288.674 null] + >> endobj + 2237 0 obj << + /D [2205 0 R /XYZ 90 274.428 null] + >> endobj + 2238 0 obj << + /D [2205 0 R /XYZ 90 260.181 null] + >> endobj + 2239 0 obj << + /D [2205 0 R /XYZ 90 245.935 null] + >> endobj + 2240 0 obj << + /D [2205 0 R /XYZ 90 231.688 null] + >> endobj + 2241 0 obj << + /D [2205 0 R /XYZ 90 217.441 null] + >> endobj + 2242 0 obj << + /D [2205 0 R /XYZ 90 203.195 null] + >> endobj + 2243 0 obj << + /D [2205 0 R /XYZ 90 188.948 null] + >> endobj + 2244 0 obj << + /D [2205 0 R /XYZ 90 174.702 null] + >> endobj + 2245 0 obj << + /D [2205 0 R /XYZ 90 142.888 null] + >> endobj + 2246 0 obj << + /D [2205 0 R /XYZ 90 125.198 null] + >> endobj + 2247 0 obj << + /D [2205 0 R /XYZ 90 110.951 null] + >> endobj + 2248 0 obj << + /D [2205 0 R /XYZ 90 96.705 null] + >> endobj + 2204 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2252 0 obj << + /Length 999 + /Filter /FlateDecode + >> + stream + x??XKo1??WXBH?1???^?RQ??q?z?P*????:???w??-??????????7?????Ce?N???w?9?J:y?j?^%?? ?[P?Z?W??????0???h:?????*;.??R=)???a1?}:9=:?L????G???e?To_?????a????QPf?::??'???jn?UF??7?u?Z???????iVbt0???\O??^????IG?*+ ?z(?^[H]R+ ??.?g??}??,V???%nV????7??7??T%???rY8?v??r?6(WY?e??}i?6W??????_??#I?Z???????4'?k]?{=??Xwe??}+ endstream + endobj + 2251 0 obj << + /Type /Page + /Contents 2252 0 R + /Resources 2250 0 R + /MediaBox [0 0 612 792] + /Parent 2249 0 R + >> endobj + 2253 0 obj << + /D [2251 0 R /XYZ 89 757 null] + >> endobj + 2254 0 obj << + /D [2251 0 R /XYZ 90 730.319 null] + >> endobj + 2255 0 obj << + /D [2251 0 R /XYZ 90 716.072 null] + >> endobj + 2256 0 obj << + /D [2251 0 R /XYZ 90 701.826 null] + >> endobj + 2257 0 obj << + /D [2251 0 R /XYZ 90 687.579 null] + >> endobj + 2258 0 obj << + /D [2251 0 R /XYZ 90 673.332 null] + >> endobj + 2259 0 obj << + /D [2251 0 R /XYZ 90 659.086 null] + >> endobj + 2260 0 obj << + /D [2251 0 R /XYZ 90 644.839 null] + >> endobj + 2261 0 obj << + /D [2251 0 R /XYZ 90 630.593 null] + >> endobj + 2262 0 obj << + /D [2251 0 R /XYZ 90 616.346 null] + >> endobj + 2263 0 obj << + /D [2251 0 R /XYZ 90 602.1 null] + >> endobj + 2264 0 obj << + /D [2251 0 R /XYZ 90 587.853 null] + >> endobj + 2265 0 obj << + /D [2251 0 R /XYZ 90 573.606 null] + >> endobj + 2266 0 obj << + /D [2251 0 R /XYZ 90 559.36 null] + >> endobj + 2267 0 obj << + /D [2251 0 R /XYZ 90 545.113 null] + >> endobj + 2268 0 obj << + /D [2251 0 R /XYZ 90 530.867 null] + >> endobj + 2250 0 obj << + /Font << /F21 332 0 R /F20 335 0 R /F31 350 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2269 0 obj + [569.5] + endobj + 2270 0 obj + [594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2] + endobj + 2271 0 obj + [500 500] + endobj + 2272 0 obj + [826.4 531.3 826.4] + endobj + 2274 0 obj + [581 729 645 553 584 701 617 921 608 586 572 449 481 449 1000 500 261 572 556 437 579 464 325 517 595 318 297 559 307 883 600 550 565 562 449 403 366 599 492 768 510 494] + endobj + 2275 0 obj + [531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] + endobj + 2276 0 obj + [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] + endobj + 2277 0 obj + [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] + endobj + 2278 0 obj + [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 + 2279 0 obj + [777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5] + endobj + 2280 0 obj + [574 579 167 500 498 275 500 500 0 500 833 0 556 440 500 287 0 0 0 0 0 0 0 0 0 0 0 0 500 170 278 338 331 745 556 852 704 201 419 419 500 833 278 319 278 481 556 556 556 556 556 556 556 556 556 556 319 319 833 833 833 486 942 606 588 604 671 546 509 664 712 312 447 625 498 839 683 708 542 708 602 537 565 664 590 898 569 562 556 421 481 421 1000 500 201 525 507 394 523 424 292 481 551 287 269 514 275 815 556 502 516 512 398 370 333 553 454 713 477 475 440 486 500 486 833 0 0 0 201 556 403 1000 500 500 500 1225 537 245 1007 0 0 0 0 0 0 403 403 590 500 1000 500] + endobj + 2281 0 obj + [622 627 167 500 543 304 500 500 0 500 833 0 592 495 500 305 0 0 0 0 0 0 0 0 0 0 0 0 500 175 291 340 339 736 581 888 741 255 428 428 500 833 289 326 289 491 581 581 581 581 581 581 581 581 581 581 340 340 833 833 833 487 917 651 628 638 716 596 552 710 760 354 465 650 543 883 727 752 587 752 671 568 603 705 635 946 637 610 592 443 491 443 1000 500 255 544 577 476 596 524 341 551 597 305 297 553 304 892 605 577 591 575 421 447 358 600 513 799 531 515 495] + endobj + 2282 0 obj + [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] + endobj + 2283 0 obj + [574 579 167 500 520 282 500 500 0 500 833 0 586 468 500 280 0 0 0 0 0 0 0 0 0 0 0 0 500 170 278 338 331 745 556 852 704 201 417 417 500 833 278 319 278 481 556 556 556 556 556 556 556 556 556 556 319 319 833 833 833 486 942 639 604 632 693 576 537 694 738 324 444 611 520 866 713 731 558 731 646 556 597 694 618 928 600 586 586 421 481 421 1000 500 201 507 539 446 565 491 321 523 564 280 266 517 282 843 568 539 551 531 382 400 334 569 494 771 503 495 468 486 500 486 833 0 0 0 201 556 403 1000 500 500 500 1225 556 245 993 0 0 0 0 0 0 403 403] + endobj + 2284 0 obj << + /Length1 1456 + /Length2 15310 + /Length3 0 + /Length 16322 + /Filter /FlateDecode + >> + stream + x???uX[??5?????????Z$@p???P????[??V?8?????~r??????+?v??Ykf??? ??&????H? a?b?D???v!6?` $?B+ + ],????B??r???q????y?+ #?+ ?EK???8???T???:?M?? e??N????9?E??au"v??????p?????|w??l??4???)??? ??????? ????}1??[????f???'?+ ?????3m7?-?????JZ_?[??\J??#r#?oW8??m?G??Ob????????w??d??~`?_?O?2??G?3?W{o+?U?q?`?K??a?4??h????2?uX\;*?M?1\ + ?b?@?[?? + BC?c ?,M?????l???MGu?t?%?x??V???O???k??????+ v}?wdv7??=?R??>1?K??&k5`?7|??K?'g?? L~@?8???Bp/??=?;:W?????k???Q?+A??+ ?#?7? ??m??Ws?UQ???b?e?k????`????t*???O+ ???We??6 $????)??6 ???Mh????y.??,I"??{-3~` d???t??-?????ZCl?:_7d??????cI,??)L?Bdd???@??A??Ytl?A? ?Aq`?w? ??W?@??t%(??? ?????I`?@e?[?jJ,?G?????J`B?L????}I?????,X??e??U??(-) M???A??-"??c?|?%VO?O???M????rK?????0? k??"?%???oj???ccO?????????r??=?m??`?U??9?J + ?o?K:?????????O??? + ????A}G?????????L???Ov??(?????V? ?z?W?????_?? ?,?K?a+0?4]? ?.I????Di02}????>\???__?k?y?%?B?c?*?[?o1?j?2????,??W&?8*f???b?d??u?6???L"?D???%?4lq?F?1Ps?U?3? y(/??S?nd??N??,?z??????0?[)u??* ?`?? ??^?)( + ?q?*???????8~?&?2B??~???3???t[??E?W?Ez??'ZO?????ZV~7??o1?? ?|_?oM}??????]Jp????6?7*j? N?_??0??y'+?f??x?[?X?}??,?@xM?!{uu4??v3j?????>5?????\o??*??Io????4??3K?j?? ??e????RS?$?A?z ?t??hd7J???bZ???????6??%?X??8????k??Q???????B!?r??-!?E?>GM??*??????2"?? q<????z???????? **=x2Hvy?? B????i?? z?]??&?0~{??i?w?FTh?lC?=?@??&/????V????*?+z~???f??????L??9?? s~?u?N???8???v?=By??K??J?O?;?-??-??Q?I!8W+ ?G??x????????h(?5J?9??q?i37?e\R??X?P7<?????+ ?^???+&??Rl ?eaO#???4??|C ??? ]??????@pC?????1V5?????=I?v?$}?5??U{ ??' + w ?k?b^???7zp'?+L#P?+ ??Q???th????ZjK?H?nKU(?9???j??R??S)%+q?'?g?d?9[??`n,(3??? B?A??=??r??R"??;???Nd?d??bwo??Q???`&7??$? ? ?S!G??J?_?0??+ ??B?[n???,q???,g1,~??] O??)F??? U%? ;?7??v???-??S?o + ?j??#:?mqS?`?f?J?D???4U/9y?hh.~%????)?)%P?\P????')L.??2?8.???0?%??V >??\{x??c??:?j?}?h?bW@!???????> ?????t?}-??~????`?#?@{?A~ cR?=???uX=+ }&gQ!?Z*@?j???;%<???,??5zudu??x.?@?|??j@?%?2??y??????-O@????bN??u??=?6?7???????????$?D? %\t?Y???6?E?18?_??????w?m%dfr??O?(?k?\ + u?? p??????EU^?c??TL???_??*????=??#6?Pp?w??&??WyP?H?|?G+ ?????G???????^$/.o%OLa??????m"??S~????O?????3??Gl;??<?D"|?>?)A??]????t?fC?R ?I?!>??Cu^?z?b??Er?? + 9?,?u,`???@??j}???g?6???????d?"??&W?>??O{? k#?t??????????hQ:S}??QX\r{?B??.??I???f??? ?;???t?@X?n?v{?????5??????!@? ???? %??U?-L???????(E?B???1?* s.?G R??;???`?0??'?????I>?; + ??? ?~?????????[???0?P\?p???b??n??|Fd??Z???l ?zT3-???0? + ????m?ug0/???6?[?%??N)??~??????8LfF??;??????????|H?L???2?T[$=5??D)?;??????!`???????!Z?-2{??=??y at T=??I[?g??q+?%???b?I?5_??\I T???{EP?y?r???Hv8?T??+MNhR + !?R{Sn + ?8??v???u??h??V???pn?.x?l??Z????!??b???l}?V8+??????97?. W"y1H?????9?oFw??e?U?+ a\?.9???$?X}4???????yn'?-?mx?Q?? xzA|???q?`kns??LG?S??mt???m????W????!? G$K~IG_?V?????.?.????#?$?H?? +???}?H?x??f?+?d????^? [#??O%0U?i?JFE??vpp????????F0?? O???%?e?"????3jD?t???????o ? 7??k.n+fMc????BlO{?????(??J=I?+ I~???("H???????? yL??z?J??M?] ??$6`??I??G????????x??'?????????C?e?????0A?????9B)-r?! ?q?d???G? ???}&????njw??d???? ?????^???M?3?????z?z?a@???ay?&?**Uh??? W?????Y?G?????0????#q????? !hD?105"????I-?)?7* ???Pf???[?E ???Pr ???+ V `?:????p?!?y?????{????]?????j??N*h?= ?v???y? + '>?0;????I?D?c&+ ???u?{?Ws=?wg???E !9???d???V???-W-+ ?E?F?\ 0??pnZg??@???????>???HcfDx5a_F3??6Ye??(B?&*?+ =???c?lN?uS?>m| ?.????+?9??p??B????=?L/?3i??_??"?i????E??????????2?????a??,???Q ?CP?D???+sO???|?????5???/Y??]K???]?+S??6=???%x??8????x?Qg1?????p,???Zp{+??*?1y~XY????rr?W???5?zL>?$L2,??jq5?.H?o??q ??? a{xe???Q%?M_w?s?=="cf3?????7y??g?X?e? + ?\Y???bD@?SI???? + ?\?8?Q??@??|?/??~?;5ffM??q'??j???!?~??h F?-??}6??Qc?D??<{ ? ??????_-"J??]?????c???f??ZiqjM??P??H?d???N??M?????5-^a3???0 Vtp\?"t????U???N????\?pCR??ZH???q????]e5??????.???1 + ???+&$+ ???^?mk???}?1?ardm??????h?????1?2a???n??TBYt_?b????????????=n?????9^i? aZ.(???????^D?mGDF2???j?-?????=?v?w?E???7O\?????T????|?8???)?#j?I??? + l?A?0??j?Ec1t?A??s?!??t??((??Y???I?{?s?z??4#?? ?%al?F (?????l??|??a???a????V^???H {?)?Ww*?x????*???oOd?U9G??f+???xWS????????4? I849?g?\??.\??K?R?Xu???J`?? I?@-i???P????CUw{;????? ??7??Uz??o3?X??????W?3?;?=?L=y?#?m?_?#89r???@|? + ?\i> endobj + 2286 0 obj << + /Length1 1475 + /Length2 5379 + /Length3 0 + /Length 6361 + /Filter /FlateDecode + >> + stream + x??tuXq??RJ#-??KwI?HI(? ??????t7()?????? + (???? %(? ?"??O|??????^?????s??>1|?L?D?X{?C???S??i??0"???????a?)@RRQJ^QB?PP+ ??F??6??.I???: ?0?? ?(j1#,l ?????&??@?f?qsv6???????t??A???@?0???sA;{?/?;?D??"x?????:??) ?"????&??=?4??`??0?>?? ?xg4i?%?/?????_6pK?N$?+ ?o???5??z????r?pbQ??=???m6?or[??????V?Q=J?:5???S!y?'???S????5?????! A?_R???@&E|??r?6?z?????1?!??%?M?W2h???{}?3??} B??K??E?w ? + ?dS????c?Qr?m?"??e?????k?D????U8????%?h?????}??????g + ???????5qX??????;~?????s?? a8?4?z???I_??>D?|?ajQ$??? + ????U??7?N?e????y?!s\m??????'??3??m??Q) ???X I????@?????L??v????A??cg??j??b ????)???3??D?`uD}cM>????M]5?q?T???w?E3?B?k????{?cp?Q??rcm?}(?x??4T!??????w?Eg?y?__?RW?9(NXh???J??b_??U?T??1?cr??5??=?qg9??^{@f?p???Bb?It}????D??5?^ ??Ss;?"?I?????>"?1T???o%#??)a??/?}??>?}?$c8??Q??$W?B???xU?U???V?? ??Q7E??m'?I???~.:????y?????u/bZ??ihR.?.???k?>????????6R? + -??X??gNy????:y??.y?z??6?9fUi?? ?n?5i??co + ??,????[???)?????]TI|C???oV?S'4??uX0-lIC???C[-????} ???S?v+?????J??????O?xV? ??wc?_?}6?+???R???=S'j??!???z?>W;?????~F??V??????e??N?yK?????.b??M%?F????}?.??cIL?t-????9?W?c6C???HxU?W?O?"zD??????Q?FC?,????u??"?????J???+e???.]o!??+M?[r??vA??';???6?M??y????J???J?~???+?z?z??1nT???/KdP??b.vu??b????mb??-i?=???K?#????El??????@?_??z????o:100???O?????p?2??*!??Y?T^(?<]?[??.o?=??(?6??|?*??g?{??C6??2?;A???^>A?-??v???v??~?M???2$???%Y????=???{z??)????v?PfN?d?7K?y??????~%???iL^? Oq??l????)Lb ???Eg??5??Gx'0???C??? ?R?.Nz'?????W?E2V?? ???"B?????_?\?v?/??!?????M?m7??~??????g?????9??f?j??8A?????????ct????|???1X?i?????{?m???'*?????????a??rR????5?LYs?+e?I??y:j?+ L_???1)]?T?o??l???-;??#?fh?+????3???fO????j??* |s????m? D????G?UK]?Ye ?;^'???????t??p)?!S??6?|CGIp??%???(?????0?t at 5?ikr??L????1??V?+??(Z????;??w?B?M??g?5?Lk??E}iw?k??4:??b?????????N?K?vf??J?F?0F];1?h??+??????P?! ????e???!MKs????1??e????O??W?YX??"??oo??? >???wfT??}????rQ?? d???=?"? ????D&?C[W????:??Q??1??hX??Q?r at DG?kq6??w?/?=i????-??T ???'l??%z?k???????2f??`4??0???S;?????!?$?n????6????Z????c?????^{:|At?????aG??????????g???&i6v?G?t?>???l???b??v?K?????#???????8?a??g']????\???YE\d??7?????k?uV???S=??C??a??iW?Tf?|}?A???S5/3'??aM?b=|???? + %/??Oq???}a???5zcK?`?;???}G? G??m???3??H??b??^??V??V?T????????'????Uka??ydd><'??J?J??|`5"???g?l???_?s???@?/C?v?G?Y?J?k??????@/???O????'?jm??/Y/???????s?Q"??2|x??$??u??P??8W??$?-??@C??????\u0?>=?_?X?A`?s???(s?t?E????????s8>Fm_@???M?OW??i?2^?Tv?2??Wp?@^7?????B_??^ ?V\e??8?-????=K??Z?J?2??_????y=CU?????????l??:?y?? mH??:??ZX?w??F??R?Ty6]?q?????? ?????l?aeM???? + ?L?P?e?Q?? ?????? + endstream + endobj + 2287 0 obj << + /Type /FontDescriptor + /FontName /SODEVD+CharterBT-BoldItalic + /Flags 4 + /FontBBox [-190 -236 1243 971] + /Ascent 748 + /CapHeight 678 + /Descent -222 + /ItalicAngle 11 + /StemV 120 + /XHeight 495 + /CharSet (/P/S/c/e/m/o/r/s/t/y) + /FontFile 2286 0 R + >> endobj + 2288 0 obj << + /Length1 1454 + /Length2 18511 + /Length3 0 + /Length 19492 + /Filter /FlateDecode + >> + stream + x???ePd[?-????$??P??Ca??????????C????e?}???|???q##3??????>fddR?(?2??H??:3?02?QP?:?+ ??*??(??????s?P)\V+ "?U! ????QR#?U??,??-eTD8?P???^|???e?t????+ ??qb??\?????M]1=?d? ?c??, ??%~C at +?`+ ??BX??p? ?4??:?f&K?????r?[c??#????0,?'5???{ ?a??$;Y???#???>?i???)Q????RS9v7%?#???8??,???|Z????jg??4??X2p?"y?Z????l????LiU??9 ?W???@?????????}Q?=????-??,E???b;,?????-w?????Y ???????zKj0???.%???:?m?G2g?f?|???N?g??$?#?x? X+?n???5!????~?????0?????V???n?7?^?(]??owh?]m?Y??o?H{AF#?o1???????]~w?v????_???M??;?#&?z ?@U??????????????S?~ + {??%gm??:*???qTp?+?M?????C? + ?#8???DW??zL??????????'Q!?#?[??!??d???%????????q?y?????????s?K*O?? ????Fg??EN?? c???`????)?*???T???U??8???~??x???+?`F?t|??????%?V ???K?7??)O???Yc??3??|sX? ?[??!?vCH?f?D ??g??e?a6{?????J??N?A\?L(??D?zvD??pE??3??O[??oV"qi/????!??C?xE??X???1?.??X?Hq?B??#7O[ ^?q?KYG????z??Z?y? 4?????Yj??3??????U?_@q??D???D ???`:pk?3jj?yg??M????<?Co???f???? ?X???q + ?5?s??8???ny\W???&zK??_+??a8?.?Y!?7RDU [&???SD?z\?{|???A?+?"z?e?? ???Ax{???W?q?*? &????db=2?.D???????Z??l!!w3?M?NZ??????3d?? + ??Ij6?P??f????C?>?(??0i????)? EY3T???#??i???h???.?Yf$?5?h?5?@??YzGIL?m??~?VB???Q/?a?? L + ? ??O?;vQ?T?M?1?o,?;?'?z??+G?P9@????E???8?|?????`?????h????,& ?1H? ?8N???*?M????n????Z???V?"??=??P-??5????%X????S?JC?b?+ =?@(?@6?b????Rc?@??????ewRmU???x??????M??y?r??gw@???? g?I?y?????m?:?LW?V?X v`?? ?????????wn??0:.?1?a`?? ?b???T???k + k?l???{?Psq'Wn? ?D???po/?Cy8)6?n+>Ba?s?d????7+??????6???5?3?k + l>??T?'????9??I???au?.<????????)B at i;??? + ?F ???o?Ii?????=0??Mw?]??+?Gf + ??H?J#f at b?~??s???xl?? ?o*??>????"n??????6??q?\??????H??'???D??F@? ??G ???????G????????S??s?V??;??E????4Y/?d?\ ????E??$(??????? ?}~Wctj?l^? ?P ??  + z7?Rr?A????+ ?#(?](??9?AKE??_???7?-?????7?E4?Q\K/????[?6^7JPI?_?%?????fc?b!?C??B?c??B?=pihM??P~G?bLc??o?E?H?P?Z?+O;????wl????|0?ceQ8?Ib?x?b?'v??~????6?Xw[;?!????ns???H?P???J_}?????;?-????K??????N"e[????ub??DO?C??.????>I**0??y????????H???Q?e?;?? ???I??????Q??GH??|2?~Mh?8BR????z???i9?/]?H?@?h\?X?????uMN?I?Mp?? VG}??B#?CU}?>TxP + ?Yu??2?`~???g?#?~?b???t?:?z??~IRx??>??????????q?S?%?#fS?3???p??_%$'????g????D?yrdI?????#<:??|x??? + W?%1?z?x?????k?L?Xo?1,??????????L???????e?? + Z*??[W?fa??i???g E^{b????Z?? ?????k??????f???_T???R??8????6????n?"?m?????~"l]uX?????R??????M??1is3????????????=\?D?que????`??Ax??R?)?{m ??6?J??uN?1??Q?.???)1O??n?A?????G ???K??nZ4+eo`????s??*?MM)?C?@???e??zE?J?H"????3!:? 2???k{R?Zt?M'??G???M#??Q l?%?|??Ns?T?g??(??6?T?}??F6L?o?4???&????/???7 ??U? ??:??m?????????dUn?v*??-?{pch4??????#??# ???}x?/??Yj???j[?6S?NPX?B?y??2*C???8nC??P??C?@+ ?????0?9?+??R???MC?G?.?ee:?R ???WxAE4?!??3?a?[??[??E?????????PG?w?d3?sC??????m?W`d?<??Lh>r??????????CK0?$_%l????^???$k+??LN?r+?+ A$Bk~8)?w?????!??&>????d e @ ????/C9?I?y?]?? ?4?b? >??? ??S?**??Ol8{????8?Q??Z?Z???"??)??8?M?Ybh>U????o9??????? ????#@?????d???? *r"&?:?sE]~?~%?]Y??z?ycw??>l????t?e???_|q:D?????+???In??????h??+ 1?3?8??R?|[??_&?z????Cy??I\w????/V??)?fa?40????tF????Ix?????j??t?Y`?????]W??="?????????? ??2??eJ????I4?zmy??V?! u?U,l^6&????+?u + tF'_???4??.F?+??????6??A??\6????@?`???*+pE?,px??e{O???T1??b-j4=L?????~????c*???M??????D?z?.gvq ?Fd?%??4Z??)w?~%?J?]--?v?????j???????9g Iqy=9Id???ffO:??(d?? + ???????^GGz????42;???-?Be!C????? M??(?%?,\w???L???@??>:9???PV'???0???RX78??n?"8?&?????c??%o?:(?{=A???A???}?????l???*???Ul?Ba?4???PA:???;9?+ n???Je??? o?{ CRf?-?&??|?o???5'P?5?E?R?#_???_?I?????P?8??L??=? I?i??1?T???u?????x?? + 0?MZ?P????"?"l>?#??X??HT$X????`?2](?]dM?%`?[??d???y?C27p?x???UYg?j????M?t=????8U????Y?x?U??9??????LF???q??!????@?e? ?I3dy???OV??k??t??x T]?? + ???i4o??i?x??$3.??? E;?*z?`*???f z9??d7|?,5?J???:??n????y???:???u?]?W?y??>??y?ur?????????? t ?W=??xy?`?%\5yr3R*.?8-??????dTfM??Y???????-??i? + ?:?v@????9?z?!2?)xf?psG?0???^?EQ?:+?#??????d/????tf??????c????9Lc?DR ??q???19??+a????cR??B?'???0???I???L)?P?y?8????F?j ?U???L~?e??????{L-?L?r;?]$ R?0m?a?B??.???^??4?T?w?g? + ?????B??O?]??3??no??x]?Q???`p????n???CJ?+ ??.?H?V???#$???0 6????Ss?? + SSv?9??3E?8??ac?????O?c?m?[?3?T??????3??2??,m,52????MA!{? =??P??}??? +A?^???O??????j(F-????\???u??? 6?Z?('h]9?Yk??T??"z#D??t)>????M??8?r??.=??o??b?WG?QHG?W?-gZ????dDu ?B~?&?ofq*???s?e??????????p$F??sb?^x???R?z`qj?TL??????O?D?O?B4??*G?|(`?q??EP??k???&????m???M+*?u`?E????J???????-B1GD + (??Z?Q4?????#Xw ??????Cy)???d???@S??u?rGF??f?O#A????1 kK?[z?aUk-K{Mr??z"@?>?lZ#?1????????? g?i+ ???O?T??&%??1A????c???0???????K?P,?]h?l???e?????u??g.X?????]?????/??6?$i?T???e??&lB??s]?xc???!???q???????[??-?0?}z4Dj??$?pT?0]???s_??N.6?*??????????:hC? )??%b????Epho?:g??NN???\ + ????"?|? + ?OW??f????h>?Q/??[??9??t??Y??Fl=i??q%?X?e????)?x?{????* ?]?}I????o?U r??&w?I4??????8?(v?i????f?&~M???(?8?{O??5?9?k?b??????k??F _?n?g?G????t_^b?I>?>?????.R???2?D?Z?P?Z,? + ??L6x ?t??co??A?????.??{EO????vMV!e/"???.V???+ v???????s{??t?}???PrN???T?gzg????:3*:$t?S{d?S8s?*??sf`????}?s???0H?P??Q??%??34j?d ????1?JH7?9T???m4?i?y?#??oC????G:??#O?/????i?o{??6L?.$?s4\????3???3?????_???N*?wRT?a???? M??o?????]???. ??N ??4:W??L???M?S???(?O??4?7??"c?6?oL?}?C?,???>???=??T??0)?R?at2??&??,????QG????B??????A????'???l?K???g?????????To??gU?l?l ?(????xs"???t??/IB?s^?c??1???GD?3?9t??U?9[?? ?O! #l????IRo?d??????rHD7??csy??dc?v?,??(?R6?q Z|[$? ??r?#?Q??X~??????????L;???c??????{????v+ ?_F8????5_v?j?h??\TY???w9?6???iL??`??z??????<!????y?=M??}?????????????;?Z???1q?q???@??????? + A?#M?\??????????"?9?@?????9U ???? o?=??????????%j?x?NZ?o?I;?=?H??E?????12j????-!cYIF???E?rj??0hXA?.[??!????0???'??j??0^??? + ??v???$?z??(G?i k?g&??j???B?E,r?f+dqx??ys??8":?h|??[+ ?&?=??R{p?????&??ec??+ ?s???o?U6d,????R?3E? ?[????Vd?f?JC?????H7^?v???djOqX,t]?M??.C?k???Z?w?.??+6???? ?w???+?????g??&?0`%?e'}P??v5tK"??29m????l?u T|W?~?1?T????/+?.???9???#?$?X/?o7???,_?.???YKRjqSn??f??>??v?v/??Yk`c????Ji? ?-??N?ns2K6???~ + ?3???j ?????M?&???,????+)?X?W????V??O???y+ U?{oNZ??? + ?????^|W????y)?k?~"??? + 2\:+ ??N???is?/???D^ T??u?gX?6b?:Q???%?2q???x??>R?????J?4T????????n??????Q???g?1?r??j?8??Gw???Z??u?@?L?G? + ?/??!? ?C?????N??t+Vq>Ey? + g?"?i??f? u0??+ ???3Jv? + ?c?S7l??g????? 8???e ??J|l???W?UR?#?:'??&?Z_i#?s*??uW!&?K?}7????n^`?k??????G-g????y??V??'????N_??Hw)G??%?????\r?&&?+?F?OM???m$?????pNx?Ns????P?-?\D?zki? + ??(C?>#?B}??W?K??e????? ?????????Sl'(@_j?~?+ ?m_?HG`????{_????; };??????j?Fx?0????DIf?a??????+IR,?v??,??,N???,?o,?3q?%??;?}?C??(J ?b???????+ ?a???9R ?HvCz? ?M?d}?(?j/1?w?|???&?>y,???0TT?aU??"??u2??S ~?d??n?l?????z?????GK?gaGm?jx`?ML?}?!???K???:?N??qkT?K???8F6?l?~x?????Q???i??G?EP?g?)??:?`?? ?t???WxL,??v$??? ?]??Y?a?N??m????w???/????eM?{P??m@??^? ?rU_????0?(mI?^?!??/?????????f??,???mp?/????f?m?Q?: + ?W????G??tMu3??x???-?cHd?C?Wb??0D?|???????D???? ???u?}l?0XFp at R:H??:????-+ ?E&w4?cSW????J2*?Q??t?Tg|??c6??r??r???????-'N??0????????+???wi N?????????L????p[h??=??p???? + endstream + endobj + 2289 0 obj << + /Type /FontDescriptor + /FontName /DMRRYP+CharterBT-Roman + /Flags 4 + /FontBBox [-161 -236 1193 963] + /Ascent 749 + /CapHeight 680 + /Descent -220 + /ItalicAngle 0 + /StemV 83 + /XHeight 482 + /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/ampersand/asterisk/at/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) + /FontFile 2288 0 R + >> endobj + 2290 0 obj << + /Length1 1468 + /Length2 17027 + /Length3 0 + /Length 18047 + /Filter /FlateDecode + >> + stream + x???sxd}- '??6:?m??m??db???v&?mkb?|s???w??????W???WUkU????I ?iM??L???\h??II??L ],??D ]L?+ p???????hWc????????;K?????lJ??d??`ci?o+?N+ @a??????%??????????^???H??????8??;????~????:?:?_??O??+ ?O??m??%b??+????{?{??(?v?b???e???K?Y?z?N???xj??? ????~?o???????W?p??\*?7"p?#u?:????yT?2I????2?w?6B??+??o???:?Z9?O??~?~27??? ?f>???y??M#?6?????????|c?{??????M1)F??J?v??g<4????"??O??Mx?F?F?????c????X????0?????^?? ???Y?+C??*H ?p+ ??kuB?>???? E#?0???l???C? *'???F??DnT@%+ `?}x??H????? [J?=?Hr????"(????!?2P???>????3M? ??????0^0????'4{?5???!?ss???$K??????`L?r?WJ??F??Q`????? + ?????????v?+ ??*?!???KRt?@?`????? r?:3;{N?????=?k???Y??R'??&Kg&?????/y# + ?I?????~k????????sR ?G?-??X + w??.?|XM + ??0~???sl??r?*BN?~??I?$??wK)1?O?????? + ;????t(???x<??[???G-? ?????w??????0?M??E?3?$r??????u?=m?Y E???c??C?x??J????7?@??Z???\So?K?,???u?N??????h?\?????$??y,RRt!??j(?#Oi?$< j?0?? y???a?X>???k??Y3Y???)$?B??????????V??? ??V?? s[ak?[???u?)???V?jZ?????&Z%BN????]??l?,G????+????? ??}?P7?9(??!Hf???????6?????9Q@;f?6(???)}:?&???l???F.O?2zL?0?*`?^???$???p*/????0Xe$?Z&1"Tc??^y?y????U????}???L??5?NZmR.?:?_o??? ???i?v?_{-?????? <%?J?J|K??wG]Tu0 ??@???????=?e?`]?f?hw?\}?QPyM?F???WK?O?s'?s(??0D??_/vWu??~E?Rsd??A#? i?e??#?C?V??L????????K?2?M?5?n???s? ????!?r?D?"??????j?k ?!y?-?vc??'????!??????s????????????+ g?0?3????6?D?5??Ob???`????,?:="[?x#???#????Lg&? ?r?8%?B?K ??E??lr+jK?V9p,??nu???"?"5? ??Z??@O??????H????;f??#?bj??fv/S@??gz?\?-M?@O??/? ??Cc,=d9?I???T/???U9???8E???m?}??*W???&d2??u???QVa??????c: ?I????RUL3?"??O??5?E???5?q8???W????j?c{?<???! ???6Y??yd?r?}T??8??T0S?^t?$?1-??s????????e$%x??????????uc??P??q??C????Bq4s?"?>??9????^?x? ??S?\j?ujjg=?"]????q??SZT???????h{?v?g?q??+?\? ???[<}???\???C ??k???j??6???,9;?W?Tc?E?]??O????e ???=?\?Z + ??1s?y????]??iz?$??R???Y??z???+?????c?m(H???g_??~kpR????????M!jK?l??f?b??M1?}?Gg"???l?K??(5???gPo?"/?? ??.?uB???F??s??$?M?e4??????m? + ?U??[~????????,C?? ?R??{??S?-|?lH &??Okg [?^Q0-?y????)N&u???B??R???9?????.F??S?x$4x?v??w ????g?????#?k?Q?6?<@??S??? ??{w + ??@?E?4?z-v?=?q????v(QG?,??4???L? g?U???By?t??????S?kUe?PZE?*; ?:?3_? ? ?????????=???v??=Whc2Q???&?v[S L???Kf?|?a???X???????h+ ??r?#? JRq???? + ;-?=??Y?A)??B??g|4 + 5? + ??W???????++-???Wy?.B-??????8M????&????KK???????%m??\???d??0@?>?@?T???q??M??no??????L?5??.?w`?3?????.?P??@:^+ ??? ????J?4?"?~7?????d(1?8+ u????4?K??&??R?7? q_???M????O + :?m~U???{?x[j?z{2??7???E???B?x?w???8n%????^v@????7????+?????] ?1O??qc??Jh????+#?"n?????g?f?Ilr???J??=@JG-??????>J?u\?\??m????at/Y$???e?#??????????%????=?D????I?????~)?7Z?1?q?(???VT|?????L???w??7???? .x7.?????Go?-???UL?_z???&P?T?C(??hu??Y?Z?1??d?V\Z?{?5??I?_??MI?,?I?i ?jT?e???P???>T?:?r???$?:`?'L:?F?M_3?????[??_\?????,???|pN??>cp@?M?5??? Lm????y'????@???3y? 6AF??_p=E?F??: -? ??? I?o?? ???'?????e???;;??~??+???=/t??C???G?S at P??,?.?KJ?/{?u?hv4?bOA???r,C[?I?^???} + ??ASU?@|C/??????4???W?????X?C@?[J???N?[??`?/????u????p??????201??U??t?????.?,??V?>? g 7?X?DM?8?z?H&%J??F?p??Ds???d?*h?u[??s?H??? + g?X)~ D%??* ??"1???6}??~?;?????9?????o;?{??\? ??hY*??}:?????mf7???x???2?y?$=)?p$V?c???sv.~????? ?fBB??w?p3 FZ???7??bJb^S0??8A>?[)PB???*F?^???_U????mbs???????X??n1? n?=?%?? h,M?*$a??ZR + ?`2`??^m????Q?z???8=??.N??f8????0??U??????v?K#J????? ?M??<?] g)???(?\?]?H?B???m??? 4 + ??F?0? + ??????2???y????2?2?????`?YM?9????a8`KO???Aog?7????_?o?[??Q??????Vt.?C?@?zb~&??h??V?X??4?m?ve z9??x???u???pte^???5P??????????%A??*?GO?Q??Q?????????b?????C?\?~?3?]qp??????W?????g,??J?????~?f?/@??o=w?cC???{@V???s?B??V?q??[?*?? ???>"??4?j??h+ ???p`3?{e????P???t???h? ?B?z?M???????? + ???U???NaB>???Fq?j?????)G??'??#Vh?R;?T???6??=??YR???=r??U?HU,Y??&???????g?2$?,?????( s,$?s????L?Z???2S?D?O?m'?????????s?@Y?q???h?????????Z??O ???6?KBR??/j-?/???B ?+ ?P???(?????7L???S_??f[???C$oy??V??a'??c????T?J???v[?B?D[??X + ???%??;?.? ?H??????{}5??s????|?/x???aN????????_Pr?r???|??? ??dp?M??i)g??GW{???.?????t?? ??w??K?b?_h??l?8MP?`L?$??cJ?9}?.?Y???E#%?bDUD]??Zf??????????t?W?0???0C?????+?*?f???f/???!?>????8?????????9??G???T??*??V????5???="????K?t??c???A???&?q? ?*G??LJ?2?'="1?c?[??={U6(G}???????em?G?u?m?z&??D=?? ??g+??>`T????l?AI???!p?h}!?tNQ|??a \???n??,?%?????9??\?Q?h??,d??v??0????1'9d'"??h?dy??/sEWb?????3([RC6.k?6???????????????Y?1?????*???e???s)?i?????4??f?>(x???weF??S?a????k?{\%?y + %??^??Qx?5u)_(?]?? h??sBt????GT?b?0?4??????|l ?7?? ?K?]|4`# ??#?Vh?'?A + ?+ XX???? ?rk>F?@????C??/???????b?6\? ??G?#t??5?h?p???\v?a?KIY??x????(??#???A;*V\B? ??F?????FCr]??(??1?O???x?b??b?H??????O + {E08?!B???rx?-"??S?3??H?u9????????????????gs?h???.?ebD???)?d0?C??C??\??&#??? LM??:????_????A???nY$????J???????m)?4:??6K?0 ?v?????????F#q ??mV??YR???X??k??CU_n????2?!d???B????I@???A8???2?n?d|z?#?R?rR8.?k at A???kZ/???X?W????????nNt5???$???I?S???r?d`?P!?Kr?:??}?p???`??= ?????sM??%6#??Yu?? C?.b?k?1?y???+?Y.0??]??cF??F?v??gJ{????1}??c? Y?g??+?A?"N?MG???+5????p???&S? s5??m??8,1?~?OR:=,?????V?<q? #???&%????????.??H??IL??%]0???a??+ UWbGbrm?????z?|?H???KD??????m] H?????Q?]?X??????K ??????{3p?| L??;??`w????1? Q\??3??zH+ B??????/??? + ????m?X?W{-K?fRi??b?>OB???k + ???h?7a??S!^Z??)??s?r???=\MeG??J=;?bC???? e??$"?????C$5)??? + U!~??????Yu?????????T??oy?i#??{_?T????????`???WOY?l???E?!?d7??X+jW???+ ?!?? ??j?????A?N?A|???5 M??K?N??gU$h???q?D?YM^T}?????C??|??????V>wSD?0?9?/?W^??GO?T??3??????1E?U???S?#?&??3a_?l????q]?????te????????;/???]?=??y??,?%?]??V?? P?\z???????G??!kg?n?M?v?r7??qgQEgQ?B??????pXf??#?U??? ??e??0v?p6~Y?)&`>??$??Z&?s`?.%]Hv???b???yW?&s???+  ??36I????Z~0H????6?*),???^?d???MoF?M;rUfTH?1????f)>o?????J?L ? + ??}????H??_Z?_^??T ? ??[??"iA??~H??38???"?~???H??.\i???{?)??"???j?aFDWI?QmW6A3??'?????6U#J???%M??-:?.1??+P???W?sn??]?OQX(??`q???z + Ch??D?5D????Q????#z?b?v ?????????_6Q??a?????D??8K?SM???E?Jg????????Y?W??a?!m???@?a#2?F?=?hijf?X?s}??????????3?!%4a?_?*?- ???9 ?D???> endobj + 2292 0 obj << + /Length1 1016 + /Length2 3994 + /Length3 0 + /Length 4641 + /Filter /FlateDecode + >> + stream + x???g\SY???P$? ?r EB??t?w?!  ?A??Q)J?"Ho??A)??Pd?? + ?("?F??;?y??????k?{?g??????h?+F??'I `%@?H??! `??s?4?$ K?k!I%+ ?A+ ???o?{d???/??O[?????P????? ??j?1??a*?????W????????^??]?????1???L??<#*#??B??A?7?~??hS + ?2I,???+2???, K;*i?vy???w???J.?F??0?7??a?'R]?N ??9?! ??eKT?2????N?y??L at g0v??????????f???)A',?27??9?|?xA$*?lQ?3{&&?4{g??,?:?????g5>+W????[?{h???i?a??:?9??Qz5????~????)+????:?l????2fG>?(W?X?4F;)Q???.($???s??=G?;?{3{??;?????a?????H????a????o#N /K> + ?????:??<*??B%?????@*?g?1?5i?\??[T?f__3??If?88vG??TFf???? c????n???XZ/??a?I0?1?''X??#{*"?6?R???:?z??K?R?fr!+??(hQU??nv? 4b?????????!?0????vH??@Y??????? 3?????}?`?????3P??+ endstream + endobj + 2293 0 obj << + /Type /FontDescriptor + /FontName /EROGFV+CMITT10 + /Flags 4 + /FontBBox [11 -233 669 696] + /Ascent 611 + /CapHeight 611 + /Descent -222 + /ItalicAngle -14 + /StemV 69 + /XHeight 431 + /CharSet (/a/b/c/d/e/f/hyphen/i/l/m/n/o/p/r/s/t/u/v/x) + /FontFile 2292 0 R + >> endobj + 2294 0 obj << + /Length1 786 + /Length2 1360 + /Length3 0 + /Length 1907 + /Filter /FlateDecode + >> + stream + x??R{????@??H&??D???~?GsL?G??g]Qf3!<??,???q8? ?@?]0?\/Z?!?s'X~?>.??~??&>?2?? P_?????5?? IK?>??H????????a?6??!??lX"K????? ?`?+ ?x???H??????????X?$????{?&>,??w?G?????#6?.?w?'T?l???h?????jJ#A# ???3??/?K~????i??!$?i??i???Z?~???~????9??u??????^:#EHq???f???M{??????Uwe? _?%??[8??p???g?n>4?MVw??????????Q{???J?i?1???lM?k??????? + 5??y?????PES@??1?Y?W?fxE??mIX?m?}p???????o??????C*?A???_?sI???? ]ld2n?I?+?Nj??g?f?? ??#U??~}(??-??????W?d?o????s?}? 0?????(YA?oF?N?i??r??*+???N??:?$F%z?%?????]EK& + ??R'r???j??f?????W??^[?5?O???R.{L??????L? ?N)?V????)EQ9??m??B?k??9 + endstream + endobj + 2295 0 obj << + /Type /FontDescriptor + /FontName /HKYWYC+CMMI10 + /Flags 4 + /FontBBox [-32 -250 1048 750] + /Ascent 694 + /CapHeight 683 + /Descent -194 + /ItalicAngle -14 + /StemV 72 + /XHeight 431 + /CharSet (/greater/less/x) + /FontFile 2294 0 R + >> endobj + 2296 0 obj << + /Length1 774 + /Length2 1562 + /Length3 0 + /Length 2102 + /Filter /FlateDecode + >> + stream + x??R{s?Zm??e????3K???^9?K???$???'???qp?SuE????C?o?!> endobj + 2298 0 obj << + /Length1 768 + /Length2 1129 + /Length3 0 + /Length 1668 + /Filter /FlateDecode + >> + stream + x??RiTS??E?2?*??? d?+ ????`QQ+??????o??s?????}?9???d?+ ??? `??  2D? PHt:????????|1!?gaA\?j"?????M'@???X ??D??????akns?8?x $?n???hH???????89"<\?H?????Yo??Uc|f???^`?<}???????)7z?>?&E?_?|????????|?B???k?D?????????oq.k_>o^?_???9??Q?+ J????Bcs??8?t???j=?????o?W??????? ???Sj??????5?????0???????!KJ/??=?????m.I??????e?2?????????a[k_????A?:? h_??G?BKSm?????C?B???~????b"Y5p???yy?p?jS??t?s?????Q?y??{s?F?" + ????bk???t????s???w?N??T?h?/??5??+ endstream + endobj + 2299 0 obj << + /Type /FontDescriptor + /FontName /ZRLUIR+CMMI8 + /Flags 4 + /FontBBox [-24 -250 1110 750] + /Ascent 694 + /CapHeight 683 + /Descent -194 + /ItalicAngle -14 + /StemV 78 + /XHeight 431 + /CharSet (/greater/less) + /FontFile 2298 0 R + >> endobj + 2300 0 obj << + /Length1 760 + /Length2 1184 + /Length3 0 + /Length 1717 + /Filter /FlateDecode + >> + stream + x??RyTWC?,"????h????T? q ??&?L0a? + ???U?H?*?R?A? G\X?Eh???z+ ???Z/??3?C(??I+ 0aP8,!?g,?H?p????O??????Y??+ "~{pDqT+ ???K?w?8????b???H??M??}????~gg??'?$X?]J??Y~?m\A???cV???????=?2x??0q]????7???E|W????n?h?F??#%$O?L?-|v?[??6???=???]??m?qs??T?r????}Z?(???r]O3?,?hW?&?T]??~???cM);??r??????-?q???A eX?!?,?y?5%?bf??@g??sp?j?U???B??-9?Lnqv??????!????;?~????B??????3?e?b????=V?1Qk~??Y?`????~??I?#o?g??vu?? ??Te9_?fh?7`?w4?0t;???? ?6i?????-?????y ?????4?Ig-ti?F?YZ2^??=?+Z[S?i??;j?????N???j02?'?{???F????7O + endstream + endobj + 2301 0 obj << + /Type /FontDescriptor + /FontName /ZTFRYM+CMR10 + /Flags 4 + /FontBBox [-251 -250 1009 969] + /Ascent 694 + /CapHeight 683 + /Descent -194 + /ItalicAngle 0 + /StemV 69 + /XHeight 431 + /CharSet (/one/zero) + /FontFile 2300 0 R + >> endobj + 2302 0 obj << + /Length1 735 + /Length2 1031 + /Length3 0 + /Length 1548 + /Filter /FlateDecode + >> + stream + x??R{8?YF*?H[?R????33fL??`F?K?eU???????c.?\Z?P?JE?-?6%??-?.?\Jl7$?????m????}????{??????????a???@???"?)? + ?9????D????l???ll???d? + ?-??-?(d?.??B"HP???????????g?(??6x`E???gN?;,?a0dJ ??pD BP???G????6$? + ??!n + ??& + ?V|\]???6N??f?zp?r??5?A?;?^??N?Z????'??.Kx?????????? OB?pI??p[N?????????P???+ $6Q'??&ls??{q??t?= }7??? i?Z???ig?R????7????g???`Mn??9?P??'=l?3?K/H"?{\,.j?l??~5??yh/????\a??2??x??`U????h??????N???A???A???>k???????? }????????=j??! _??8-?+ endstream + endobj + 2303 0 obj << + /Type /FontDescriptor + /FontName /EJASTL+CMR7 + /Flags 4 + /FontBBox [-27 -250 1122 750] + /Ascent 694 + /CapHeight 683 + /Descent -194 + /ItalicAngle 0 + /StemV 79 + /XHeight 431 + /CharSet (/one) + /FontFile 2302 0 R + >> endobj + 2304 0 obj << + /Length1 812 + /Length2 878 + /Length3 0 + /Length 1429 + /Filter /FlateDecode + >> + stream + x??R{8Ti??%??iIC??+???9B???"?2n!K???q4s?8??$?FMSn]L[?J?e )O6????g?(m?L*?"T?u???????s~???~?????l???%??`g %,!?+ ??&?+ ?jV?????? + ?R?[???v]???? )??y ??&$"=hv????k??63Z$?>4(\???VD??a????2n\????5yN?R?????i?]???i???J?iFk???(?????f?y?{[]????????8?>m?8?[??E????3.f?en????@-m\??5#???????{Pet?q???7??|??{? ?Vs???.??@MGj?????w????p?F?At7? ?#??L?????0?.????F5?N56?S?k?=9G? ??????v??}$?oc`???#1p??a???M??++I)?C??k???[?bgJC{???e~{]??U?RQ???OoD)?^???O3? `? a??d + endstream + endobj + 2305 0 obj << + /Type /FontDescriptor + /FontName /GCTPBM+CMSY10 + /Flags 4 + /FontBBox [-29 -960 1116 775] + /Ascent 750 + /CapHeight 683 + /Descent -194 + /ItalicAngle -14 + /StemV 85 + /XHeight 431 + /CharSet (/arrowdown/arrowright/bar/bullet) + /FontFile 2304 0 R + >> endobj + 2306 0 obj << + /Length1 2075 + /Length2 13567 + /Length3 0 + /Length 14717 + /Filter /FlateDecode + >> + stream + x???UX?????[p?0 ?;Ipww???5 ????%????[????7?Z??????pWWW=U??/?$STa2?3???:3?2??D?TUYY+ ?5???????g??ZT4?:?z??'????b?7????a?????????O21[;S??9??? `??h??>>`?x?@??@w+ `?x#6+ ?!??7kQz#??7kQy#??7gW#pv?7g??}??~#?????idc?.F?S??VV??e6r2??A?????9??1?,???- 8????1v42?:[???????????g???'8???5???''???7??,??? >v?o????_??Ywp???-?B???????\????????_?.?o????<|??]?B-?d????????/? ???Z????X???N?)??l tr?k?7?7?^??T??X? ??????m]l??y???~R???D?c?????\???28???#???&???????+;X?\?+ ??[6?????8??N?????u8Y9Y?\?[Np???????O?nvm+ ????K?P? ??????Df,?}zc^?D?K?`????bU,?R?[?U?[??C?1?a??j????X?W??dl???????+??c?N????]?4???H??|??,q? + 9??{?E??X?CGoT ???Uu??V?8?dT?M?]?mw?(G~???????9??im??'?????9W@ X??V??$=??n?v?g??O8?~?ep??1???k0J??=???N?  ??8GQ5?e*?2?HaO??H??#????_???R?tw?j9??hL?~Dj90_??a?,?Luq???1a+ >f??n? ???? ]?>?N`? }?+ ??Ldi?Dm^??????????|?~?l}??@?Ib$IC??????d?n?D0IN?R,?)]}??sE???vtT)?#U?f???t?Pu??i??F??l~??R?T? '?=^???>~8??i?Y?????/61?`????e?????"???-??Yh??@????1??^f??????(z?=sm?E??????nh/?R5Cq~??\?????Z??t??R~:????"8W1?H??? ???>U?i?/?>???1??I?a??2?/???w?Y?|??F??????\?C?M??s??f???????;GM7??W?q + 1?? ???? ? ?Y1}2?)?/!???&'??s???n???4?????Z?}??b??6??\?Z?q?#k?q???????2???3????w?lD?ec??????n??_I?? ?H?????4?\?W?ZxxI???S??LQ?C????R?e??V??q]KCP???!??n6??GkBfK?;????;????8V?8&?.T??e*2x??-??pFpI?b*-?7???? ?1V?>????t??M?A2?~?U??:;5'* ?%?@?-???g????T?Nw??|??P??a)??*I?D&b^??>7U?r|hI? ?]Ac? + UR?;?,NC?z[ >?E??!?P???H?????/ ???G?"? ???!3??n[b???)??=?~fCn?XQ??*?;U????~?_???,V???H??w???M~W?????h???h.???v?L????.4P?y0?nw?????S??hJD?OjDh?T[?FHB?(????dDw??$r??O?xl?{i???G?? o?AH??B]?k: W???A??BP=? ????1F5??`Y?&H?v&??*??!L??K?????? ???~??LE?j??)m?2_S??r????# ?PD??5??y=*??????R?\??????,Qo?YIr???qUy?:??cw?s] 1?^???s??w???P????8???Nx?Q?CY??W???/??tz????1Yz??tr?/N??&]???n???? O'?*?P02?M+/??jl?q??^???.??$, ??^?[fY??#FV????7T??}hJ??u??Z??f?!xb40??A????[?? ????C?}vu?k??2????8X?^42l?~?o?5????fyd?U?O??2?????v????cf??m???Rd8?gg# ?B??R?#?i?:8/?l?.??t?W??"???????%+b-+ ??`?m?5??<7?]?? ?0;%?Lv???????[i?????!^/??A??????!/W+?,G?M?U?.g?,??B???J>N??r?x?;??M???? =Z?Zs?j???^a??d??G4?Jr.??F????????q>?? ?u? ???:?"?5????'???Y%????????j??????x?????\????(])#??^?r8f/?)I????qx ^???{???(???66??#?E?p??9DV??????????Si???ou?Zm<3?????Ur_a ??M??l??1?-?W?f????;] (??nA??z?N??8!m????o????65??*j?hj? SK????]I?S=E?|I?V?|oIK?/uG(??s1f?QP?A? R?Ly????????F???Q7;??+ 7?? =?z&p?A?F?t??Cr??X???????N?k??S??|?k?#=1???????%)?! )a??`8?wb?W???y?^,?">X$g&+ ??w?gU?qA???dX??'??xtV?}IW????ySz?9)??D?\z>tp|\9??uM?????0*h??4?F?"%??S+ ?.M=Ow?y? + }???t???`?uG??????{?? g=c?4??J????T?i??mn?????J)?v?'????????y5??;????a?~?k?j???d + ?@,N?>??m?9???M>????x{???&?7[??Z1?E?u?T?P@*?i+?qH?? ??}??s? ??c??N???2? s??8?? ??9 at TUD.??\R?*?L???UK??Z????? ?=E???*????3???!???}1???6?n UM????.r??OdM?=&?x,|??a?S?7BN???aq?QtV??&??????*?%Rw]%????Z??\?]???VE,ZZ?X??f,????!????B?????l?Q?:?b)$?????B??22??E3?T?L<#?$_y????????????]`e?q?????)?O???+????R?$:???uX?}??ph"? A8m???5,^?L??e???U???_??Y?j???????x??DS$?pe??e???????G?\?q_!x??q{?7???O???]z???L0=?????Q?5`?? ?k\?? ?? ?\??????q,???V??R:/?9?0(?t ??????n>G|?d??Z/?P_.?L'??T^??W?J,?L????????8C?? ????|?-h?I??{?%?^?????3S?z???pp????en? ??V???K??????(???T?2Yk? ?A??8?5D?+ ???2Z??q?mX?A??????/????yI?Ja??K:???)r{y?? )x?2qb?tCT?4uX?U???:??1R??H?^??)X?????T}CE??k ???Thh?B?7k2???66?LS?p?Sq???Md?????k??El???Wy??n?????d/???=?C??:?????Q???4???'????V?:;???ut?W=d ?f??S??>)\hjg???9??]??`KX???Pf?????~&'?? + ??8?????]?te a??p!?`+?!?V_??H???7_K?,?tt????????????H?VJ????=,?3?k ???????>Izv???KPe?R?} ?[D3x?hlk?6?%d??????S~?????h??{I80???A(b?>f?F?????=R`[?f!?X??~?-?&?m??U???LFG&??^??.????)"??VJ??+?C?C?H?~?]Cz?:??V?????c?}??0l?h???r??5?O????2T,P???F?PN????Xm"????l?\Z?????:?{GG?v?O?5?w???S g??65?W???Q?O???5L??{U??xU?X??U???_???y???~?]?B?g?,]>?N?M??]>?e???.??%&??cW=??~'|?xml??z?^??J??+ kh@?????Q?~z?3?U???GZ?????u??????1????j???G??xRLs?U#???(?0??+~1? g???u?{D?=6??O???????|????m_.?b0 ?7tt??L~??sp?g??W???6?^????n??M ???ans??32#L??w^?????;F ???9?y?a???R?ePn?!a???\? q(??,????v????+ ?? I[!.?0q?2???u8?O~ ?e????i???*Jv??3%B????^??? h??gg? ?$??\Y@?.?`?_?????w?-??+)?`???? ????^??w a?j6?*{?????=????m??P{',s??'P?&n?=?q??=?W9??;?0??p?m???????\b????{i?\? ?( ?????? + C???0?l?????J???? ]#!????`?~???????a?g?e???T???9X???=M??|???????n?k?????Y^ ?{???[????C>??????g,???s?;????????R??V??vL?S???????f????FHv?s}??D??%?1??P?+ V'??? ?zhf??r?? q?R??G?%?h?????8?j#? + 1VS)??????qo???{[b>c?m???Pf???8??ug??BgF?\ U?| YVp??0??:*???x,wBP?&????)??%?5d?w??pB??.??????t??\B6????I???R???g???KE(@nT ?????2M?7N ?\?>Z?A???U4?T??;(??/&???K??/????1???? -?????e?+ d?G?Q??qzX???Sl?????!i???/??V???J?2????w + -?|[J?:??o?_?? ?6?/??]?FeBFW + ???W????zE????v??y???*??e??|AE?a?G7????~r?? ??Jb$?i?????*?E9!-z?d?z?wb?S$YbH=W????????[??U?dzD?? [?BF????????T?3K?x??Z??#?C???E???????????OJo??&?4??A??????V>`j?>??@-??[-??,"y???P?:?4%q????y?(???#?=\!E??6?????~N??&?????\??D?????????+?r?N!?;V????-1C??,?[Y???,?'????>?H??M??C;n??{???"??k*T??Y?????PvJ???!??G{?8??S??#???!?????q?R?U g+ &??'~^Y???J M/??U???ML???DP???????I??D???La??z0AN?R??m???u?6?_??>.XMJ??U???f?0???s????b????Q7Wk???Y?f??Y?G[/??=??'?S?NlaA?K>??fi??TT=???????v??x??:E?????Gw[?????Cw?k?/??}?td??????#X??}CO/?,?G5?v???D?~???n?)?&q??vC$T?????7?????, 7???,?n?y<?&? J?&Fr???F??>`@?%?/?,NRI?!NuQ??a??G%?}i?u??Fn?7]upS????%???*LY$d??2VX[??Z????????v???R??;?^?M??G/?~?=?????9~?6??n ?!???q???uO?e???????????????4e?|???PZ?_ArEEd??'??L#\??l???o>????CiLH??{?k}uD?Ax?#?@?9???]l???? >??21.??z87????c??Y?N???oL?c??5\zY?76c?w?5?q;9????1E?Zd2j???????.?p!=?1?$;??Q??9?l???l???~k[ ?%?;)M??/n?}R?? ??}??Au??3}S/??S'??g?F?`?+?EY?|?+?! + ?ve?t-???I?]R????O????n?ap?&?"_`-?????? + F?????p6?o{OkS??d???>?8o??-{2?B?=??L???t??z??w|???j?* =?????N ???P?5?,??I}t??x??X??P??G?F^xE???- ?"??????V`gm;v?6?wZf??/????2???I }?3?U????u??s???? ?-T\??|????E?1??8?~7?{f?#????????Oo??t"??n?G?%??QE????0G?N?^H) + ?b?v5??*VX?c? ?????? ????O?????< ??@HZ?1.???a?r?A?Q OX#?+ ??L???4?(Rmv???????9??g????%DdW]??#?U?T???t?7X?4????:5d????P7??Wh??8J??_%:E?W?#??Cb?????"U4T??bi??U?:~0??c??/??????????8????NX????? + endstream + endobj + 2307 0 obj << + /Type /FontDescriptor + /FontName /XQVQIB+CMTT10 + /Flags 4 + /FontBBox [-4 -235 731 800] + /Ascent 611 + /CapHeight 611 + /Descent -222 + /ItalicAngle 0 + /StemV 69 + /XHeight 431 + /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/V/W/X/Z/a/ampersand/asciitilde/asterisk/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/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/question/quotedbl/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) + /FontFile 2306 0 R + >> endobj + 2308 0 obj << + /Length1 1504 + /Length2 8179 + /Length3 0 + /Length 9051 + /Filter /FlateDecode + >> + stream + x???eX????i)id(%??A`Zi???nA?[?i????n???F?????_??|=?|???c???zf]?5???lRfv&`??-????K ??p?sb32J???p????1, ??H9Y+ ??3???n?+ ????-?ch???0???!:y?~??h+???R?g + ?m?????IS???>????`a?NnO????,U&?m?%Z?=????+ ?M????????W?R?S'??????m????okv?????y4?%?.???{???,?Jq`????5q???v??)GY???9?????]?[??+??1&??-???&|5???????E?\???$>?6=???!`?IGC?? ??}?4g?\N??cw??$/??G]?? + /?&??^??Z????|c????????~{??x??=?[Wy?FpP|z??'?NL?&1>????;???v/?i?????? ?????j?O?-???T??-T????y????y?!??????S? ?,?4?????+ j?e??$???????J?8?G???gV?l??)???????????V??????]??y&n???:9????d?E?}X??8c"??z?fe??N9"]??????D?4$IV?H??uu?C???sf1?i?`??m?JN? ???k{~Z??a?????n-?t9???S??0?R7O???T?<1??4N??(?P8?z???wm?V? ?????z$?????????c???????????????F ?_??&???/X??[{??`???T??^{@???X??? W?v??\?F]???Ew_-????/?}iu/?)U???????C????!???n ??0??5???E]?b?????W??9I???dz??Ki???l??,5m?&O?bS?3?T??&??????1S????B>S8???????ub?????4 ?h??t?????`?ip?v ??v)????c}{'H?V?????,?+h5?Q??QE??MPV??????9?????L????C??b4?xq????Y???h0}?H? ?.!?s5?M??? "+ Ni]????<[???> + ?#?2XM?J??V ??????AH)?k?????????b??|? xb9/????9Q?n?+???U????xq ?????U?Sp????/U?MR???u?^StFz5>????L???wfhp?XS?\??%K??????`e??Q??`??)?T??xm?_??]?Y?_?5?Xv???Bh???"&?8??o?@u9??t??????o?????A?+???k"??|????!?v??J?$Q?2??p?4??????cp??X???Z' ?r????o~???&H???F?J0????JP???Y,?????*??4+??f!O?Sf??54????*2?4??k4m?H?kV?????H?g??!8???;?n}?>?:???T?NQ???????=?????K??>5+2,ds?I?\/?~{????a??;*?\?=????g?8o)J?g#?4?"f???|W:???*z?|S!"c?8???@????????*Q???(R?R?c?'??????,?????A^.-u???T??w?V?&?-??Do?LV+?Q-^^??N3??????;??-?,???i???Y??h?&???5???J??Ue1+ ?(?????5?? ?jl)l???r/g??>??? ?q??ca?????*?T>!????c???S????$????O????+ g??4??!}#*M??WWwl;^???[?????#????????Gh??+ \~??b??n2?B????A?2=a??:???N???}???????????H`P?????????6? f?S$??0 + _?k?@?F??Q?X?;:?R^??xKI)?>-?S??\+?R_.?? ???4??\?TI???6?)???q3 ??fnad0^*?7?7pCn + ???+ ??? ?+ ??B??? ??L?H4??U????????7? ?O?4bZlj?Q?gK`?%??n?d??/???:??2?c?a???????T???? + G??r5G???a?????????"pQC??C???n??l???Fe??+???l}??k??d??-1??,^h???%\h?dH?)??r?%?xS5?????>?S1Kc?Ew????)P? ?(-}???@?G[?v?????;?_??+8W}???{B???p&uW?]???????????'?2b?a?b?j????QO/j?_????+(?s????B?c?p??*?$? ?????9?T??w?S?L?w}?Z{?k?,;%/^?? + QT??h"?P????BY??@3]??4?8_J?b??b&????H^?:????#?o?Q??Z???O??????0:cm?????J + ???g?? ?&J?w?/?????$??????8????I??/)32??????G???#???N??? &?s?#?R?"????"Y}???'C?I?s at w? ????????S????+??%V,?SN ??????K??[??N??? ??L?wS??H9???????9?y??K??3e?@?/?ZJv#??q-???????!,???A?c{?V???G,?*??\??*?Y?????x????F??W??V???K?{|?! ???l2?? ?????k??'?? ??CV8?"?}[?iy?????Y??7a??? ??e5?,?? + ?????5?}&uE???m?+%T?(?]?K?????*?`W??????R??A6Z? ?????Ip??y?f?2YF?? ?l?RY> ?Im?G?R8?X????{??;,^o?t??dK??r??6?u?[16?[ ???M???*@V?>??Z?Z??{??E?R???0 ?j2???(??nqn"? ????`????e??2?Y????????U? 0 ?????????[a??7??'?/}?????a???e?O??W??S??????7f?0?? ???6U?K??k??L"????t0D???????[!??????/?!=q?x.?A$:???W&@???/nE???e?{~??{m? P z?%%\?{+]Zb?*???GQ]?q?2-?? + 1+??`(??R??????.? ?\?L?GM-????~Z?? (k????W+Jo?mN??$?Jd Z???-??l?8??7?J??+ *J??&65??> endobj + 2310 0 obj << + /Length1 2206 + /Length2 13530 + /Length3 0 + /Length 14724 + /Filter /FlateDecode + >> + stream + x???eX\??5 + $H ?{#?????wh?-8?????n???5??;?~?>g'{??z??Yc??????B$?D#`dc+ hof?o ??w4Z?j?[?l ?????+ ?+ *?????A???G3????_ + ??w?????; +???????Vv??H3t???????A?????f???4?]??1??7Oj,???,??4i?????i??[??,????]??T?????G???!??CaL???.:y?m?Yo/????U????-???1bK??? ??????x???????ly + a?}?U"?.M??????lj?????j????????????#??~\???2?i??ri????? ??? ?h??(???8a??JC@?0??????P?p???~??X(?k???pj:?r~???B+C??2????;i??z????0?JM%`?$K,?????L`32???????!??"?fw ???3??d *???????p@?????oh????HNS*?m??????i?bN?>??&??"hf???9o???~<??Y??G??UH?2I?3w6?^?? ??3?_7Mr???5}q??t??&??i"Rpa?$ic?j????V?Wm@?2??????e????:6?k?1VB6???P?:???8eH?'e?{C??3?|?k?W?w?$???[??=*??Mn#it?p?&cx?9?-? ???P?2?s?n?3e?K?sX?Um + ?????{?????\?C;?:"?T?)7?9~????????}??k%?L??*???ZlO+ ?%E_>|??1?H???M`?? ???LL?GQD???3z.q????{n????.3O??G???H?:?oa??Y?bt0??????"?9??4????T + ???U??#fhR????@l????1??o,?;???%I??;1??F?????Jz ??);?/???T?TkY?i?P* ?,|u??_??2 ??v??Xp??d7??H?????b???u "i??,M?,??N?#Q?]????@???u??w????*{r???????????w?????L???_??2?? n??? x ??>?5X???z???{>?qX???O?0F?I?u?????[?U,??????I?? B~?c?} 5?zlO??(`??k??1?%????:2&@?I?????,?wk?N NU'????h??????Cay + ??^???~???y^???P???')|8#??hOh?1s??z???ws?I8?[???6??r?+???2w???B???d}bd??O??v?54R???s??Mv??6???,???+>9E$?<-???K???T?N?*?????k?T??6??5:??????y9?M?)?????=?Z??+@????????7??s??8????????#?v??!c"!?f?????Y??#???OG??^?G??????? + ??rj??? ?W?2ry$?&?x!fA????W?*??'6???"? + k??T?PL?+ T+ *;) ????????[W??-0?????B \X[???7F???@?et?? ??T???????}?R?2)? c^XaZG?!???g???,?bl???(???2ZZ??enS?;????H?S? ??'?- O?Z??;]e*`?X?R4SG? ???uJ?/??xu???~:?z ????^l???a7???5w ?? + ?L<-????f?$?R|#'????:?Q?(P?.ch?[??? ??Z?'??#??11??~&J?F?/????'/b????5M????s1 tR=?T#??/!?[???m<4SmaR?f2?>?u?t?O _?Gyo??h76eX???}n?R?=??????w???-'^/uZ??K???Z??R??\????F7g???>?????B?I{gvs???$L???c??????????????$??Bw???D?????B? pK?~kED?Y?mf?cZ\'?9{???g????P3?9?r?W?`??[??C?*?Z?>%??????N?p???gv?A*?F=?? ??) + ?m;??? ?F? o?b???`Y??g?!z~?s?}??/@??<'???4????WbT?????????????_RF?F?w????? J?#???s? + ???Of?&\G}E?Or{???????LI??B?bL??>;??m??H )??dZ??b>4?2????A??^?V??w??%I/?n"{? ?+??l???? v%??K3$??! ???L* 7????~\l~ ????[V?IFesz???T?Iz??e?=n?*7f?I???'???2??0?K???(?/??k??|3????~?a??npr???z???1,??R?w?;?p?CW??O/?6?['O)Y???+ ?G0???R???m4?????L??????????G#^%??????p?a????%? ????a??``??j? ??????k??;????[k???w???????????">?MJ???OYw????}7??Y????phU<)JS???G?MMX??|9???l?J???A?????f? + ??????????G ?k6lZ]1?bo????????z?g?+???U?^*?C8????)??js??^?aIV?????`X??)???I??E??r??? }?N??X????hI?"????+ \?-?{q??.?????-o?????A?|x????z_?????#?????m?n?n?)??R?@??&???%?Gh??I{+ ????w?{q2??1x?y?_???(_??7;?q>?wsacr??V?N?????? ,(??? :ZUZ???#W? ?8???Lz4???a?H????X?xa??1??2? vE6?a???????Ey??O|???E?i?=%?r???A??k?yG+ L?8E?????Pq)?8?+l????A??&??vnE???kS1Gu[c??;????>w??a'??~? qC`???R??4???%?,~?9?|???2?7M?h?9E9?^"??~K????d???????v??8k7?\???'??n????V??S+ ?y3?w???f?b?>??h????T?????R?M?????7QQG??H`E?Q??%????aj? ???S????????I?:%.?23?z ??w?lo?*;"?%+b-???%!?s?bZ2%??+??????]G?s?V? ,?w???`~I4$?6s?????????T???Eh=?U?f_>%?Aj?Y??????????E???"@??C????b?2u??? ???2-91XI??????????[q2??u?j?s?????49; ?????C+ \?\?N2???mYT?ia??5???]?9#t|?*?N? ?)?+???X???????s?7 ?Gso?#T??*?R??Z?n + ??p8m6r?hv?y???U ?8iO?N???fN???]?????????X??*6?! ?W?ui ??wF??(QN$????e??NZs9??????@?]F??P?M ?>??'??Q?????'??w?M+ &un??m??{.?t?c?n??o??!??6?????Il?zp??? ??????G??^t?'??8.?$1???2?G=????????????@9g ???vpOI???S5-?n?fX7??R?Z?\??B?!?t)|??I?T?]KL??R?u?>_?????OG???l?3;j?? C} ??P"d? ?A??? ABYa??5?dUCTZ=?zJT????}??'???????=???1?2i???JpC9?N????+???)???o???? ?W ?????c?????~`????=?=@?k??.]?(Y?,v??M7qRL?"??? ????y?+ ?s^%??g??h?'N???????Q?WBp???c5????~HHc?^? + lG?g?b(U??????vS??:?>?W??d%??@l??qcL??M??? c? ?[?)z?28?K?.??}?_??=K??#??!????????6??`z=j.?!;g??*5?;???k`?M???z? ?????(?xJ??O???NgG?-~?`r??`???jk?UP$}ITG?`&?8????'??O?????lT?????L??yV]n#????Z?=?U?? ?C??=??6??(a?? ?????????3>???? + ??? ?L 1C??j??????8fA?? ?????0v??????=??S?R?I???>?d?f??W??y?'X???P?P????y?~?A??=???*/Ax?,|????L? ?R???k????]????f?5] ?4#E?????IV???????gm,?i??p?}R??Djn?)fWn4s???/????J?y?Dj???=??A???e??v?)??L+ ]]?"?v?}4b?????!" v?q??:???W?z????w??HZ({)s?'J????M???D??f?????tB?L?[????L?GN???\?????&???A????????>????4??w?"?????,D????28?eS?U????(q?w|'^?w??S??????`??=???6?frf??@????s?/M-?9??????2??S??1? ??1R?Sm??%?o???K0????@5?=5?4daH?? ????r????xAe2?L&????s?????u:~m?K`6q6?k?K???????{:F???^:??M?y??d_~?|O??Kz?z??x?%??z???0?]V?t?n??3*??X?>??=uF????t???b?Zf???????nRq'Su?d?3+]>I??(??}?J?1=?ug?w????-?-=?EE???g??m?Q?SJ?????G2??Z ?X??????]0??/?c??F?v??,????????M1k?8.RtG?![P??? ?? ?VB?q ??*BG?n???[?*?% ??Is??????8???6~???Z? #?P????t??M?a(|s?z??!? ????? 2tyV??j??X??;???B??\?)+Tb$??|????U??x???????@???h??w?#?/? + u???O???THs? ?????N?eH[??va + m[?Z???x?~_? ?y???&????BE?????q?????b???,?H???8??????2?Ij??L?}???P???1?aI*=??M??? ????(???K????+ IEm?f???+???6?8??[?9?[????uI???? 5? ??oz?%g?po]>Z???}?ieuw,??+;?3oZO)-???GX/??? + LIi??uH?j????gS??}???/????2??????P0?M?h?YkZ????d?????u:?ik??y?L?%jv?y?o?&?????+:??|^8?:V$V??NS??i???????????uv????mu?????????`?2K=:?1?m?:??????;&V?????-?????u(?:?,???A?q???j???h???iQ????+ s????M?#?????[X9??Z???(??R???a?????????/g$?+?A2m& + t?3 ~???/?A(O????T??z"UC}??3U?#?=C?R??????X6????{^F?\].? ? ??1?mqI?`?lSQ????????_R4???????d??>m?-M???Z?1??-> endobj + 2273 0 obj << + /Type /Encoding + /Differences [2/fi/fl 33/exclam 35/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 61/equal 63/question/at/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 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 147/quotedblleft/quotedblright 152/tilde] + >> endobj + 348 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /UAKHYS+CharterBT-Bold + /FontDescriptor 2285 0 R + /FirstChar 2 + /LastChar 122 + /Widths 2281 0 R + /Encoding 2273 0 R + >> endobj + 601 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /SODEVD+CharterBT-BoldItalic + /FontDescriptor 2287 0 R + /FirstChar 80 + /LastChar 121 + /Widths 2274 0 R + /Encoding 2273 0 R + >> endobj + 332 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /DMRRYP+CharterBT-Roman + /FontDescriptor 2289 0 R + /FirstChar 2 + /LastChar 148 + /Widths 2283 0 R + /Encoding 2273 0 R + >> endobj + 350 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /QWPLQA+CharterBT-Italic + /FontDescriptor 2291 0 R + /FirstChar 2 + /LastChar 152 + /Widths 2280 0 R + /Encoding 2273 0 R + >> endobj + 500 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /EROGFV+CMITT10 + /FontDescriptor 2293 0 R + /FirstChar 45 + /LastChar 120 + /Widths 2276 0 R + >> endobj + 361 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /HKYWYC+CMMI10 + /FontDescriptor 2295 0 R + /FirstChar 60 + /LastChar 120 + /Widths 2279 0 R + >> endobj + 1147 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /WVTEMJ+CMMI7 + /FontDescriptor 2297 0 R + /FirstChar 100 + /LastChar 115 + /Widths 2270 0 R + >> endobj + 1084 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /ZRLUIR+CMMI8 + /FontDescriptor 2299 0 R + /FirstChar 60 + /LastChar 62 + /Widths 2272 0 R + >> endobj + 1146 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /ZTFRYM+CMR10 + /FontDescriptor 2301 0 R + /FirstChar 48 + /LastChar 49 + /Widths 2271 0 R + >> endobj + 1669 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /EJASTL+CMR7 + /FontDescriptor 2303 0 R + /FirstChar 49 + /LastChar 49 + /Widths 2269 0 R + >> endobj + 463 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /GCTPBM+CMSY10 + /FontDescriptor 2305 0 R + /FirstChar 15 + /LastChar 106 + /Widths 2278 0 R + >> endobj + 498 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /XQVQIB+CMTT10 + /FontDescriptor 2307 0 R + /FirstChar 34 + /LastChar 126 + /Widths 2277 0 R + >> endobj + 571 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /RODAUQ+CMTT8 + /FontDescriptor 2309 0 R + /FirstChar 40 + /LastChar 122 + /Widths 2275 0 R + >> endobj + 335 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /IXOWMS+CMTT9 + /FontDescriptor 2311 0 R + /FirstChar 33 + /LastChar 125 + /Widths 2282 0 R + >> endobj + 343 0 obj << + /Type /Pages + /Count 6 + /Parent 2312 0 R + /Kids [326 0 R 345 0 R 352 0 R 357 0 R 395 0 R 438 0 R] + >> endobj + 456 0 obj << + /Type /Pages + /Count 6 + /Parent 2312 0 R + /Kids [452 0 R 461 0 R 474 0 R 495 0 R 513 0 R 533 0 R] + >> endobj + 573 0 obj << + /Type /Pages + /Count 6 + /Parent 2312 0 R + /Kids [566 0 R 598 0 R 619 0 R 638 0 R 670 0 R 687 0 R] + >> endobj + 754 0 obj << + /Type /Pages + /Count 6 + /Parent 2312 0 R + /Kids [745 0 R 771 0 R 794 0 R 823 0 R 831 0 R 850 0 R] + >> endobj + 869 0 obj << + /Type /Pages + /Count 6 + /Parent 2312 0 R + /Kids [866 0 R 888 0 R 898 0 R 923 0 R 972 0 R 1028 0 R] + >> endobj + 1085 0 obj << + /Type /Pages + /Count 6 + /Parent 2312 0 R + /Kids [1070 0 R 1090 0 R 1108 0 R 1119 0 R 1134 0 R 1143 0 R] + >> endobj + 1193 0 obj << + /Type /Pages + /Count 6 + /Parent 2313 0 R + /Kids [1167 0 R 1200 0 R 1218 0 R 1232 0 R 1269 0 R 1284 0 R] + >> endobj + 1306 0 obj << + /Type /Pages + /Count 6 + /Parent 2313 0 R + /Kids [1303 0 R 1316 0 R 1340 0 R 1357 0 R 1379 0 R 1392 0 R] + >> endobj + 1452 0 obj << + /Type /Pages + /Count 6 + /Parent 2313 0 R + /Kids [1440 0 R 1462 0 R 1476 0 R 1506 0 R 1530 0 R 1535 0 R] + >> endobj + 1572 0 obj << + /Type /Pages + /Count 6 + /Parent 2313 0 R + /Kids [1558 0 R 1588 0 R 1614 0 R 1631 0 R 1645 0 R 1657 0 R] + >> endobj + 1670 0 obj << + /Type /Pages + /Count 6 + /Parent 2313 0 R + /Kids [1666 0 R 1672 0 R 1702 0 R 1751 0 R 1794 0 R 1819 0 R] + >> endobj + 1880 0 obj << + /Type /Pages + /Count 6 + /Parent 2313 0 R + /Kids [1856 0 R 1882 0 R 1909 0 R 1936 0 R 1963 0 R 2002 0 R] + >> endobj + 2071 0 obj << + /Type /Pages + /Count 6 + /Parent 2314 0 R + /Kids [2049 0 R 2073 0 R 2101 0 R 2106 0 R 2118 0 R 2162 0 R] + >> endobj + 2249 0 obj << + /Type /Pages + /Count 2 + /Parent 2314 0 R + /Kids [2205 0 R 2251 0 R] + >> endobj + 2312 0 obj << + /Type /Pages + /Count 36 + /Parent 2315 0 R + /Kids [343 0 R 456 0 R 573 0 R 754 0 R 869 0 R 1085 0 R] + >> endobj + 2313 0 obj << + /Type /Pages + /Count 36 + /Parent 2315 0 R + /Kids [1193 0 R 1306 0 R 1452 0 R 1572 0 R 1670 0 R 1880 0 R] + >> endobj + 2314 0 obj << + /Type /Pages + /Count 8 + /Parent 2315 0 R + /Kids [2071 0 R 2249 0 R] + >> endobj + 2315 0 obj << + /Type /Pages + /Count 80 + /Kids [2312 0 R 2313 0 R 2314 0 R] + >> endobj + 2316 0 obj << + /Type /Outlines + /First 7 0 R + /Last 271 0 R + /Count 8 + >> endobj + 323 0 obj << + /Title 324 0 R + /A 321 0 R + /Parent 271 0 R + /Prev 319 0 R + >> endobj + 319 0 obj << + /Title 320 0 R + /A 317 0 R + /Parent 271 0 R + /Prev 307 0 R + /Next 323 0 R + >> endobj + 315 0 obj << + /Title 316 0 R + /A 313 0 R + /Parent 307 0 R + /Prev 311 0 R + >> endobj + 311 0 obj << + /Title 312 0 R + /A 309 0 R + /Parent 307 0 R + /Next 315 0 R + >> endobj + 307 0 obj << + /Title 308 0 R + /A 305 0 R + /Parent 271 0 R + /Prev 279 0 R + /Next 319 0 R + /First 311 0 R + /Last 315 0 R + /Count -2 + >> endobj + 303 0 obj << + /Title 304 0 R + /A 301 0 R + /Parent 279 0 R + /Prev 299 0 R + >> endobj + 299 0 obj << + /Title 300 0 R + /A 297 0 R + /Parent 279 0 R + /Prev 295 0 R + /Next 303 0 R + >> endobj + 295 0 obj << + /Title 296 0 R + /A 293 0 R + /Parent 279 0 R + /Prev 291 0 R + /Next 299 0 R + >> endobj + 291 0 obj << + /Title 292 0 R + /A 289 0 R + /Parent 279 0 R + /Prev 287 0 R + /Next 295 0 R + >> endobj + 287 0 obj << + /Title 288 0 R + /A 285 0 R + /Parent 279 0 R + /Prev 283 0 R + /Next 291 0 R + >> endobj + 283 0 obj << + /Title 284 0 R + /A 281 0 R + /Parent 279 0 R + /Next 287 0 R + >> endobj + 279 0 obj << + /Title 280 0 R + /A 277 0 R + /Parent 271 0 R + /Prev 275 0 R + /Next 307 0 R + /First 283 0 R + /Last 303 0 R + /Count -6 + >> endobj + 275 0 obj << + /Title 276 0 R + /A 273 0 R + /Parent 271 0 R + /Next 279 0 R + >> endobj + 271 0 obj << + /Title 272 0 R + /A 269 0 R + /Parent 2316 0 R + /Prev 255 0 R + /First 275 0 R + /Last 323 0 R + /Count -5 + >> endobj + 267 0 obj << + /Title 268 0 R + /A 265 0 R + /Parent 255 0 R + /Prev 263 0 R + >> endobj + 263 0 obj << + /Title 264 0 R + /A 261 0 R + /Parent 255 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 + /Next 263 0 R + >> endobj + 255 0 obj << + /Title 256 0 R + /A 253 0 R + /Parent 2316 0 R + /Prev 251 0 R + /Next 271 0 R + /First 259 0 R + /Last 267 0 R + /Count -3 + >> endobj + 251 0 obj << + /Title 252 0 R + /A 249 0 R + /Parent 2316 0 R + /Prev 195 0 R + /Next 255 0 R + >> endobj + 247 0 obj << + /Title 248 0 R + /A 245 0 R + /Parent 195 0 R + /Prev 231 0 R + >> endobj + 243 0 obj << + /Title 244 0 R + /A 241 0 R + /Parent 231 0 R + /Prev 239 0 R + >> endobj + 239 0 obj << + /Title 240 0 R + /A 237 0 R + /Parent 231 0 R + /Prev 235 0 R + /Next 243 0 R + >> endobj + 235 0 obj << + /Title 236 0 R + /A 233 0 R + /Parent 231 0 R + /Next 239 0 R + >> endobj + 231 0 obj << + /Title 232 0 R + /A 229 0 R + /Parent 195 0 R + /Prev 215 0 R + /Next 247 0 R + /First 235 0 R + /Last 243 0 R + /Count -3 + >> endobj + 227 0 obj << + /Title 228 0 R + /A 225 0 R + /Parent 215 0 R + /Prev 223 0 R + >> endobj + 223 0 obj << + /Title 224 0 R + /A 221 0 R + /Parent 215 0 R + /Prev 219 0 R + /Next 227 0 R + >> endobj + 219 0 obj << + /Title 220 0 R + /A 217 0 R + /Parent 215 0 R + /Next 223 0 R + >> endobj + 215 0 obj << + /Title 216 0 R + /A 213 0 R + /Parent 195 0 R + /Prev 199 0 R + /Next 231 0 R + /First 219 0 R + /Last 227 0 R + /Count -3 + >> endobj + 211 0 obj << + /Title 212 0 R + /A 209 0 R + /Parent 199 0 R + /Prev 207 0 R + >> endobj + 207 0 obj << + /Title 208 0 R + /A 205 0 R + /Parent 199 0 R + /Prev 203 0 R + /Next 211 0 R + >> endobj + 203 0 obj << + /Title 204 0 R + /A 201 0 R + /Parent 199 0 R + /Next 207 0 R + >> endobj + 199 0 obj << + /Title 200 0 R + /A 197 0 R + /Parent 195 0 R + /Next 215 0 R + /First 203 0 R + /Last 211 0 R + /Count -3 + >> endobj + 195 0 obj << + /Title 196 0 R + /A 193 0 R + /Parent 2316 0 R + /Prev 111 0 R + /Next 251 0 R + /First 199 0 R + /Last 247 0 R + /Count -4 + >> endobj + 191 0 obj << + /Title 192 0 R + /A 189 0 R + /Parent 187 0 R + >> endobj + 187 0 obj << + /Title 188 0 R + /A 185 0 R + /Parent 111 0 R + /Prev 183 0 R + /First 191 0 R + /Last 191 0 R + /Count -1 + >> endobj + 183 0 obj << + /Title 184 0 R + /A 181 0 R + /Parent 111 0 R + /Prev 163 0 R + /Next 187 0 R + >> endobj + 179 0 obj << + /Title 180 0 R + /A 177 0 R + /Parent 163 0 R + /Prev 175 0 R + >> endobj + 175 0 obj << + /Title 176 0 R + /A 173 0 R + /Parent 163 0 R + /Prev 171 0 R + /Next 179 0 R + >> endobj + 171 0 obj << + /Title 172 0 R + /A 169 0 R + /Parent 163 0 R + /Prev 167 0 R + /Next 175 0 R + >> endobj + 167 0 obj << + /Title 168 0 R + /A 165 0 R + /Parent 163 0 R + /Next 171 0 R + >> endobj + 163 0 obj << + /Title 164 0 R + /A 161 0 R + /Parent 111 0 R + /Prev 139 0 R + /Next 183 0 R + /First 167 0 R + /Last 179 0 R + /Count -4 + >> endobj + 159 0 obj << + /Title 160 0 R + /A 157 0 R + /Parent 139 0 R + /Prev 155 0 R + >> endobj + 155 0 obj << + /Title 156 0 R + /A 153 0 R + /Parent 139 0 R + /Prev 151 0 R + /Next 159 0 R + >> endobj + 151 0 obj << + /Title 152 0 R + /A 149 0 R + /Parent 139 0 R + /Prev 147 0 R + /Next 155 0 R + >> endobj + 147 0 obj << + /Title 148 0 R + /A 145 0 R + /Parent 139 0 R + /Prev 143 0 R + /Next 151 0 R + >> endobj + 143 0 obj << + /Title 144 0 R + /A 141 0 R + /Parent 139 0 R + /Next 147 0 R + >> endobj + 139 0 obj << + /Title 140 0 R + /A 137 0 R + /Parent 111 0 R + /Prev 135 0 R + /Next 163 0 R + /First 143 0 R + /Last 159 0 R + /Count -5 + >> endobj + 135 0 obj << + /Title 136 0 R + /A 133 0 R + /Parent 111 0 R + /Prev 131 0 R + /Next 139 0 R + >> endobj + 131 0 obj << + /Title 132 0 R + /A 129 0 R + /Parent 111 0 R + /Prev 123 0 R + /Next 135 0 R + >> endobj + 127 0 obj << + /Title 128 0 R + /A 125 0 R + /Parent 123 0 R + >> endobj + 123 0 obj << + /Title 124 0 R + /A 121 0 R + /Parent 111 0 R + /Prev 119 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 111 0 R + /Prev 115 0 R + /Next 123 0 R + >> endobj + 115 0 obj << + /Title 116 0 R + /A 113 0 R + /Parent 111 0 R + /Next 119 0 R + >> endobj + 111 0 obj << + /Title 112 0 R + /A 109 0 R + /Parent 2316 0 R + /Prev 99 0 R + /Next 195 0 R + /First 115 0 R + /Last 187 0 R + /Count -9 + >> endobj + 107 0 obj << + /Title 108 0 R + /A 105 0 R + /Parent 99 0 R + /Prev 103 0 R + >> endobj + 103 0 obj << + /Title 104 0 R + /A 101 0 R + /Parent 99 0 R + /Next 107 0 R + >> endobj + 99 0 obj << + /Title 100 0 R + /A 97 0 R + /Parent 2316 0 R + /Prev 11 0 R + /Next 111 0 R + /First 103 0 R + /Last 107 0 R + /Count -2 + >> endobj + 95 0 obj << + /Title 96 0 R + /A 93 0 R + /Parent 83 0 R + /Prev 91 0 R + >> endobj + 91 0 obj << + /Title 92 0 R + /A 89 0 R + /Parent 83 0 R + /Prev 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 + >> endobj + 83 0 obj << + /Title 84 0 R + /A 81 0 R + /Parent 11 0 R + /Prev 59 0 R + /First 87 0 R + /Last 95 0 R + /Count -3 + >> endobj + 79 0 obj << + /Title 80 0 R + /A 77 0 R + /Parent 59 0 R + /Prev 75 0 R + >> endobj + 75 0 obj << + /Title 76 0 R + /A 73 0 R + /Parent 59 0 R + /Prev 71 0 R + /Next 79 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 + /A 65 0 R + /Parent 59 0 R + /Prev 63 0 R + /Next 71 0 R + >> endobj + 63 0 obj << + /Title 64 0 R + /A 61 0 R + /Parent 59 0 R + /Next 67 0 R + >> endobj + 59 0 obj << + /Title 60 0 R + /A 57 0 R + /Parent 11 0 R + /Prev 47 0 R + /Next 83 0 R + /First 63 0 R + /Last 79 0 R + /Count -5 + >> endobj + 55 0 obj << + /Title 56 0 R + /A 53 0 R + /Parent 47 0 R + /Prev 51 0 R + >> endobj + 51 0 obj << + /Title 52 0 R + /A 49 0 R + /Parent 47 0 R + /Next 55 0 R + >> endobj + 47 0 obj << + /Title 48 0 R + /A 45 0 R + /Parent 11 0 R + /Prev 43 0 R + /Next 59 0 R + /First 51 0 R + /Last 55 0 R + /Count -2 + >> endobj + 43 0 obj << + /Title 44 0 R + /A 41 0 R + /Parent 11 0 R + /Prev 39 0 R + /Next 47 0 R + >> endobj + 39 0 obj << + /Title 40 0 R + /A 37 0 R + /Parent 11 0 R + /Prev 19 0 R + /Next 43 0 R + >> endobj + 35 0 obj << + /Title 36 0 R + /A 33 0 R + /Parent 19 0 R + /Prev 31 0 R + >> endobj + 31 0 obj << + /Title 32 0 R + /A 29 0 R + /Parent 19 0 R + /Prev 27 0 R + /Next 35 0 R + >> endobj + 27 0 obj << + /Title 28 0 R + /A 25 0 R + /Parent 19 0 R + /Prev 23 0 R + /Next 31 0 R + >> endobj + 23 0 obj << + /Title 24 0 R + /A 21 0 R + /Parent 19 0 R + /Next 27 0 R + >> endobj + 19 0 obj << + /Title 20 0 R + /A 17 0 R + /Parent 11 0 R + /Prev 15 0 R + /Next 39 0 R + /First 23 0 R + /Last 35 0 R + /Count -4 + >> endobj + 15 0 obj << + /Title 16 0 R + /A 13 0 R + /Parent 11 0 R + /Next 19 0 R + >> endobj + 11 0 obj << + /Title 12 0 R + /A 9 0 R + /Parent 2316 0 R + /Prev 7 0 R + /Next 99 0 R + /First 15 0 R + /Last 83 0 R + /Count -7 + >> endobj + 7 0 obj << + /Title 8 0 R + /A 5 0 R + /Parent 2316 0 R + /Next 11 0 R + >> endobj + 2317 0 obj << + /Names [(Doc-Start) 331 0 R (Hfootnote.1) 478 0 R (Hfootnote.10) 630 0 R (Hfootnote.11) 673 0 R (Hfootnote.12) 779 0 R (Hfootnote.13) 816 0 R] + /Limits [(Doc-Start) (Hfootnote.13)] + >> endobj + 2318 0 obj << + /Names [(Hfootnote.14) 1083 0 R (Hfootnote.15) 1111 0 R (Hfootnote.16) 1125 0 R (Hfootnote.17) 1192 0 R (Hfootnote.18) 1224 0 R (Hfootnote.19) 1225 0 R] + /Limits [(Hfootnote.14) (Hfootnote.19)] + >> endobj + 2319 0 obj << + /Names [(Hfootnote.2) 503 0 R (Hfootnote.20) 1264 0 R (Hfootnote.21) 1281 0 R (Hfootnote.22) 1350 0 R (Hfootnote.23) 1465 0 R (Hfootnote.3) 504 0 R] + /Limits [(Hfootnote.2) (Hfootnote.3)] + >> endobj + 2320 0 obj << + /Names [(Hfootnote.4) 537 0 R (Hfootnote.5) 538 0 R (Hfootnote.6) 570 0 R (Hfootnote.7) 572 0 R (Hfootnote.8) 603 0 R (Hfootnote.9) 629 0 R] + /Limits [(Hfootnote.4) (Hfootnote.9)] + >> endobj + 2321 0 obj << + /Names [(Item.1) 775 0 R (Item.10) 1221 0 R (Item.11) 1222 0 R (Item.12) 1275 0 R (Item.13) 1276 0 R (Item.14) 1277 0 R] + /Limits [(Item.1) (Item.14)] + >> endobj + 2322 0 obj << + /Names [(Item.15) 1278 0 R (Item.16) 1279 0 R (Item.17) 1280 0 R (Item.18) 1287 0 R (Item.19) 1288 0 R (Item.2) 776 0 R] + /Limits [(Item.15) (Item.2)] + >> endobj + 2323 0 obj << + /Names [(Item.20) 1289 0 R (Item.21) 1290 0 R (Item.22) 1291 0 R (Item.23) 1292 0 R (Item.24) 1293 0 R (Item.25) 1294 0 R] + /Limits [(Item.20) (Item.25)] + >> endobj + 2324 0 obj << + /Names [(Item.26) 1295 0 R (Item.27) 1296 0 R (Item.28) 1297 0 R (Item.29) 1298 0 R (Item.3) 777 0 R (Item.30) 1299 0 R] + /Limits [(Item.26) (Item.30)] + >> endobj + 2325 0 obj << + /Names [(Item.31) 1300 0 R (Item.32) 1301 0 R (Item.33) 1361 0 R (Item.34) 1362 0 R (Item.35) 1363 0 R (Item.36) 1364 0 R] + /Limits [(Item.31) (Item.36)] + >> endobj + 2326 0 obj << + /Names [(Item.37) 1365 0 R (Item.38) 1366 0 R (Item.39) 1367 0 R (Item.4) 778 0 R (Item.40) 1368 0 R (Item.41) 1369 0 R] + /Limits [(Item.37) (Item.41)] + >> endobj + 2327 0 obj << + /Names [(Item.42) 1370 0 R (Item.43) 1371 0 R (Item.44) 1372 0 R (Item.45) 1373 0 R (Item.46) 1374 0 R (Item.47) 1375 0 R] + /Limits [(Item.42) (Item.47)] + >> endobj + 2328 0 obj << + /Names [(Item.48) 1648 0 R (Item.49) 1649 0 R (Item.5) 1097 0 R (Item.50) 1650 0 R (Item.6) 1098 0 R (Item.7) 1099 0 R] + /Limits [(Item.48) (Item.7)] + >> endobj + 2329 0 obj << + /Names [(Item.8) 1123 0 R (Item.9) 1124 0 R (appendix.A) 250 0 R (appendix.B) 254 0 R (appendix.C) 270 0 R (chapter.1) 6 0 R] + /Limits [(Item.8) (chapter.1)] + >> endobj + 2330 0 obj << + /Names [(chapter.2) 10 0 R (chapter.3) 98 0 R (chapter.4) 110 0 R (chapter.5) 194 0 R (cite.AGILE) 870 0 R (cite.APERIOT) 895 0 R] + /Limits [(chapter.2) (cite.APERIOT)] + >> endobj + 2331 0 obj << + /Names [(cite.AUNIX) 679 0 R (cite.BIGPIC) 605 0 R (cite.BISON) 583 0 R (cite.BOEHM) 1493 0 R (cite.CACWC) 517 0 R (cite.CWM_YL) 580 0 R] + /Limits [(cite.AUNIX) (cite.CWM_YL)] + >> endobj + 2332 0 obj << + /Names [(cite.CYGWIN) 584 0 R (cite.DEJAGNU) 1453 0 R (cite.DRAGON) 479 0 R (cite.DVM) 1563 0 R (cite.EFENCE) 784 0 R (cite.EXTENDLUA) 681 0 R] + /Limits [(cite.CYGWIN) (cite.EXTENDLUA)] + >> endobj + 2333 0 obj << + /Names [(cite.EXTENDPY) 680 0 R (cite.FLEX) 581 0 R (cite.GCC) 585 0 R (cite.GCCFAIL) 835 0 R (cite.HASK-LLVM) 685 0 R (cite.JAVA:HOTSPOT) 1617 0 R] + /Limits [(cite.EXTENDPY) (cite.JAVA:HOTSPOT)] + >> endobj + 2334 0 obj << + /Names [(cite.JAVA:VMSPEC) 757 0 R (cite.JAVA:WP) 785 0 R (cite.JAZ) 608 0 R (cite.KLD) 1520 0 R (cite.LLVM) 464 0 R (cite.LLVM-PY) 682 0 R] + /Limits [(cite.JAVA:VMSPEC) (cite.LLVM-PY)] + >> endobj + 2335 0 obj << + /Names [(cite.LLVM-TYPES) 678 0 R (cite.LLVM:CGO04) 755 0 R (cite.LLVM:PASSES) 756 0 R (cite.LLVMGC) 1494 0 R (cite.LLVMRUBY) 684 0 R (cite.LUAGEM) 818 0 R] + /Limits [(cite.LLVM-TYPES) (cite.LUAGEM)] + >> endobj + 2336 0 obj << + /Names [(cite.LUAIMP) 817 0 R (cite.LUAVM) 606 0 R (cite.METHODOL) 855 0 R (cite.METHTOOL) 1597 0 R (cite.MYERS1979) 1327 0 R (cite.OBSD_MALLOC) 782 0 R] + /Limits [(cite.LUAIMP) (cite.OBSD_MALLOC)] + >> endobj + 2337 0 obj << + /Names [(cite.PARS_REV) 1063 0 R (cite.PCC_YL) 577 0 R (cite.PERL_YL) 541 0 R (cite.PHP_YL) 579 0 R (cite.PRACPARSE) 505 0 R (cite.PYTHON) 1569 0 R] + /Limits [(cite.PARS_REV) (cite.PYTHON)] + >> endobj + 2338 0 obj << + /Names [(cite.RBPG) 1495 0 R (cite.REFACT) 1521 0 R (cite.ROPERS) 1328 0 R (cite.RSYNC) 873 0 R (cite.RUBY_YL) 578 0 R (cite.SHOWDOWN) 607 0 R] + /Limits [(cite.RBPG) (cite.SHOWDOWN)] + >> endobj + 2339 0 obj << + /Names [(cite.SMELLS) 1522 0 R (cite.SPIRAL) 856 0 R (cite.SQT) 1326 0 R (cite.SQUEAKOO) 604 0 R (cite.SSH) 874 0 R (cite.SVN) 871 0 R] + /Limits [(cite.SMELLS) (cite.SVN)] + >> endobj + 2340 0 obj << + /Names [(cite.TCL_YL) 542 0 R (cite.TOMCAT) 780 0 R (cite.TRAC) 872 0 R (cite.TYPESYS) 539 0 R (cite.VALGRIND) 783 0 R (cite.YACC) 582 0 R] + /Limits [(cite.TCL_YL) (cite.YACC)] + >> endobj + 2341 0 obj << + /Names [(cite.ZONECFG_YL) 543 0 R (figure.caption.10) 540 0 R (figure.caption.11) 631 0 R (figure.caption.12) 674 0 R (figure.caption.15) 781 0 R (figure.caption.17) 819 0 R] + /Limits [(cite.ZONECFG_YL) (figure.caption.17)] + >> endobj + 2342 0 obj << + /Names [(figure.caption.18) 853 0 R (figure.caption.19) 891 0 R (figure.caption.20) 896 0 R (figure.caption.21) 1059 0 R (figure.caption.22) 1073 0 R (figure.caption.23) 1075 0 R] + /Limits [(figure.caption.18) (figure.caption.23)] + >> endobj + 2343 0 obj << + /Names [(figure.caption.24) 1079 0 R (figure.caption.26) 1094 0 R (figure.caption.27) 1112 0 R (figure.caption.28) 1122 0 R (figure.caption.29) 1137 0 R (figure.caption.30) 1138 0 R] + /Limits [(figure.caption.24) (figure.caption.30)] + >> endobj + 2344 0 obj << + /Names [(figure.caption.31) 1130 0 R (figure.caption.32) 1207 0 R (figure.caption.33) 1223 0 R (figure.caption.34) 1235 0 R (figure.caption.35) 1265 0 R (figure.caption.36) 1360 0 R] + /Limits [(figure.caption.31) (figure.caption.36)] + >> endobj + 2345 0 obj << + /Names [(figure.caption.37) 1519 0 R (figure.caption.38) 1523 0 R (figure.caption.46) 1664 0 R (figure.caption.47) 1352 0 R (figure.caption.48) 2104 0 R (figure.caption.49) 2109 0 R] + /Limits [(figure.caption.37) (figure.caption.49)] + >> endobj + 2346 0 obj << + /Names [(figure.caption.6) 499 0 R (figure.caption.7) 501 0 R (figure.caption.8) 502 0 R (figure.caption.9) 516 0 R (lstlisting.0.-1) 333 0 R (lstlisting.2.-2) 797 0 R] + /Limits [(figure.caption.6) (lstlisting.2.-2)] + >> endobj + 2347 0 obj << + /Names [(lstlisting.2.1) 622 0 R (lstlisting.2.2) 683 0 R (lstlisting.2.3) 813 0 R (lstlisting.2.4) 828 0 R (lstlisting.4.1) 901 0 R (lstlisting.4.2) 1148 0 R] + /Limits [(lstlisting.2.1) (lstlisting.4.2)] + >> endobj + 2348 0 obj << + /Names [(lstlisting.4.3) 1154 0 R (lstlisting.4.4) 1170 0 R (lstlisting.4.5) 1188 0 R (lstlisting.4.6) 1204 0 R (lstlisting.4.7) 1229 0 R (lstlisting.4.8) 1272 0 R] + /Limits [(lstlisting.4.3) (lstlisting.4.8)] + >> endobj + 2349 0 obj << + /Names [(lstlisting.5.1) 1319 0 R (lstlisting.5.2) 1382 0 R (lstlisting.5.3) 1390 0 R (lstlisting.5.4) 1443 0 R (lstlisting.5.5) 1479 0 R (lstlisting.5.6) 1483 0 R] + /Limits [(lstlisting.5.1) (lstlisting.5.6)] + >> endobj + 2350 0 obj << + /Names [(lstlisting.C.-10) 1930 0 R (lstlisting.C.-11) 1939 0 R (lstlisting.C.-12) 1957 0 R (lstlisting.C.-13) 1966 0 R (lstlisting.C.-14) 1992 0 R (lstlisting.C.-15) 2076 0 R] + /Limits [(lstlisting.C.-10) (lstlisting.C.-15)] + >> endobj + 2351 0 obj << + /Names [(lstlisting.C.-3) 1822 0 R (lstlisting.C.-4) 1848 0 R (lstlisting.C.-5) 1859 0 R (lstlisting.C.-6) 1877 0 R (lstlisting.C.-7) 1885 0 R (lstlisting.C.-8) 1903 0 R] + /Limits [(lstlisting.C.-3) (lstlisting.C.-8)] + >> endobj + 2352 0 obj << + /Names [(lstlisting.C.-9) 1912 0 R (lstlisting.C.1) 1466 0 R (lstlisting.C.2) 1351 0 R (lstlisting.C.3) 1354 0 R (lstlisting.C.4) 1353 0 R (lstlisting.C.5) 1355 0 R] + /Limits [(lstlisting.C.-9) (lstlisting.C.5)] + >> endobj + 2353 0 obj << + /Names [(lstlisting.C.6) 2155 0 R (lstlisting.C.7) 2182 0 R (lstlisting.C.8) 2245 0 R (lstnumber.-1.1) 334 0 R (lstnumber.-1.2) 336 0 R (lstnumber.-1.3) 337 0 R] + /Limits [(lstlisting.C.6) (lstnumber.-1.3)] + >> endobj + 2354 0 obj << + /Names [(lstnumber.-1.4) 338 0 R (lstnumber.-1.5) 339 0 R (lstnumber.-1.6) 340 0 R (lstnumber.-1.7) 341 0 R (lstnumber.-1.8) 342 0 R (lstnumber.-10.1) 1931 0 R] + /Limits [(lstnumber.-1.4) (lstnumber.-10.1)] + >> endobj + 2355 0 obj << + /Names [(lstnumber.-10.2) 1932 0 R (lstnumber.-10.3) 1933 0 R (lstnumber.-10.4) 1934 0 R (lstnumber.-11.1) 1940 0 R (lstnumber.-11.10) 1949 0 R (lstnumber.-11.11) 1950 0 R] + /Limits [(lstnumber.-10.2) (lstnumber.-11.11)] + >> endobj + 2356 0 obj << + /Names [(lstnumber.-11.12) 1951 0 R (lstnumber.-11.13) 1952 0 R (lstnumber.-11.14) 1953 0 R (lstnumber.-11.15) 1954 0 R (lstnumber.-11.16) 1955 0 R (lstnumber.-11.17) 1956 0 R] + /Limits [(lstnumber.-11.12) (lstnumber.-11.17)] + >> endobj + 2357 0 obj << + /Names [(lstnumber.-11.2) 1941 0 R (lstnumber.-11.3) 1942 0 R (lstnumber.-11.4) 1943 0 R (lstnumber.-11.5) 1944 0 R (lstnumber.-11.6) 1945 0 R (lstnumber.-11.7) 1946 0 R] + /Limits [(lstnumber.-11.2) (lstnumber.-11.7)] + >> endobj + 2358 0 obj << + /Names [(lstnumber.-11.8) 1947 0 R (lstnumber.-11.9) 1948 0 R (lstnumber.-12.1) 1958 0 R (lstnumber.-12.2) 1959 0 R (lstnumber.-12.3) 1960 0 R (lstnumber.-12.4) 1961 0 R] + /Limits [(lstnumber.-11.8) (lstnumber.-12.4)] + >> endobj + 2359 0 obj << + /Names [(lstnumber.-13.1) 1967 0 R (lstnumber.-13.10) 1976 0 R (lstnumber.-13.11) 1977 0 R (lstnumber.-13.12) 1978 0 R (lstnumber.-13.13) 1979 0 R (lstnumber.-13.14) 1980 0 R] + /Limits [(lstnumber.-13.1) (lstnumber.-13.14)] + >> endobj + 2360 0 obj << + /Names [(lstnumber.-13.15) 1981 0 R (lstnumber.-13.16) 1982 0 R (lstnumber.-13.17) 1983 0 R (lstnumber.-13.18) 1984 0 R (lstnumber.-13.19) 1985 0 R (lstnumber.-13.2) 1968 0 R] + /Limits [(lstnumber.-13.15) (lstnumber.-13.2)] + >> endobj + 2361 0 obj << + /Names [(lstnumber.-13.20) 1986 0 R (lstnumber.-13.21) 1987 0 R (lstnumber.-13.22) 1988 0 R (lstnumber.-13.23) 1989 0 R (lstnumber.-13.24) 1990 0 R (lstnumber.-13.25) 1991 0 R] + /Limits [(lstnumber.-13.20) (lstnumber.-13.25)] + >> endobj + 2362 0 obj << + /Names [(lstnumber.-13.3) 1969 0 R (lstnumber.-13.4) 1970 0 R (lstnumber.-13.5) 1971 0 R (lstnumber.-13.6) 1972 0 R (lstnumber.-13.7) 1973 0 R (lstnumber.-13.8) 1974 0 R] + /Limits [(lstnumber.-13.3) (lstnumber.-13.8)] + >> endobj + 2363 0 obj << + /Names [(lstnumber.-13.9) 1975 0 R (lstnumber.-14.1) 1993 0 R (lstnumber.-14.2) 1994 0 R (lstnumber.-15.1) 2077 0 R (lstnumber.-15.10) 2086 0 R (lstnumber.-15.11) 2087 0 R] + /Limits [(lstnumber.-13.9) (lstnumber.-15.11)] + >> endobj + 2364 0 obj << + /Names [(lstnumber.-15.12) 2088 0 R (lstnumber.-15.13) 2089 0 R (lstnumber.-15.14) 2090 0 R (lstnumber.-15.15) 2091 0 R (lstnumber.-15.16) 2092 0 R (lstnumber.-15.17) 2093 0 R] + /Limits [(lstnumber.-15.12) (lstnumber.-15.17)] + >> endobj + 2365 0 obj << + /Names [(lstnumber.-15.18) 2094 0 R (lstnumber.-15.19) 2095 0 R (lstnumber.-15.2) 2078 0 R (lstnumber.-15.20) 2096 0 R (lstnumber.-15.3) 2079 0 R (lstnumber.-15.4) 2080 0 R] + /Limits [(lstnumber.-15.18) (lstnumber.-15.4)] + >> endobj + 2366 0 obj << + /Names [(lstnumber.-15.5) 2081 0 R (lstnumber.-15.6) 2082 0 R (lstnumber.-15.7) 2083 0 R (lstnumber.-15.8) 2084 0 R (lstnumber.-15.9) 2085 0 R (lstnumber.-2.1) 798 0 R] + /Limits [(lstnumber.-15.5) (lstnumber.-2.1)] + >> endobj + 2367 0 obj << + /Names [(lstnumber.-2.10) 807 0 R (lstnumber.-2.11) 808 0 R (lstnumber.-2.12) 809 0 R (lstnumber.-2.13) 810 0 R (lstnumber.-2.14) 811 0 R (lstnumber.-2.2) 799 0 R] + /Limits [(lstnumber.-2.10) (lstnumber.-2.2)] + >> endobj + 2368 0 obj << + /Names [(lstnumber.-2.3) 800 0 R (lstnumber.-2.4) 801 0 R (lstnumber.-2.5) 802 0 R (lstnumber.-2.6) 803 0 R (lstnumber.-2.7) 804 0 R (lstnumber.-2.8) 805 0 R] + /Limits [(lstnumber.-2.3) (lstnumber.-2.8)] + >> endobj + 2369 0 obj << + /Names [(lstnumber.-2.9) 806 0 R (lstnumber.-3.1) 1823 0 R (lstnumber.-3.10) 1832 0 R (lstnumber.-3.11) 1833 0 R (lstnumber.-3.12) 1834 0 R (lstnumber.-3.13) 1835 0 R] + /Limits [(lstnumber.-2.9) (lstnumber.-3.13)] + >> endobj + 2370 0 obj << + /Names [(lstnumber.-3.14) 1836 0 R (lstnumber.-3.15) 1837 0 R (lstnumber.-3.16) 1838 0 R (lstnumber.-3.17) 1839 0 R (lstnumber.-3.18) 1840 0 R (lstnumber.-3.19) 1841 0 R] + /Limits [(lstnumber.-3.14) (lstnumber.-3.19)] + >> endobj + 2371 0 obj << + /Names [(lstnumber.-3.2) 1824 0 R (lstnumber.-3.20) 1842 0 R (lstnumber.-3.21) 1843 0 R (lstnumber.-3.22) 1844 0 R (lstnumber.-3.23) 1845 0 R (lstnumber.-3.24) 1846 0 R] + /Limits [(lstnumber.-3.2) (lstnumber.-3.24)] + >> endobj + 2372 0 obj << + /Names [(lstnumber.-3.25) 1847 0 R (lstnumber.-3.3) 1825 0 R (lstnumber.-3.4) 1826 0 R (lstnumber.-3.5) 1827 0 R (lstnumber.-3.6) 1828 0 R (lstnumber.-3.7) 1829 0 R] + /Limits [(lstnumber.-3.25) (lstnumber.-3.7)] + >> endobj + 2373 0 obj << + /Names [(lstnumber.-3.8) 1830 0 R (lstnumber.-3.9) 1831 0 R (lstnumber.-4.1) 1849 0 R (lstnumber.-4.2) 1850 0 R (lstnumber.-4.3) 1851 0 R (lstnumber.-4.4) 1852 0 R] + /Limits [(lstnumber.-3.8) (lstnumber.-4.4)] + >> endobj + 2374 0 obj << + /Names [(lstnumber.-4.5) 1853 0 R (lstnumber.-4.6) 1854 0 R (lstnumber.-5.1) 1860 0 R (lstnumber.-5.10) 1869 0 R (lstnumber.-5.11) 1870 0 R (lstnumber.-5.12) 1871 0 R] + /Limits [(lstnumber.-4.5) (lstnumber.-5.12)] + >> endobj + 2375 0 obj << + /Names [(lstnumber.-5.13) 1872 0 R (lstnumber.-5.14) 1873 0 R (lstnumber.-5.15) 1874 0 R (lstnumber.-5.16) 1875 0 R (lstnumber.-5.17) 1876 0 R (lstnumber.-5.2) 1861 0 R] + /Limits [(lstnumber.-5.13) (lstnumber.-5.2)] + >> endobj + 2376 0 obj << + /Names [(lstnumber.-5.3) 1862 0 R (lstnumber.-5.4) 1863 0 R (lstnumber.-5.5) 1864 0 R (lstnumber.-5.6) 1865 0 R (lstnumber.-5.7) 1866 0 R (lstnumber.-5.8) 1867 0 R] + /Limits [(lstnumber.-5.3) (lstnumber.-5.8)] + >> endobj + 2377 0 obj << + /Names [(lstnumber.-5.9) 1868 0 R (lstnumber.-6.1) 1878 0 R (lstnumber.-6.2) 1879 0 R (lstnumber.-7.1) 1886 0 R (lstnumber.-7.10) 1895 0 R (lstnumber.-7.11) 1896 0 R] + /Limits [(lstnumber.-5.9) (lstnumber.-7.11)] + >> endobj + 2378 0 obj << + /Names [(lstnumber.-7.12) 1897 0 R (lstnumber.-7.13) 1898 0 R (lstnumber.-7.14) 1899 0 R (lstnumber.-7.15) 1900 0 R (lstnumber.-7.16) 1901 0 R (lstnumber.-7.17) 1902 0 R] + /Limits [(lstnumber.-7.12) (lstnumber.-7.17)] + >> endobj + 2379 0 obj << + /Names [(lstnumber.-7.2) 1887 0 R (lstnumber.-7.3) 1888 0 R (lstnumber.-7.4) 1889 0 R (lstnumber.-7.5) 1890 0 R (lstnumber.-7.6) 1891 0 R (lstnumber.-7.7) 1892 0 R] + /Limits [(lstnumber.-7.2) (lstnumber.-7.7)] + >> endobj + 2380 0 obj << + /Names [(lstnumber.-7.8) 1893 0 R (lstnumber.-7.9) 1894 0 R (lstnumber.-8.1) 1904 0 R (lstnumber.-8.2) 1905 0 R (lstnumber.-8.3) 1906 0 R (lstnumber.-8.4) 1907 0 R] + /Limits [(lstnumber.-7.8) (lstnumber.-8.4)] + >> endobj + 2381 0 obj << + /Names [(lstnumber.-9.1) 1913 0 R (lstnumber.-9.10) 1922 0 R (lstnumber.-9.11) 1923 0 R (lstnumber.-9.12) 1924 0 R (lstnumber.-9.13) 1925 0 R (lstnumber.-9.14) 1926 0 R] + /Limits [(lstnumber.-9.1) (lstnumber.-9.14)] + >> endobj + 2382 0 obj << + /Names [(lstnumber.-9.15) 1927 0 R (lstnumber.-9.16) 1928 0 R (lstnumber.-9.17) 1929 0 R (lstnumber.-9.2) 1914 0 R (lstnumber.-9.3) 1915 0 R (lstnumber.-9.4) 1916 0 R] + /Limits [(lstnumber.-9.15) (lstnumber.-9.4)] + >> endobj + 2383 0 obj << + /Names [(lstnumber.-9.5) 1917 0 R (lstnumber.-9.6) 1918 0 R (lstnumber.-9.7) 1919 0 R (lstnumber.-9.8) 1920 0 R (lstnumber.-9.9) 1921 0 R (lstnumber.2.1.1) 623 0 R] + /Limits [(lstnumber.-9.5) (lstnumber.2.1.1)] + >> endobj + 2384 0 obj << + /Names [(lstnumber.2.1.10) 644 0 R (lstnumber.2.1.11) 645 0 R (lstnumber.2.1.12) 646 0 R (lstnumber.2.1.13) 647 0 R (lstnumber.2.1.14) 648 0 R (lstnumber.2.1.15) 649 0 R] + /Limits [(lstnumber.2.1.10) (lstnumber.2.1.15)] + >> endobj + 2385 0 obj << + /Names [(lstnumber.2.1.2) 624 0 R (lstnumber.2.1.3) 625 0 R (lstnumber.2.1.4) 626 0 R (lstnumber.2.1.5) 627 0 R (lstnumber.2.1.6) 628 0 R (lstnumber.2.1.7) 641 0 R] + /Limits [(lstnumber.2.1.2) (lstnumber.2.1.7)] + >> endobj + 2386 0 obj << + /Names [(lstnumber.2.1.8) 642 0 R (lstnumber.2.1.9) 643 0 R (lstnumber.2.2.1) 690 0 R (lstnumber.2.2.10) 699 0 R (lstnumber.2.2.11) 700 0 R (lstnumber.2.2.12) 701 0 R] + /Limits [(lstnumber.2.1.8) (lstnumber.2.2.12)] + >> endobj + 2387 0 obj << + /Names [(lstnumber.2.2.13) 702 0 R (lstnumber.2.2.14) 703 0 R (lstnumber.2.2.15) 704 0 R (lstnumber.2.2.16) 705 0 R (lstnumber.2.2.17) 706 0 R (lstnumber.2.2.18) 707 0 R] + /Limits [(lstnumber.2.2.13) (lstnumber.2.2.18)] + >> endobj + 2388 0 obj << + /Names [(lstnumber.2.2.19) 708 0 R (lstnumber.2.2.2) 691 0 R (lstnumber.2.2.20) 709 0 R (lstnumber.2.2.21) 710 0 R (lstnumber.2.2.22) 711 0 R (lstnumber.2.2.23) 712 0 R] + /Limits [(lstnumber.2.2.19) (lstnumber.2.2.23)] + >> endobj + 2389 0 obj << + /Names [(lstnumber.2.2.24) 713 0 R (lstnumber.2.2.25) 714 0 R (lstnumber.2.2.26) 715 0 R (lstnumber.2.2.27) 716 0 R (lstnumber.2.2.28) 717 0 R (lstnumber.2.2.29) 718 0 R] + /Limits [(lstnumber.2.2.24) (lstnumber.2.2.29)] + >> endobj + 2390 0 obj << + /Names [(lstnumber.2.2.3) 692 0 R (lstnumber.2.2.30) 719 0 R (lstnumber.2.2.31) 720 0 R (lstnumber.2.2.32) 721 0 R (lstnumber.2.2.33) 722 0 R (lstnumber.2.2.34) 723 0 R] + /Limits [(lstnumber.2.2.3) (lstnumber.2.2.34)] + >> endobj + 2391 0 obj << + /Names [(lstnumber.2.2.35) 724 0 R (lstnumber.2.2.36) 725 0 R (lstnumber.2.2.37) 726 0 R (lstnumber.2.2.38) 727 0 R (lstnumber.2.2.39) 728 0 R (lstnumber.2.2.4) 693 0 R] + /Limits [(lstnumber.2.2.35) (lstnumber.2.2.4)] + >> endobj + 2392 0 obj << + /Names [(lstnumber.2.2.40) 729 0 R (lstnumber.2.2.41) 730 0 R (lstnumber.2.2.42) 731 0 R (lstnumber.2.2.43) 732 0 R (lstnumber.2.2.44) 733 0 R (lstnumber.2.2.45) 748 0 R] + /Limits [(lstnumber.2.2.40) (lstnumber.2.2.45)] + >> endobj + 2393 0 obj << + /Names [(lstnumber.2.2.46) 749 0 R (lstnumber.2.2.47) 750 0 R (lstnumber.2.2.48) 751 0 R (lstnumber.2.2.5) 694 0 R (lstnumber.2.2.6) 695 0 R (lstnumber.2.2.7) 696 0 R] + /Limits [(lstnumber.2.2.46) (lstnumber.2.2.7)] + >> endobj + 2394 0 obj << + /Names [(lstnumber.2.2.8) 697 0 R (lstnumber.2.2.9) 698 0 R (lstnumber.2.3.1) 814 0 R (lstnumber.2.3.2) 815 0 R (lstnumber.2.3.3) 826 0 R (lstnumber.2.3.4) 827 0 R] + /Limits [(lstnumber.2.2.8) (lstnumber.2.3.4)] + >> endobj + 2395 0 obj << + /Names [(lstnumber.2.4.1) 829 0 R (lstnumber.4.1.1) 902 0 R (lstnumber.4.1.10) 911 0 R (lstnumber.4.1.100) 1010 0 R (lstnumber.4.1.101) 1011 0 R (lstnumber.4.1.102) 1012 0 R] + /Limits [(lstnumber.2.4.1) (lstnumber.4.1.102)] + >> endobj + 2396 0 obj << + /Names [(lstnumber.4.1.103) 1013 0 R (lstnumber.4.1.104) 1014 0 R (lstnumber.4.1.105) 1015 0 R (lstnumber.4.1.106) 1016 0 R (lstnumber.4.1.107) 1017 0 R (lstnumber.4.1.108) 1018 0 R] + /Limits [(lstnumber.4.1.103) (lstnumber.4.1.108)] + >> endobj + 2397 0 obj << + /Names [(lstnumber.4.1.109) 1019 0 R (lstnumber.4.1.11) 912 0 R (lstnumber.4.1.110) 1031 0 R (lstnumber.4.1.111) 1032 0 R (lstnumber.4.1.112) 1033 0 R (lstnumber.4.1.113) 1034 0 R] + /Limits [(lstnumber.4.1.109) (lstnumber.4.1.113)] + >> endobj + 2398 0 obj << + /Names [(lstnumber.4.1.114) 1035 0 R (lstnumber.4.1.115) 1036 0 R (lstnumber.4.1.116) 1037 0 R (lstnumber.4.1.117) 1038 0 R (lstnumber.4.1.118) 1039 0 R (lstnumber.4.1.119) 1040 0 R] + /Limits [(lstnumber.4.1.114) (lstnumber.4.1.119)] + >> endobj + 2399 0 obj << + /Names [(lstnumber.4.1.12) 913 0 R (lstnumber.4.1.120) 1041 0 R (lstnumber.4.1.121) 1042 0 R (lstnumber.4.1.122) 1043 0 R (lstnumber.4.1.123) 1044 0 R (lstnumber.4.1.124) 1045 0 R] + /Limits [(lstnumber.4.1.12) (lstnumber.4.1.124)] + >> endobj + 2400 0 obj << + /Names [(lstnumber.4.1.125) 1046 0 R (lstnumber.4.1.126) 1047 0 R (lstnumber.4.1.127) 1048 0 R (lstnumber.4.1.128) 1049 0 R (lstnumber.4.1.129) 1050 0 R (lstnumber.4.1.13) 914 0 R] + /Limits [(lstnumber.4.1.125) (lstnumber.4.1.13)] + >> endobj + 2401 0 obj << + /Names [(lstnumber.4.1.130) 1051 0 R (lstnumber.4.1.131) 1052 0 R (lstnumber.4.1.132) 1053 0 R (lstnumber.4.1.133) 1054 0 R (lstnumber.4.1.134) 1055 0 R (lstnumber.4.1.135) 1056 0 R] + /Limits [(lstnumber.4.1.130) (lstnumber.4.1.135)] + >> endobj + 2402 0 obj << + /Names [(lstnumber.4.1.136) 1057 0 R (lstnumber.4.1.137) 1058 0 R (lstnumber.4.1.14) 915 0 R (lstnumber.4.1.15) 916 0 R (lstnumber.4.1.16) 917 0 R (lstnumber.4.1.17) 918 0 R] + /Limits [(lstnumber.4.1.136) (lstnumber.4.1.17)] + >> endobj + 2403 0 obj << + /Names [(lstnumber.4.1.18) 919 0 R (lstnumber.4.1.19) 920 0 R (lstnumber.4.1.2) 903 0 R (lstnumber.4.1.20) 926 0 R (lstnumber.4.1.21) 927 0 R (lstnumber.4.1.22) 928 0 R] + /Limits [(lstnumber.4.1.18) (lstnumber.4.1.22)] + >> endobj + 2404 0 obj << + /Names [(lstnumber.4.1.23) 929 0 R (lstnumber.4.1.24) 930 0 R (lstnumber.4.1.25) 931 0 R (lstnumber.4.1.26) 932 0 R (lstnumber.4.1.27) 933 0 R (lstnumber.4.1.28) 934 0 R] + /Limits [(lstnumber.4.1.23) (lstnumber.4.1.28)] + >> endobj + 2405 0 obj << + /Names [(lstnumber.4.1.29) 935 0 R (lstnumber.4.1.3) 904 0 R (lstnumber.4.1.30) 936 0 R (lstnumber.4.1.31) 937 0 R (lstnumber.4.1.32) 938 0 R (lstnumber.4.1.33) 939 0 R] + /Limits [(lstnumber.4.1.29) (lstnumber.4.1.33)] + >> endobj + 2406 0 obj << + /Names [(lstnumber.4.1.34) 940 0 R (lstnumber.4.1.35) 941 0 R (lstnumber.4.1.36) 942 0 R (lstnumber.4.1.37) 943 0 R (lstnumber.4.1.38) 944 0 R (lstnumber.4.1.39) 945 0 R] + /Limits [(lstnumber.4.1.34) (lstnumber.4.1.39)] + >> endobj + 2407 0 obj << + /Names [(lstnumber.4.1.4) 905 0 R (lstnumber.4.1.40) 946 0 R (lstnumber.4.1.41) 947 0 R (lstnumber.4.1.42) 948 0 R (lstnumber.4.1.43) 949 0 R (lstnumber.4.1.44) 950 0 R] + /Limits [(lstnumber.4.1.4) (lstnumber.4.1.44)] + >> endobj + 2408 0 obj << + /Names [(lstnumber.4.1.45) 951 0 R (lstnumber.4.1.46) 952 0 R (lstnumber.4.1.47) 953 0 R (lstnumber.4.1.48) 954 0 R (lstnumber.4.1.49) 955 0 R (lstnumber.4.1.5) 906 0 R] + /Limits [(lstnumber.4.1.45) (lstnumber.4.1.5)] + >> endobj + 2409 0 obj << + /Names [(lstnumber.4.1.50) 956 0 R (lstnumber.4.1.51) 957 0 R (lstnumber.4.1.52) 958 0 R (lstnumber.4.1.53) 959 0 R (lstnumber.4.1.54) 960 0 R (lstnumber.4.1.55) 961 0 R] + /Limits [(lstnumber.4.1.50) (lstnumber.4.1.55)] + >> endobj + 2410 0 obj << + /Names [(lstnumber.4.1.56) 962 0 R (lstnumber.4.1.57) 963 0 R (lstnumber.4.1.58) 964 0 R (lstnumber.4.1.59) 965 0 R (lstnumber.4.1.6) 907 0 R (lstnumber.4.1.60) 966 0 R] + /Limits [(lstnumber.4.1.56) (lstnumber.4.1.60)] + >> endobj + 2411 0 obj << + /Names [(lstnumber.4.1.61) 967 0 R (lstnumber.4.1.62) 968 0 R (lstnumber.4.1.63) 969 0 R (lstnumber.4.1.64) 970 0 R (lstnumber.4.1.65) 975 0 R (lstnumber.4.1.66) 976 0 R] + /Limits [(lstnumber.4.1.61) (lstnumber.4.1.66)] + >> endobj + 2412 0 obj << + /Names [(lstnumber.4.1.67) 977 0 R (lstnumber.4.1.68) 978 0 R (lstnumber.4.1.69) 979 0 R (lstnumber.4.1.7) 908 0 R (lstnumber.4.1.70) 980 0 R (lstnumber.4.1.71) 981 0 R] + /Limits [(lstnumber.4.1.67) (lstnumber.4.1.71)] + >> endobj + 2413 0 obj << + /Names [(lstnumber.4.1.72) 982 0 R (lstnumber.4.1.73) 983 0 R (lstnumber.4.1.74) 984 0 R (lstnumber.4.1.75) 985 0 R (lstnumber.4.1.76) 986 0 R (lstnumber.4.1.77) 987 0 R] + /Limits [(lstnumber.4.1.72) (lstnumber.4.1.77)] + >> endobj + 2414 0 obj << + /Names [(lstnumber.4.1.78) 988 0 R (lstnumber.4.1.79) 989 0 R (lstnumber.4.1.8) 909 0 R (lstnumber.4.1.80) 990 0 R (lstnumber.4.1.81) 991 0 R (lstnumber.4.1.82) 992 0 R] + /Limits [(lstnumber.4.1.78) (lstnumber.4.1.82)] + >> endobj + 2415 0 obj << + /Names [(lstnumber.4.1.83) 993 0 R (lstnumber.4.1.84) 994 0 R (lstnumber.4.1.85) 995 0 R (lstnumber.4.1.86) 996 0 R (lstnumber.4.1.87) 997 0 R (lstnumber.4.1.88) 998 0 R] + /Limits [(lstnumber.4.1.83) (lstnumber.4.1.88)] + >> endobj + 2416 0 obj << + /Names [(lstnumber.4.1.89) 999 0 R (lstnumber.4.1.9) 910 0 R (lstnumber.4.1.90) 1000 0 R (lstnumber.4.1.91) 1001 0 R (lstnumber.4.1.92) 1002 0 R (lstnumber.4.1.93) 1003 0 R] + /Limits [(lstnumber.4.1.89) (lstnumber.4.1.93)] + >> endobj + 2417 0 obj << + /Names [(lstnumber.4.1.94) 1004 0 R (lstnumber.4.1.95) 1005 0 R (lstnumber.4.1.96) 1006 0 R (lstnumber.4.1.97) 1007 0 R (lstnumber.4.1.98) 1008 0 R (lstnumber.4.1.99) 1009 0 R] + /Limits [(lstnumber.4.1.94) (lstnumber.4.1.99)] + >> endobj + 2418 0 obj << + /Names [(lstnumber.4.2.1) 1149 0 R (lstnumber.4.2.2) 1150 0 R (lstnumber.4.2.3) 1151 0 R (lstnumber.4.2.4) 1152 0 R (lstnumber.4.2.5) 1153 0 R (lstnumber.4.3.1) 1155 0 R] + /Limits [(lstnumber.4.2.1) (lstnumber.4.3.1)] + >> endobj + 2419 0 obj << + /Names [(lstnumber.4.3.10) 1164 0 R (lstnumber.4.3.2) 1156 0 R (lstnumber.4.3.3) 1157 0 R (lstnumber.4.3.4) 1158 0 R (lstnumber.4.3.5) 1159 0 R (lstnumber.4.3.6) 1160 0 R] + /Limits [(lstnumber.4.3.10) (lstnumber.4.3.6)] + >> endobj + 2420 0 obj << + /Names [(lstnumber.4.3.7) 1161 0 R (lstnumber.4.3.8) 1162 0 R (lstnumber.4.3.9) 1163 0 R (lstnumber.4.4.1) 1171 0 R (lstnumber.4.4.10) 1180 0 R (lstnumber.4.4.11) 1181 0 R] + /Limits [(lstnumber.4.3.7) (lstnumber.4.4.11)] + >> endobj + 2421 0 obj << + /Names [(lstnumber.4.4.12) 1182 0 R (lstnumber.4.4.13) 1183 0 R (lstnumber.4.4.14) 1184 0 R (lstnumber.4.4.15) 1185 0 R (lstnumber.4.4.16) 1186 0 R (lstnumber.4.4.17) 1187 0 R] + /Limits [(lstnumber.4.4.12) (lstnumber.4.4.17)] + >> endobj + 2422 0 obj << + /Names [(lstnumber.4.4.2) 1172 0 R (lstnumber.4.4.3) 1173 0 R (lstnumber.4.4.4) 1174 0 R (lstnumber.4.4.5) 1175 0 R (lstnumber.4.4.6) 1176 0 R (lstnumber.4.4.7) 1177 0 R] + /Limits [(lstnumber.4.4.2) (lstnumber.4.4.7)] + >> endobj + 2423 0 obj << + /Names [(lstnumber.4.4.8) 1178 0 R (lstnumber.4.4.9) 1179 0 R (lstnumber.4.5.1) 1189 0 R (lstnumber.4.5.2) 1190 0 R (lstnumber.4.5.3) 1191 0 R (lstnumber.4.5.4) 1203 0 R] + /Limits [(lstnumber.4.4.8) (lstnumber.4.5.4)] + >> endobj + 2424 0 obj << + /Names [(lstnumber.4.6.1) 1205 0 R (lstnumber.4.6.2) 1206 0 R (lstnumber.4.7.1) 1238 0 R (lstnumber.4.7.10) 1247 0 R (lstnumber.4.7.11) 1248 0 R (lstnumber.4.7.12) 1249 0 R] + /Limits [(lstnumber.4.6.1) (lstnumber.4.7.12)] + >> endobj + 2425 0 obj << + /Names [(lstnumber.4.7.13) 1250 0 R (lstnumber.4.7.14) 1251 0 R (lstnumber.4.7.15) 1252 0 R (lstnumber.4.7.16) 1253 0 R (lstnumber.4.7.17) 1254 0 R (lstnumber.4.7.18) 1255 0 R] + /Limits [(lstnumber.4.7.13) (lstnumber.4.7.18)] + >> endobj + 2426 0 obj << + /Names [(lstnumber.4.7.19) 1256 0 R (lstnumber.4.7.2) 1239 0 R (lstnumber.4.7.20) 1257 0 R (lstnumber.4.7.21) 1258 0 R (lstnumber.4.7.22) 1259 0 R (lstnumber.4.7.23) 1260 0 R] + /Limits [(lstnumber.4.7.19) (lstnumber.4.7.23)] + >> endobj + 2427 0 obj << + /Names [(lstnumber.4.7.24) 1261 0 R (lstnumber.4.7.25) 1262 0 R (lstnumber.4.7.26) 1263 0 R (lstnumber.4.7.3) 1240 0 R (lstnumber.4.7.4) 1241 0 R (lstnumber.4.7.5) 1242 0 R] + /Limits [(lstnumber.4.7.24) (lstnumber.4.7.5)] + >> endobj + 2428 0 obj << + /Names [(lstnumber.4.7.6) 1243 0 R (lstnumber.4.7.7) 1244 0 R (lstnumber.4.7.8) 1245 0 R (lstnumber.4.7.9) 1246 0 R (lstnumber.4.8.1) 1273 0 R (lstnumber.4.8.2) 1274 0 R] + /Limits [(lstnumber.4.7.6) (lstnumber.4.8.2)] + >> endobj + 2429 0 obj << + /Names [(lstnumber.5.1.1) 1320 0 R (lstnumber.5.1.10) 1346 0 R (lstnumber.5.1.11) 1347 0 R (lstnumber.5.1.12) 1348 0 R (lstnumber.5.1.13) 1349 0 R (lstnumber.5.1.2) 1321 0 R] + /Limits [(lstnumber.5.1.1) (lstnumber.5.1.2)] + >> endobj + 2430 0 obj << + /Names [(lstnumber.5.1.3) 1322 0 R (lstnumber.5.1.4) 1323 0 R (lstnumber.5.1.5) 1324 0 R (lstnumber.5.1.6) 1325 0 R (lstnumber.5.1.7) 1343 0 R (lstnumber.5.1.8) 1344 0 R] + /Limits [(lstnumber.5.1.3) (lstnumber.5.1.8)] + >> endobj + 2431 0 obj << + /Names [(lstnumber.5.1.9) 1345 0 R (lstnumber.5.2.1) 1383 0 R (lstnumber.5.2.10) 1397 0 R (lstnumber.5.2.11) 1398 0 R (lstnumber.5.2.12) 1399 0 R (lstnumber.5.2.13) 1400 0 R] + /Limits [(lstnumber.5.1.9) (lstnumber.5.2.13)] + >> endobj + 2432 0 obj << + /Names [(lstnumber.5.2.14) 1401 0 R (lstnumber.5.2.15) 1402 0 R (lstnumber.5.2.16) 1403 0 R (lstnumber.5.2.17) 1404 0 R (lstnumber.5.2.18) 1405 0 R (lstnumber.5.2.19) 1406 0 R] + /Limits [(lstnumber.5.2.14) (lstnumber.5.2.19)] + >> endobj + 2433 0 obj << + /Names [(lstnumber.5.2.2) 1384 0 R (lstnumber.5.2.20) 1407 0 R (lstnumber.5.2.21) 1408 0 R (lstnumber.5.2.22) 1409 0 R (lstnumber.5.2.23) 1410 0 R (lstnumber.5.2.24) 1411 0 R] + /Limits [(lstnumber.5.2.2) (lstnumber.5.2.24)] + >> endobj + 2434 0 obj << + /Names [(lstnumber.5.2.25) 1412 0 R (lstnumber.5.2.26) 1413 0 R (lstnumber.5.2.27) 1414 0 R (lstnumber.5.2.28) 1415 0 R (lstnumber.5.2.3) 1385 0 R (lstnumber.5.2.4) 1386 0 R] + /Limits [(lstnumber.5.2.25) (lstnumber.5.2.4)] + >> endobj + 2435 0 obj << + /Names [(lstnumber.5.2.5) 1387 0 R (lstnumber.5.2.6) 1388 0 R (lstnumber.5.2.7) 1389 0 R (lstnumber.5.2.8) 1395 0 R (lstnumber.5.2.9) 1396 0 R (lstnumber.5.3.1) 1416 0 R] + /Limits [(lstnumber.5.2.5) (lstnumber.5.3.1)] + >> endobj + 2436 0 obj << + /Names [(lstnumber.5.3.10) 1425 0 R (lstnumber.5.3.11) 1426 0 R (lstnumber.5.3.12) 1427 0 R (lstnumber.5.3.13) 1428 0 R (lstnumber.5.3.14) 1429 0 R (lstnumber.5.3.15) 1430 0 R] + /Limits [(lstnumber.5.3.10) (lstnumber.5.3.15)] + >> endobj + 2437 0 obj << + /Names [(lstnumber.5.3.16) 1431 0 R (lstnumber.5.3.17) 1432 0 R (lstnumber.5.3.18) 1433 0 R (lstnumber.5.3.2) 1417 0 R (lstnumber.5.3.3) 1418 0 R (lstnumber.5.3.4) 1419 0 R] + /Limits [(lstnumber.5.3.16) (lstnumber.5.3.4)] + >> endobj + 2438 0 obj << + /Names [(lstnumber.5.3.5) 1420 0 R (lstnumber.5.3.6) 1421 0 R (lstnumber.5.3.7) 1422 0 R (lstnumber.5.3.8) 1423 0 R (lstnumber.5.3.9) 1424 0 R (lstnumber.5.4.1) 1444 0 R] + /Limits [(lstnumber.5.3.5) (lstnumber.5.4.1)] + >> endobj + 2439 0 obj << + /Names [(lstnumber.5.4.2) 1445 0 R (lstnumber.5.4.3) 1446 0 R (lstnumber.5.4.4) 1447 0 R (lstnumber.5.4.5) 1448 0 R (lstnumber.5.4.6) 1449 0 R (lstnumber.5.4.7) 1450 0 R] + /Limits [(lstnumber.5.4.2) (lstnumber.5.4.7)] + >> endobj + 2440 0 obj << + /Names [(lstnumber.5.4.8) 1451 0 R (lstnumber.5.5.1) 1480 0 R (lstnumber.5.5.2) 1481 0 R (lstnumber.5.5.3) 1482 0 R (lstnumber.5.6.1) 1484 0 R (lstnumber.5.6.10) 1509 0 R] + /Limits [(lstnumber.5.4.8) (lstnumber.5.6.10)] + >> endobj + 2441 0 obj << + /Names [(lstnumber.5.6.11) 1510 0 R (lstnumber.5.6.12) 1511 0 R (lstnumber.5.6.13) 1512 0 R (lstnumber.5.6.14) 1513 0 R (lstnumber.5.6.15) 1514 0 R (lstnumber.5.6.16) 1515 0 R] + /Limits [(lstnumber.5.6.11) (lstnumber.5.6.16)] + >> endobj + 2442 0 obj << + /Names [(lstnumber.5.6.17) 1516 0 R (lstnumber.5.6.18) 1517 0 R (lstnumber.5.6.19) 1518 0 R (lstnumber.5.6.2) 1485 0 R (lstnumber.5.6.3) 1486 0 R (lstnumber.5.6.4) 1487 0 R] + /Limits [(lstnumber.5.6.17) (lstnumber.5.6.4)] + >> endobj + 2443 0 obj << + /Names [(lstnumber.5.6.5) 1488 0 R (lstnumber.5.6.6) 1489 0 R (lstnumber.5.6.7) 1490 0 R (lstnumber.5.6.8) 1491 0 R (lstnumber.5.6.9) 1492 0 R (lstnumber.C.1.1) 1675 0 R] + /Limits [(lstnumber.5.6.5) (lstnumber.C.1.1)] + >> endobj + 2444 0 obj << + /Names [(lstnumber.C.1.10) 1684 0 R (lstnumber.C.1.100) 1782 0 R (lstnumber.C.1.101) 1783 0 R (lstnumber.C.1.102) 1784 0 R (lstnumber.C.1.103) 1785 0 R (lstnumber.C.1.104) 1786 0 R] + /Limits [(lstnumber.C.1.10) (lstnumber.C.1.104)] + >> endobj + 2445 0 obj << + /Names [(lstnumber.C.1.105) 1787 0 R (lstnumber.C.1.106) 1788 0 R (lstnumber.C.1.107) 1789 0 R (lstnumber.C.1.108) 1790 0 R (lstnumber.C.1.109) 1791 0 R (lstnumber.C.1.11) 1685 0 R] + /Limits [(lstnumber.C.1.105) (lstnumber.C.1.11)] + >> endobj + 2446 0 obj << + /Names [(lstnumber.C.1.110) 1792 0 R (lstnumber.C.1.111) 1797 0 R (lstnumber.C.1.112) 1798 0 R (lstnumber.C.1.113) 1799 0 R (lstnumber.C.1.114) 1800 0 R (lstnumber.C.1.115) 1801 0 R] + /Limits [(lstnumber.C.1.110) (lstnumber.C.1.115)] + >> endobj + 2447 0 obj << + /Names [(lstnumber.C.1.116) 1802 0 R (lstnumber.C.1.117) 1803 0 R (lstnumber.C.1.118) 1804 0 R (lstnumber.C.1.119) 1805 0 R (lstnumber.C.1.12) 1686 0 R (lstnumber.C.1.120) 1806 0 R] + /Limits [(lstnumber.C.1.116) (lstnumber.C.1.120)] + >> endobj + 2448 0 obj << + /Names [(lstnumber.C.1.121) 1807 0 R (lstnumber.C.1.122) 1808 0 R (lstnumber.C.1.123) 1809 0 R (lstnumber.C.1.124) 1810 0 R (lstnumber.C.1.125) 1811 0 R (lstnumber.C.1.126) 1812 0 R] + /Limits [(lstnumber.C.1.121) (lstnumber.C.1.126)] + >> endobj + 2449 0 obj << + /Names [(lstnumber.C.1.127) 1813 0 R (lstnumber.C.1.128) 1814 0 R (lstnumber.C.1.129) 1815 0 R (lstnumber.C.1.13) 1687 0 R (lstnumber.C.1.130) 1816 0 R (lstnumber.C.1.131) 1817 0 R] + /Limits [(lstnumber.C.1.127) (lstnumber.C.1.131)] + >> endobj + 2450 0 obj << + /Names [(lstnumber.C.1.14) 1688 0 R (lstnumber.C.1.15) 1689 0 R (lstnumber.C.1.16) 1690 0 R (lstnumber.C.1.17) 1691 0 R (lstnumber.C.1.18) 1692 0 R (lstnumber.C.1.19) 1693 0 R] + /Limits [(lstnumber.C.1.14) (lstnumber.C.1.19)] + >> endobj + 2451 0 obj << + /Names [(lstnumber.C.1.2) 1676 0 R (lstnumber.C.1.20) 1694 0 R (lstnumber.C.1.21) 1695 0 R (lstnumber.C.1.22) 1696 0 R (lstnumber.C.1.23) 1697 0 R (lstnumber.C.1.24) 1698 0 R] + /Limits [(lstnumber.C.1.2) (lstnumber.C.1.24)] + >> endobj + 2452 0 obj << + /Names [(lstnumber.C.1.25) 1699 0 R (lstnumber.C.1.26) 1700 0 R (lstnumber.C.1.27) 1705 0 R (lstnumber.C.1.28) 1706 0 R (lstnumber.C.1.29) 1707 0 R (lstnumber.C.1.3) 1677 0 R] + /Limits [(lstnumber.C.1.25) (lstnumber.C.1.3)] + >> endobj + 2453 0 obj << + /Names [(lstnumber.C.1.30) 1708 0 R (lstnumber.C.1.31) 1709 0 R (lstnumber.C.1.32) 1710 0 R (lstnumber.C.1.33) 1711 0 R (lstnumber.C.1.34) 1712 0 R (lstnumber.C.1.35) 1713 0 R] + /Limits [(lstnumber.C.1.30) (lstnumber.C.1.35)] + >> endobj + 2454 0 obj << + /Names [(lstnumber.C.1.36) 1714 0 R (lstnumber.C.1.37) 1715 0 R (lstnumber.C.1.38) 1716 0 R (lstnumber.C.1.39) 1717 0 R (lstnumber.C.1.4) 1678 0 R (lstnumber.C.1.40) 1718 0 R] + /Limits [(lstnumber.C.1.36) (lstnumber.C.1.40)] + >> endobj + 2455 0 obj << + /Names [(lstnumber.C.1.41) 1719 0 R (lstnumber.C.1.42) 1720 0 R (lstnumber.C.1.43) 1721 0 R (lstnumber.C.1.44) 1722 0 R (lstnumber.C.1.45) 1723 0 R (lstnumber.C.1.46) 1724 0 R] + /Limits [(lstnumber.C.1.41) (lstnumber.C.1.46)] + >> endobj + 2456 0 obj << + /Names [(lstnumber.C.1.47) 1725 0 R (lstnumber.C.1.48) 1726 0 R (lstnumber.C.1.49) 1727 0 R (lstnumber.C.1.5) 1679 0 R (lstnumber.C.1.50) 1728 0 R (lstnumber.C.1.51) 1729 0 R] + /Limits [(lstnumber.C.1.47) (lstnumber.C.1.51)] + >> endobj + 2457 0 obj << + /Names [(lstnumber.C.1.52) 1730 0 R (lstnumber.C.1.53) 1731 0 R (lstnumber.C.1.54) 1732 0 R (lstnumber.C.1.55) 1733 0 R (lstnumber.C.1.56) 1734 0 R (lstnumber.C.1.57) 1735 0 R] + /Limits [(lstnumber.C.1.52) (lstnumber.C.1.57)] + >> endobj + 2458 0 obj << + /Names [(lstnumber.C.1.58) 1736 0 R (lstnumber.C.1.59) 1737 0 R (lstnumber.C.1.6) 1680 0 R (lstnumber.C.1.60) 1738 0 R (lstnumber.C.1.61) 1739 0 R (lstnumber.C.1.62) 1740 0 R] + /Limits [(lstnumber.C.1.58) (lstnumber.C.1.62)] + >> endobj + 2459 0 obj << + /Names [(lstnumber.C.1.63) 1741 0 R (lstnumber.C.1.64) 1742 0 R (lstnumber.C.1.65) 1743 0 R (lstnumber.C.1.66) 1744 0 R (lstnumber.C.1.67) 1745 0 R (lstnumber.C.1.68) 1746 0 R] + /Limits [(lstnumber.C.1.63) (lstnumber.C.1.68)] + >> endobj + 2460 0 obj << + /Names [(lstnumber.C.1.69) 1747 0 R (lstnumber.C.1.7) 1681 0 R (lstnumber.C.1.70) 1748 0 R (lstnumber.C.1.71) 1749 0 R (lstnumber.C.1.72) 1754 0 R (lstnumber.C.1.73) 1755 0 R] + /Limits [(lstnumber.C.1.69) (lstnumber.C.1.73)] + >> endobj + 2461 0 obj << + /Names [(lstnumber.C.1.74) 1756 0 R (lstnumber.C.1.75) 1757 0 R (lstnumber.C.1.76) 1758 0 R (lstnumber.C.1.77) 1759 0 R (lstnumber.C.1.78) 1760 0 R (lstnumber.C.1.79) 1761 0 R] + /Limits [(lstnumber.C.1.74) (lstnumber.C.1.79)] + >> endobj + 2462 0 obj << + /Names [(lstnumber.C.1.8) 1682 0 R (lstnumber.C.1.80) 1762 0 R (lstnumber.C.1.81) 1763 0 R (lstnumber.C.1.82) 1764 0 R (lstnumber.C.1.83) 1765 0 R (lstnumber.C.1.84) 1766 0 R] + /Limits [(lstnumber.C.1.8) (lstnumber.C.1.84)] + >> endobj + 2463 0 obj << + /Names [(lstnumber.C.1.85) 1767 0 R (lstnumber.C.1.86) 1768 0 R (lstnumber.C.1.87) 1769 0 R (lstnumber.C.1.88) 1770 0 R (lstnumber.C.1.89) 1771 0 R (lstnumber.C.1.9) 1683 0 R] + /Limits [(lstnumber.C.1.85) (lstnumber.C.1.9)] + >> endobj + 2464 0 obj << + /Names [(lstnumber.C.1.90) 1772 0 R (lstnumber.C.1.91) 1773 0 R (lstnumber.C.1.92) 1774 0 R (lstnumber.C.1.93) 1775 0 R (lstnumber.C.1.94) 1776 0 R (lstnumber.C.1.95) 1777 0 R] + /Limits [(lstnumber.C.1.90) (lstnumber.C.1.95)] + >> endobj + 2465 0 obj << + /Names [(lstnumber.C.1.96) 1778 0 R (lstnumber.C.1.97) 1779 0 R (lstnumber.C.1.98) 1780 0 R (lstnumber.C.1.99) 1781 0 R (lstnumber.C.2.1) 1995 0 R (lstnumber.C.2.10) 2008 0 R] + /Limits [(lstnumber.C.1.96) (lstnumber.C.2.10)] + >> endobj + 2466 0 obj << + /Names [(lstnumber.C.2.11) 2009 0 R (lstnumber.C.2.12) 2010 0 R (lstnumber.C.2.13) 2011 0 R (lstnumber.C.2.14) 2012 0 R (lstnumber.C.2.15) 2013 0 R (lstnumber.C.2.16) 2014 0 R] + /Limits [(lstnumber.C.2.11) (lstnumber.C.2.16)] + >> endobj + 2467 0 obj << + /Names [(lstnumber.C.2.17) 2015 0 R (lstnumber.C.2.18) 2016 0 R (lstnumber.C.2.19) 2017 0 R (lstnumber.C.2.2) 1996 0 R (lstnumber.C.2.20) 2018 0 R (lstnumber.C.2.21) 2019 0 R] + /Limits [(lstnumber.C.2.17) (lstnumber.C.2.21)] + >> endobj + 2468 0 obj << + /Names [(lstnumber.C.2.22) 2020 0 R (lstnumber.C.2.23) 2021 0 R (lstnumber.C.2.24) 2022 0 R (lstnumber.C.2.25) 2023 0 R (lstnumber.C.2.26) 2024 0 R (lstnumber.C.2.27) 2025 0 R] + /Limits [(lstnumber.C.2.22) (lstnumber.C.2.27)] + >> endobj + 2469 0 obj << + /Names [(lstnumber.C.2.28) 2026 0 R (lstnumber.C.2.3) 1997 0 R (lstnumber.C.2.4) 1998 0 R (lstnumber.C.2.5) 1999 0 R (lstnumber.C.2.6) 2000 0 R (lstnumber.C.2.7) 2005 0 R] + /Limits [(lstnumber.C.2.28) (lstnumber.C.2.7)] + >> endobj + 2470 0 obj << + /Names [(lstnumber.C.2.8) 2006 0 R (lstnumber.C.2.9) 2007 0 R (lstnumber.C.3.1) 2027 0 R (lstnumber.C.3.10) 2036 0 R (lstnumber.C.3.11) 2037 0 R (lstnumber.C.3.12) 2038 0 R] + /Limits [(lstnumber.C.2.8) (lstnumber.C.3.12)] + >> endobj + 2471 0 obj << + /Names [(lstnumber.C.3.13) 2039 0 R (lstnumber.C.3.14) 2040 0 R (lstnumber.C.3.15) 2041 0 R (lstnumber.C.3.16) 2042 0 R (lstnumber.C.3.17) 2043 0 R (lstnumber.C.3.18) 2044 0 R] + /Limits [(lstnumber.C.3.13) (lstnumber.C.3.18)] + >> endobj + 2472 0 obj << + /Names [(lstnumber.C.3.19) 2045 0 R (lstnumber.C.3.2) 2028 0 R (lstnumber.C.3.20) 2046 0 R (lstnumber.C.3.21) 2047 0 R (lstnumber.C.3.22) 2052 0 R (lstnumber.C.3.23) 2053 0 R] + /Limits [(lstnumber.C.3.19) (lstnumber.C.3.23)] + >> endobj + 2473 0 obj << + /Names [(lstnumber.C.3.24) 2054 0 R (lstnumber.C.3.25) 2055 0 R (lstnumber.C.3.3) 2029 0 R (lstnumber.C.3.4) 2030 0 R (lstnumber.C.3.5) 2031 0 R (lstnumber.C.3.6) 2032 0 R] + /Limits [(lstnumber.C.3.24) (lstnumber.C.3.6)] + >> endobj + 2474 0 obj << + /Names [(lstnumber.C.3.7) 2033 0 R (lstnumber.C.3.8) 2034 0 R (lstnumber.C.3.9) 2035 0 R (lstnumber.C.4.1) 2056 0 R (lstnumber.C.4.10) 2065 0 R (lstnumber.C.4.11) 2066 0 R] + /Limits [(lstnumber.C.3.7) (lstnumber.C.4.11)] + >> endobj + 2475 0 obj << + /Names [(lstnumber.C.4.12) 2067 0 R (lstnumber.C.4.13) 2068 0 R (lstnumber.C.4.14) 2069 0 R (lstnumber.C.4.15) 2070 0 R (lstnumber.C.4.2) 2057 0 R (lstnumber.C.4.3) 2058 0 R] + /Limits [(lstnumber.C.4.12) (lstnumber.C.4.3)] + >> endobj + 2476 0 obj << + /Names [(lstnumber.C.4.4) 2059 0 R (lstnumber.C.4.5) 2060 0 R (lstnumber.C.4.6) 2061 0 R (lstnumber.C.4.7) 2062 0 R (lstnumber.C.4.8) 2063 0 R (lstnumber.C.4.9) 2064 0 R] + /Limits [(lstnumber.C.4.4) (lstnumber.C.4.9)] + >> endobj + 2477 0 obj << + /Names [(lstnumber.C.5.1) 2121 0 R (lstnumber.C.5.10) 2130 0 R (lstnumber.C.5.11) 2131 0 R (lstnumber.C.5.12) 2132 0 R (lstnumber.C.5.13) 2133 0 R (lstnumber.C.5.14) 2134 0 R] + /Limits [(lstnumber.C.5.1) (lstnumber.C.5.14)] + >> endobj + 2478 0 obj << + /Names [(lstnumber.C.5.15) 2135 0 R (lstnumber.C.5.16) 2136 0 R (lstnumber.C.5.17) 2137 0 R (lstnumber.C.5.18) 2138 0 R (lstnumber.C.5.19) 2139 0 R (lstnumber.C.5.2) 2122 0 R] + /Limits [(lstnumber.C.5.15) (lstnumber.C.5.2)] + >> endobj + 2479 0 obj << + /Names [(lstnumber.C.5.20) 2140 0 R (lstnumber.C.5.21) 2141 0 R (lstnumber.C.5.22) 2142 0 R (lstnumber.C.5.23) 2143 0 R (lstnumber.C.5.24) 2144 0 R (lstnumber.C.5.25) 2145 0 R] + /Limits [(lstnumber.C.5.20) (lstnumber.C.5.25)] + >> endobj + 2480 0 obj << + /Names [(lstnumber.C.5.26) 2146 0 R (lstnumber.C.5.27) 2147 0 R (lstnumber.C.5.28) 2148 0 R (lstnumber.C.5.29) 2149 0 R (lstnumber.C.5.3) 2123 0 R (lstnumber.C.5.30) 2150 0 R] + /Limits [(lstnumber.C.5.26) (lstnumber.C.5.30)] + >> endobj + 2481 0 obj << + /Names [(lstnumber.C.5.31) 2151 0 R (lstnumber.C.5.32) 2152 0 R (lstnumber.C.5.33) 2153 0 R (lstnumber.C.5.34) 2154 0 R (lstnumber.C.5.4) 2124 0 R (lstnumber.C.5.5) 2125 0 R] + /Limits [(lstnumber.C.5.31) (lstnumber.C.5.5)] + >> endobj + 2482 0 obj << + /Names [(lstnumber.C.5.6) 2126 0 R (lstnumber.C.5.7) 2127 0 R (lstnumber.C.5.8) 2128 0 R (lstnumber.C.5.9) 2129 0 R (lstnumber.C.6.1) 2156 0 R (lstnumber.C.6.10) 2169 0 R] + /Limits [(lstnumber.C.5.6) (lstnumber.C.6.10)] + >> endobj + 2483 0 obj << + /Names [(lstnumber.C.6.11) 2170 0 R (lstnumber.C.6.12) 2171 0 R (lstnumber.C.6.13) 2172 0 R (lstnumber.C.6.14) 2173 0 R (lstnumber.C.6.15) 2174 0 R (lstnumber.C.6.16) 2175 0 R] + /Limits [(lstnumber.C.6.11) (lstnumber.C.6.16)] + >> endobj + 2484 0 obj << + /Names [(lstnumber.C.6.17) 2176 0 R (lstnumber.C.6.18) 2177 0 R (lstnumber.C.6.19) 2178 0 R (lstnumber.C.6.2) 2157 0 R (lstnumber.C.6.20) 2179 0 R (lstnumber.C.6.21) 2180 0 R] + /Limits [(lstnumber.C.6.17) (lstnumber.C.6.21)] + >> endobj + 2485 0 obj << + /Names [(lstnumber.C.6.22) 2181 0 R (lstnumber.C.6.3) 2158 0 R (lstnumber.C.6.4) 2159 0 R (lstnumber.C.6.5) 2160 0 R (lstnumber.C.6.6) 2165 0 R (lstnumber.C.6.7) 2166 0 R] + /Limits [(lstnumber.C.6.22) (lstnumber.C.6.7)] + >> endobj + 2486 0 obj << + /Names [(lstnumber.C.6.8) 2167 0 R (lstnumber.C.6.9) 2168 0 R (lstnumber.C.7.1) 2183 0 R (lstnumber.C.7.10) 2192 0 R (lstnumber.C.7.11) 2193 0 R (lstnumber.C.7.12) 2194 0 R] + /Limits [(lstnumber.C.6.8) (lstnumber.C.7.12)] + >> endobj + 2487 0 obj << + /Names [(lstnumber.C.7.13) 2195 0 R (lstnumber.C.7.14) 2196 0 R (lstnumber.C.7.15) 2197 0 R (lstnumber.C.7.16) 2198 0 R (lstnumber.C.7.17) 2199 0 R (lstnumber.C.7.18) 2200 0 R] + /Limits [(lstnumber.C.7.13) (lstnumber.C.7.18)] + >> endobj + 2488 0 obj << + /Names [(lstnumber.C.7.19) 2201 0 R (lstnumber.C.7.2) 2184 0 R (lstnumber.C.7.20) 2202 0 R (lstnumber.C.7.21) 2203 0 R (lstnumber.C.7.22) 2208 0 R (lstnumber.C.7.23) 2209 0 R] + /Limits [(lstnumber.C.7.19) (lstnumber.C.7.23)] + >> endobj + 2489 0 obj << + /Names [(lstnumber.C.7.24) 2210 0 R (lstnumber.C.7.25) 2211 0 R (lstnumber.C.7.26) 2212 0 R (lstnumber.C.7.27) 2213 0 R (lstnumber.C.7.28) 2214 0 R (lstnumber.C.7.29) 2215 0 R] + /Limits [(lstnumber.C.7.24) (lstnumber.C.7.29)] + >> endobj + 2490 0 obj << + /Names [(lstnumber.C.7.3) 2185 0 R (lstnumber.C.7.30) 2216 0 R (lstnumber.C.7.31) 2217 0 R (lstnumber.C.7.32) 2218 0 R (lstnumber.C.7.33) 2219 0 R (lstnumber.C.7.34) 2220 0 R] + /Limits [(lstnumber.C.7.3) (lstnumber.C.7.34)] + >> endobj + 2491 0 obj << + /Names [(lstnumber.C.7.35) 2221 0 R (lstnumber.C.7.36) 2222 0 R (lstnumber.C.7.37) 2223 0 R (lstnumber.C.7.38) 2224 0 R (lstnumber.C.7.39) 2225 0 R (lstnumber.C.7.4) 2186 0 R] + /Limits [(lstnumber.C.7.35) (lstnumber.C.7.4)] + >> endobj + 2492 0 obj << + /Names [(lstnumber.C.7.40) 2226 0 R (lstnumber.C.7.41) 2227 0 R (lstnumber.C.7.42) 2228 0 R (lstnumber.C.7.43) 2229 0 R (lstnumber.C.7.44) 2230 0 R (lstnumber.C.7.45) 2231 0 R] + /Limits [(lstnumber.C.7.40) (lstnumber.C.7.45)] + >> endobj + 2493 0 obj << + /Names [(lstnumber.C.7.46) 2232 0 R (lstnumber.C.7.47) 2233 0 R (lstnumber.C.7.48) 2234 0 R (lstnumber.C.7.49) 2235 0 R (lstnumber.C.7.5) 2187 0 R (lstnumber.C.7.50) 2236 0 R] + /Limits [(lstnumber.C.7.46) (lstnumber.C.7.50)] + >> endobj + 2494 0 obj << + /Names [(lstnumber.C.7.51) 2237 0 R (lstnumber.C.7.52) 2238 0 R (lstnumber.C.7.53) 2239 0 R (lstnumber.C.7.54) 2240 0 R (lstnumber.C.7.55) 2241 0 R (lstnumber.C.7.56) 2242 0 R] + /Limits [(lstnumber.C.7.51) (lstnumber.C.7.56)] + >> endobj + 2495 0 obj << + /Names [(lstnumber.C.7.57) 2243 0 R (lstnumber.C.7.58) 2244 0 R (lstnumber.C.7.6) 2188 0 R (lstnumber.C.7.7) 2189 0 R (lstnumber.C.7.8) 2190 0 R (lstnumber.C.7.9) 2191 0 R] + /Limits [(lstnumber.C.7.57) (lstnumber.C.7.9)] + >> endobj + 2496 0 obj << + /Names [(lstnumber.C.8.1) 2246 0 R (lstnumber.C.8.10) 2260 0 R (lstnumber.C.8.11) 2261 0 R (lstnumber.C.8.12) 2262 0 R (lstnumber.C.8.13) 2263 0 R (lstnumber.C.8.14) 2264 0 R] + /Limits [(lstnumber.C.8.1) (lstnumber.C.8.14)] + >> endobj + 2497 0 obj << + /Names [(lstnumber.C.8.15) 2265 0 R (lstnumber.C.8.16) 2266 0 R (lstnumber.C.8.17) 2267 0 R (lstnumber.C.8.18) 2268 0 R (lstnumber.C.8.2) 2247 0 R (lstnumber.C.8.3) 2248 0 R] + /Limits [(lstnumber.C.8.15) (lstnumber.C.8.3)] + >> endobj + 2498 0 obj << + /Names [(lstnumber.C.8.4) 2254 0 R (lstnumber.C.8.5) 2255 0 R (lstnumber.C.8.6) 2256 0 R (lstnumber.C.8.7) 2257 0 R (lstnumber.C.8.8) 2258 0 R (lstnumber.C.8.9) 2259 0 R] + /Limits [(lstnumber.C.8.4) (lstnumber.C.8.9)] + >> endobj + 2499 0 obj << + /Names [(page.1) 330 0 R (page.10) 672 0 R (page.11) 689 0 R (page.12) 747 0 R (page.13) 773 0 R (page.14) 796 0 R] + /Limits [(page.1) (page.14)] + >> endobj + 2500 0 obj << + /Names [(page.15) 825 0 R (page.16) 833 0 R (page.17) 852 0 R (page.18) 868 0 R (page.19) 890 0 R (page.2) 476 0 R] + /Limits [(page.15) (page.2)] + >> endobj + 2501 0 obj << + /Names [(page.20) 900 0 R (page.21) 925 0 R (page.22) 974 0 R (page.23) 1030 0 R (page.24) 1072 0 R (page.25) 1092 0 R] + /Limits [(page.20) (page.25)] + >> endobj + 2502 0 obj << + /Names [(page.26) 1110 0 R (page.27) 1121 0 R (page.28) 1136 0 R (page.29) 1145 0 R (page.3) 497 0 R (page.30) 1169 0 R] + /Limits [(page.26) (page.30)] + >> endobj + 2503 0 obj << + /Names [(page.31) 1202 0 R (page.32) 1220 0 R (page.33) 1234 0 R (page.34) 1271 0 R (page.35) 1286 0 R (page.36) 1305 0 R] + /Limits [(page.31) (page.36)] + >> endobj + 2504 0 obj << + /Names [(page.37) 1318 0 R (page.38) 1342 0 R (page.39) 1359 0 R (page.4) 515 0 R (page.40) 1381 0 R (page.41) 1394 0 R] + /Limits [(page.37) (page.41)] + >> endobj + 2505 0 obj << + /Names [(page.42) 1442 0 R (page.43) 1464 0 R (page.44) 1478 0 R (page.45) 1508 0 R (page.46) 1532 0 R (page.47) 1537 0 R] + /Limits [(page.42) (page.47)] + >> endobj + 2506 0 obj << + /Names [(page.48) 1560 0 R (page.49) 1590 0 R (page.5) 535 0 R (page.50) 1616 0 R (page.51) 1633 0 R (page.52) 1647 0 R] + /Limits [(page.48) (page.52)] + >> endobj + 2507 0 obj << + /Names [(page.53) 1659 0 R (page.54) 1668 0 R (page.55) 1674 0 R (page.56) 1704 0 R (page.57) 1753 0 R (page.58) 1796 0 R] + /Limits [(page.53) (page.58)] + >> endobj + 2508 0 obj << + /Names [(page.59) 1821 0 R (page.6) 568 0 R (page.60) 1858 0 R (page.61) 1884 0 R (page.62) 1911 0 R (page.63) 1938 0 R] + /Limits [(page.59) (page.63)] + >> endobj + 2509 0 obj << + /Names [(page.64) 1965 0 R (page.65) 2004 0 R (page.66) 2051 0 R (page.67) 2075 0 R (page.68) 2103 0 R (page.69) 2108 0 R] + /Limits [(page.64) (page.69)] + >> endobj + 2510 0 obj << + /Names [(page.7) 600 0 R (page.70) 2120 0 R (page.71) 2164 0 R (page.72) 2207 0 R (page.73) 2253 0 R (page.8) 621 0 R] + /Limits [(page.7) (page.8)] + >> endobj + 2511 0 obj << + /Names [(page.9) 640 0 R (page.i) 347 0 R (page.ii) 354 0 R (page.iii) 359 0 R (page.iv) 397 0 R (page.v) 440 0 R] + /Limits [(page.9) (page.v)] + >> endobj + 2512 0 obj << + /Names [(page.vi) 454 0 R (section*.1) 349 0 R (section*.13) 753 0 R (section*.14) 774 0 R (section*.16) 812 0 R (section*.2) 355 0 R] + /Limits [(page.vi) (section*.2)] + >> endobj + 2513 0 obj << + /Names [(section*.25) 1093 0 R (section*.3) 360 0 R (section*.39) 1651 0 R (section*.4) 362 0 R (section*.40) 1652 0 R (section*.41) 1653 0 R] + /Limits [(section*.25) (section*.41)] + >> endobj + 2514 0 obj << + /Names [(section*.42) 1660 0 R (section*.43) 1661 0 R (section*.44) 1662 0 R (section*.45) 1663 0 R (section*.5) 455 0 R (section.2.1) 14 0 R] + /Limits [(section*.42) (section.2.1)] + >> endobj + 2515 0 obj << + /Names [(section.2.2) 18 0 R (section.2.3) 38 0 R (section.2.4) 42 0 R (section.2.5) 46 0 R (section.2.6) 58 0 R (section.2.7) 82 0 R] + /Limits [(section.2.2) (section.2.7)] + >> endobj + 2516 0 obj << + /Names [(section.3.1) 102 0 R (section.3.2) 106 0 R (section.4.1) 114 0 R (section.4.2) 118 0 R (section.4.3) 122 0 R (section.4.4) 130 0 R] + /Limits [(section.3.1) (section.4.4)] + >> endobj + 2517 0 obj << + /Names [(section.4.5) 134 0 R (section.4.6) 138 0 R (section.4.7) 162 0 R (section.4.8) 182 0 R (section.4.9) 186 0 R (section.5.1) 198 0 R] + /Limits [(section.4.5) (section.5.1)] + >> endobj + 2518 0 obj << + /Names [(section.5.2) 214 0 R (section.5.3) 230 0 R (section.5.4) 246 0 R (section.B.1) 258 0 R (section.B.2) 262 0 R (section.B.3) 266 0 R] + /Limits [(section.5.2) (section.B.3)] + >> endobj + 2519 0 obj << + /Names [(section.C.1) 274 0 R (section.C.2) 278 0 R (section.C.3) 306 0 R (section.C.4) 318 0 R (section.C.5) 322 0 R (subfigure.4.15.1) 1236 0 R] + /Limits [(section.C.1) (subfigure.4.15.1)] + >> endobj + 2520 0 obj << + /Names [(subfigure.4.15.2) 1237 0 R (subfigure.4.3.1) 1060 0 R (subfigure.4.3.2) 1061 0 R (subfigure.4.4.1) 1062 0 R (subfigure.4.4.2) 1074 0 R (subfigure.4.5.1) 1076 0 R] + /Limits [(subfigure.4.15.2) (subfigure.4.5.1)] + >> endobj + 2521 0 obj << + /Names [(subfigure.4.5.2) 1077 0 R (subfigure.4.5.3) 1078 0 R (subfigure.4.6.1) 1080 0 R (subfigure.4.6.2) 1081 0 R (subfigure.4.6.3) 1082 0 R (subfigure.4.7.1) 1095 0 R] + /Limits [(subfigure.4.5.2) (subfigure.4.7.1)] + >> endobj + 2522 0 obj << + /Names [(subfigure.4.7.2) 1096 0 R (subsection.2.2.1) 22 0 R (subsection.2.2.2) 26 0 R (subsection.2.2.3) 30 0 R (subsection.2.2.4) 34 0 R (subsection.2.5.1) 50 0 R] + /Limits [(subfigure.4.7.2) (subsection.2.5.1)] + >> endobj + 2523 0 obj << + /Names [(subsection.2.5.2) 54 0 R (subsection.2.6.1) 62 0 R (subsection.2.6.2) 66 0 R (subsection.2.6.3) 70 0 R (subsection.2.6.4) 74 0 R (subsection.2.6.5) 78 0 R] + /Limits [(subsection.2.5.2) (subsection.2.6.5)] + >> endobj + 2524 0 obj << + /Names [(subsection.2.7.1) 86 0 R (subsection.2.7.2) 90 0 R (subsection.2.7.3) 94 0 R (subsection.4.3.1) 126 0 R (subsection.4.6.1) 142 0 R (subsection.4.6.2) 146 0 R] + /Limits [(subsection.2.7.1) (subsection.4.6.2)] + >> endobj + 2525 0 obj << + /Names [(subsection.4.6.3) 150 0 R (subsection.4.6.4) 154 0 R (subsection.4.6.5) 158 0 R (subsection.4.7.1) 166 0 R (subsection.4.7.2) 170 0 R (subsection.4.7.3) 174 0 R] + /Limits [(subsection.4.6.3) (subsection.4.7.3)] + >> endobj + 2526 0 obj << + /Names [(subsection.4.7.4) 178 0 R (subsection.4.9.1) 190 0 R (subsection.5.1.1) 202 0 R (subsection.5.1.2) 206 0 R (subsection.5.1.3) 210 0 R (subsection.5.2.1) 218 0 R] + /Limits [(subsection.4.7.4) (subsection.5.2.1)] + >> endobj + 2527 0 obj << + /Names [(subsection.5.2.2) 222 0 R (subsection.5.2.3) 226 0 R (subsection.5.3.1) 234 0 R (subsection.5.3.2) 238 0 R (subsection.5.3.3) 242 0 R (subsection.C.2.1) 282 0 R] + /Limits [(subsection.5.2.2) (subsection.C.2.1)] + >> endobj + 2528 0 obj << + /Names [(subsection.C.2.2) 286 0 R (subsection.C.2.3) 290 0 R (subsection.C.2.4) 294 0 R (subsection.C.2.5) 298 0 R (subsection.C.2.6) 302 0 R (subsection.C.3.1) 310 0 R] + /Limits [(subsection.C.2.2) (subsection.C.3.1)] + >> endobj + 2529 0 obj << + /Names [(subsection.C.3.2) 314 0 R] + /Limits [(subsection.C.3.2) (subsection.C.3.2)] + >> endobj + 2530 0 obj << + /Kids [2317 0 R 2318 0 R 2319 0 R 2320 0 R 2321 0 R 2322 0 R] + /Limits [(Doc-Start) (Item.2)] + >> endobj + 2531 0 obj << + /Kids [2323 0 R 2324 0 R 2325 0 R 2326 0 R 2327 0 R 2328 0 R] + /Limits [(Item.20) (Item.7)] + >> endobj + 2532 0 obj << + /Kids [2329 0 R 2330 0 R 2331 0 R 2332 0 R 2333 0 R 2334 0 R] + /Limits [(Item.8) (cite.LLVM-PY)] + >> endobj + 2533 0 obj << + /Kids [2335 0 R 2336 0 R 2337 0 R 2338 0 R 2339 0 R 2340 0 R] + /Limits [(cite.LLVM-TYPES) (cite.YACC)] + >> endobj + 2534 0 obj << + /Kids [2341 0 R 2342 0 R 2343 0 R 2344 0 R 2345 0 R 2346 0 R] + /Limits [(cite.ZONECFG_YL) (lstlisting.2.-2)] + >> endobj + 2535 0 obj << + /Kids [2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R 2352 0 R] + /Limits [(lstlisting.2.1) (lstlisting.C.5)] + >> endobj + 2536 0 obj << + /Kids [2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R] + /Limits [(lstlisting.C.6) (lstnumber.-12.4)] + >> endobj + 2537 0 obj << + /Kids [2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R 2364 0 R] + /Limits [(lstnumber.-13.1) (lstnumber.-15.17)] + >> endobj + 2538 0 obj << + /Kids [2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R] + /Limits [(lstnumber.-15.18) (lstnumber.-3.19)] + >> endobj + 2539 0 obj << + /Kids [2371 0 R 2372 0 R 2373 0 R 2374 0 R 2375 0 R 2376 0 R] + /Limits [(lstnumber.-3.2) (lstnumber.-5.8)] + >> endobj + 2540 0 obj << + /Kids [2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R 2382 0 R] + /Limits [(lstnumber.-5.9) (lstnumber.-9.4)] + >> endobj + 2541 0 obj << + /Kids [2383 0 R 2384 0 R 2385 0 R 2386 0 R 2387 0 R 2388 0 R] + /Limits [(lstnumber.-9.5) (lstnumber.2.2.23)] + >> endobj + 2542 0 obj << + /Kids [2389 0 R 2390 0 R 2391 0 R 2392 0 R 2393 0 R 2394 0 R] + /Limits [(lstnumber.2.2.24) (lstnumber.2.3.4)] + >> endobj + 2543 0 obj << + /Kids [2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R 2400 0 R] + /Limits [(lstnumber.2.4.1) (lstnumber.4.1.13)] + >> endobj + 2544 0 obj << + /Kids [2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R 2406 0 R] + /Limits [(lstnumber.4.1.130) (lstnumber.4.1.39)] + >> endobj + 2545 0 obj << + /Kids [2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2412 0 R] + /Limits [(lstnumber.4.1.4) (lstnumber.4.1.71)] + >> endobj + 2546 0 obj << + /Kids [2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R 2418 0 R] + /Limits [(lstnumber.4.1.72) (lstnumber.4.3.1)] + >> endobj + 2547 0 obj << + /Kids [2419 0 R 2420 0 R 2421 0 R 2422 0 R 2423 0 R 2424 0 R] + /Limits [(lstnumber.4.3.10) (lstnumber.4.7.12)] + >> endobj + 2548 0 obj << + /Kids [2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R] + /Limits [(lstnumber.4.7.13) (lstnumber.5.1.8)] + >> endobj + 2549 0 obj << + /Kids [2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R 2436 0 R] + /Limits [(lstnumber.5.1.9) (lstnumber.5.3.15)] + >> endobj + 2550 0 obj << + /Kids [2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R 2442 0 R] + /Limits [(lstnumber.5.3.16) (lstnumber.5.6.4)] + >> endobj + 2551 0 obj << + /Kids [2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R 2448 0 R] + /Limits [(lstnumber.5.6.5) (lstnumber.C.1.126)] + >> endobj + 2552 0 obj << + /Kids [2449 0 R 2450 0 R 2451 0 R 2452 0 R 2453 0 R 2454 0 R] + /Limits [(lstnumber.C.1.127) (lstnumber.C.1.40)] + >> endobj + 2553 0 obj << + /Kids [2455 0 R 2456 0 R 2457 0 R 2458 0 R 2459 0 R 2460 0 R] + /Limits [(lstnumber.C.1.41) (lstnumber.C.1.73)] + >> endobj + 2554 0 obj << + /Kids [2461 0 R 2462 0 R 2463 0 R 2464 0 R 2465 0 R 2466 0 R] + /Limits [(lstnumber.C.1.74) (lstnumber.C.2.16)] + >> endobj + 2555 0 obj << + /Kids [2467 0 R 2468 0 R 2469 0 R 2470 0 R 2471 0 R 2472 0 R] + /Limits [(lstnumber.C.2.17) (lstnumber.C.3.23)] + >> endobj + 2556 0 obj << + /Kids [2473 0 R 2474 0 R 2475 0 R 2476 0 R 2477 0 R 2478 0 R] + /Limits [(lstnumber.C.3.24) (lstnumber.C.5.2)] + >> endobj + 2557 0 obj << + /Kids [2479 0 R 2480 0 R 2481 0 R 2482 0 R 2483 0 R 2484 0 R] + /Limits [(lstnumber.C.5.20) (lstnumber.C.6.21)] + >> endobj + 2558 0 obj << + /Kids [2485 0 R 2486 0 R 2487 0 R 2488 0 R 2489 0 R 2490 0 R] + /Limits [(lstnumber.C.6.22) (lstnumber.C.7.34)] + >> endobj + 2559 0 obj << + /Kids [2491 0 R 2492 0 R 2493 0 R 2494 0 R 2495 0 R 2496 0 R] + /Limits [(lstnumber.C.7.35) (lstnumber.C.8.14)] + >> endobj + 2560 0 obj << + /Kids [2497 0 R 2498 0 R 2499 0 R 2500 0 R 2501 0 R 2502 0 R] + /Limits [(lstnumber.C.8.15) (page.30)] + >> endobj + 2561 0 obj << + /Kids [2503 0 R 2504 0 R 2505 0 R 2506 0 R 2507 0 R 2508 0 R] + /Limits [(page.31) (page.63)] + >> endobj + 2562 0 obj << + /Kids [2509 0 R 2510 0 R 2511 0 R 2512 0 R 2513 0 R 2514 0 R] + /Limits [(page.64) (section.2.1)] + >> endobj + 2563 0 obj << + /Kids [2515 0 R 2516 0 R 2517 0 R 2518 0 R 2519 0 R 2520 0 R] + /Limits [(section.2.2) (subfigure.4.5.1)] + >> endobj + 2564 0 obj << + /Kids [2521 0 R 2522 0 R 2523 0 R 2524 0 R 2525 0 R 2526 0 R] + /Limits [(subfigure.4.5.2) (subsection.5.2.1)] + >> endobj + 2565 0 obj << + /Kids [2527 0 R 2528 0 R 2529 0 R] + /Limits [(subsection.5.2.2) (subsection.C.3.2)] + >> endobj + 2566 0 obj << + /Kids [2530 0 R 2531 0 R 2532 0 R 2533 0 R 2534 0 R 2535 0 R] + /Limits [(Doc-Start) (lstlisting.C.5)] + >> endobj + 2567 0 obj << + /Kids [2536 0 R 2537 0 R 2538 0 R 2539 0 R 2540 0 R 2541 0 R] + /Limits [(lstlisting.C.6) (lstnumber.2.2.23)] + >> endobj + 2568 0 obj << + /Kids [2542 0 R 2543 0 R 2544 0 R 2545 0 R 2546 0 R 2547 0 R] + /Limits [(lstnumber.2.2.24) (lstnumber.4.7.12)] + >> endobj + 2569 0 obj << + /Kids [2548 0 R 2549 0 R 2550 0 R 2551 0 R 2552 0 R 2553 0 R] + /Limits [(lstnumber.4.7.13) (lstnumber.C.1.73)] + >> endobj + 2570 0 obj << + /Kids [2554 0 R 2555 0 R 2556 0 R 2557 0 R 2558 0 R 2559 0 R] + /Limits [(lstnumber.C.1.74) (lstnumber.C.8.14)] + >> endobj + 2571 0 obj << + /Kids [2560 0 R 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2565 0 R] + /Limits [(lstnumber.C.8.15) (subsection.C.3.2)] + >> endobj + 2572 0 obj << + /Kids [2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2571 0 R] + /Limits [(Doc-Start) (subsection.C.3.2)] + >> endobj + 2573 0 obj << + /Dests 2572 0 R + >> endobj + 2574 0 obj << + /Type /Catalog + /Pages 2315 0 R + /Outlines 2316 0 R + /Names 2573 0 R + /PageMode/UseOutlines/PageLabels<>1<>7<>]>> + /OpenAction 325 0 R + >> endobj + 2575 0 obj << + /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.9)/Keywords() + /CreationDate (D:20090521011552+01'00') + /ModDate (D:20090521011552+01'00') + /Trapped /False + /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.9-2.2 (Web2C 7.5.7) kpathsea version 3.5.7) + >> endobj + xref + 0 2576 + 0000000001 65535 f + 0000000002 00000 f + 0000000003 00000 f + 0000000004 00000 f + 0000000506 00000 f + 0000000015 00000 n + 0000076938 00000 n + 0000983772 00000 n + 0000000060 00000 n + 0000000090 00000 n + 0000080468 00000 n + 0000983648 00000 n + 0000000135 00000 n + 0000000170 00000 n + 0000080524 00000 n + 0000983574 00000 n + 0000000218 00000 n + 0000000256 00000 n + 0000080579 00000 n + 0000983450 00000 n + 0000000304 00000 n + 0000000343 00000 n + 0000085889 00000 n + 0000983376 00000 n + 0000000396 00000 n + 0000000427 00000 n + 0000086055 00000 n + 0000983289 00000 n + 0000000480 00000 n + 0000000514 00000 n + 0000090800 00000 n + 0000983202 00000 n + 0000000567 00000 n + 0000000609 00000 n + 0000090856 00000 n + 0000983128 00000 n + 0000000662 00000 n + 0000000700 00000 n + 0000096339 00000 n + 0000983041 00000 n + 0000000748 00000 n + 0000000779 00000 n + 0000096395 00000 n + 0000982954 00000 n + 0000000827 00000 n + 0000000878 00000 n + 0000109779 00000 n + 0000982830 00000 n + 0000000926 00000 n + 0000000971 00000 n + 0000109835 00000 n + 0000982756 00000 n + 0000001024 00000 n + 0000001066 00000 n + 0000109891 00000 n + 0000982682 00000 n + 0000001119 00000 n + 0000001162 00000 n + 0000115179 00000 n + 0000982558 00000 n + 0000001210 00000 n + 0000001258 00000 n + 0000115235 00000 n + 0000982484 00000 n + 0000001311 00000 n + 0000001356 00000 n + 0000121431 00000 n + 0000982397 00000 n + 0000001409 00000 n + 0000001463 00000 n + 0000128856 00000 n + 0000982310 00000 n + 0000001516 00000 n + 0000001588 00000 n + 0000128911 00000 n + 0000982223 00000 n + 0000001641 00000 n + 0000001669 00000 n + 0000139445 00000 n + 0000982149 00000 n + 0000001722 00000 n + 0000001772 00000 n + 0000139501 00000 n + 0000982038 00000 n + 0000001820 00000 n + 0000001879 00000 n + 0000139557 00000 n + 0000981964 00000 n + 0000001932 00000 n + 0000001975 00000 n + 0000151313 00000 n + 0000981877 00000 n + 0000002028 00000 n + 0000002070 00000 n + 0000155417 00000 n + 0000981803 00000 n + 0000002123 00000 n + 0000002160 00000 n + 0000253729 00000 n + 0000981673 00000 n + 0000002206 00000 n + 0000002256 00000 n + 0000253785 00000 n + 0000981595 00000 n + 0000002305 00000 n + 0000002342 00000 n + 0000259057 00000 n + 0000981517 00000 n + 0000002391 00000 n + 0000002437 00000 n + 0000264098 00000 n + 0000981385 00000 n + 0000002484 00000 n + 0000002532 00000 n + 0000264155 00000 n + 0000981306 00000 n + 0000002581 00000 n + 0000002616 00000 n + 0000264269 00000 n + 0000981213 00000 n + 0000002665 00000 n + 0000002706 00000 n + 0000364376 00000 n + 0000981081 00000 n + 0000002755 00000 n + 0000002808 00000 n + 0000381747 00000 n + 0000981016 00000 n + 0000002862 00000 n + 0000002901 00000 n + 0000415300 00000 n + 0000980923 00000 n + 0000002950 00000 n + 0000002986 00000 n + 0000420611 00000 n + 0000980830 00000 n + 0000003035 00000 n + 0000003074 00000 n + 0000491887 00000 n + 0000980698 00000 n + 0000003123 00000 n + 0000003162 00000 n + 0000491945 00000 n + 0000980619 00000 n + 0000003216 00000 n + 0000003263 00000 n + 0000494737 00000 n + 0000980526 00000 n + 0000003317 00000 n + 0000003352 00000 n + 0000494795 00000 n + 0000980433 00000 n + 0000003406 00000 n + 0000003445 00000 n + 0000494853 00000 n + 0000980340 00000 n + 0000003499 00000 n + 0000003543 00000 n + 0000506062 00000 n + 0000980261 00000 n + 0000003597 00000 n + 0000003626 00000 n + 0000511526 00000 n + 0000980129 00000 n + 0000003675 00000 n + 0000003704 00000 n + 0000511584 00000 n + 0000980050 00000 n + 0000003758 00000 n + 0000003796 00000 n + 0000516773 00000 n + 0000979957 00000 n + 0000003850 00000 n + 0000003896 00000 n + 0000517008 00000 n + 0000979864 00000 n + 0000003950 00000 n + 0000003997 00000 n + 0000526508 00000 n + 0000979785 00000 n + 0000004051 00000 n + 0000004090 00000 n + 0000531492 00000 n + 0000979692 00000 n + 0000004139 00000 n + 0000004171 00000 n + 0000534028 00000 n + 0000979574 00000 n + 0000004220 00000 n + 0000004243 00000 n + 0000534086 00000 n + 0000979509 00000 n + 0000004297 00000 n + 0000004332 00000 n + 0000538785 00000 n + 0000979376 00000 n + 0000004379 00000 n + 0000004445 00000 n + 0000538843 00000 n + 0000979258 00000 n + 0000004494 00000 n + 0000004524 00000 n + 0000538901 00000 n + 0000979179 00000 n + 0000004578 00000 n + 0000004627 00000 n + 0000544507 00000 n + 0000979086 00000 n + 0000004681 00000 n + 0000004719 00000 n + 0000544565 00000 n + 0000979007 00000 n + 0000004773 00000 n + 0000004805 00000 n + 0000544623 00000 n + 0000978875 00000 n + 0000004854 00000 n + 0000004884 00000 n + 0000548082 00000 n + 0000978796 00000 n + 0000004938 00000 n + 0000004993 00000 n + 0000553644 00000 n + 0000978703 00000 n + 0000005047 00000 n + 0000005106 00000 n + 0000565049 00000 n + 0000978624 00000 n + 0000005160 00000 n + 0000005201 00000 n + 0000569655 00000 n + 0000978492 00000 n + 0000005250 00000 n + 0000005289 00000 n + 0000574949 00000 n + 0000978413 00000 n + 0000005343 00000 n + 0000005384 00000 n + 0000575007 00000 n + 0000978320 00000 n + 0000005438 00000 n + 0000005483 00000 n + 0000712495 00000 n + 0000978241 00000 n + 0000005537 00000 n + 0000005569 00000 n + 0000712553 00000 n + 0000978162 00000 n + 0000005618 00000 n + 0000005648 00000 n + 0000722880 00000 n + 0000978068 00000 n + 0000005696 00000 n + 0000005726 00000 n + 0000749941 00000 n + 0000977935 00000 n + 0000005774 00000 n + 0000005810 00000 n + 0000749999 00000 n + 0000977856 00000 n + 0000005859 00000 n + 0000005904 00000 n + 0000750234 00000 n + 0000977763 00000 n + 0000005953 00000 n + 0000005984 00000 n + 0000756228 00000 n + 0000977684 00000 n + 0000006033 00000 n + 0000006072 00000 n + 0000760083 00000 n + 0000977565 00000 n + 0000006120 00000 n + 0000006157 00000 n + 0000760141 00000 n + 0000977486 00000 n + 0000006206 00000 n + 0000006242 00000 n + 0000777086 00000 n + 0000977354 00000 n + 0000006291 00000 n + 0000006340 00000 n + 0000777144 00000 n + 0000977275 00000 n + 0000006394 00000 n + 0000006436 00000 n + 0000782602 00000 n + 0000977182 00000 n + 0000006490 00000 n + 0000006533 00000 n + 0000783984 00000 n + 0000977089 00000 n + 0000006587 00000 n + 0000006633 00000 n + 0000788621 00000 n + 0000976996 00000 n + 0000006687 00000 n + 0000006739 00000 n + 0000790131 00000 n + 0000976903 00000 n + 0000006793 00000 n + 0000006848 00000 n + 0000795514 00000 n + 0000976824 00000 n + 0000006902 00000 n + 0000006946 00000 n + 0000797396 00000 n + 0000976692 00000 n + 0000006995 00000 n + 0000007030 00000 n + 0000797454 00000 n + 0000976613 00000 n + 0000007084 00000 n + 0000007120 00000 n + 0000810725 00000 n + 0000976534 00000 n + 0000007174 00000 n + 0000007201 00000 n + 0000832322 00000 n + 0000976441 00000 n + 0000007250 00000 n + 0000007282 00000 n + 0000837945 00000 n + 0000976362 00000 n + 0000007331 00000 n + 0000007375 00000 n + 0000008438 00000 n + 0000008550 00000 n + 0000051690 00000 n + 0000007427 00000 n + 0000051068 00000 n + 0000051121 00000 n + 0000972385 00000 n + 0000051178 00000 n + 0000051234 00000 n + 0000974043 00000 n + 0000051291 00000 n + 0000051348 00000 n + 0000051405 00000 n + 0000051462 00000 n + 0000051519 00000 n + 0000051576 00000 n + 0000051633 00000 n + 0000974188 00000 n + 0000053271 00000 n + 0000053049 00000 n + 0000051811 00000 n + 0000053161 00000 n + 0000972034 00000 n + 0000053214 00000 n + 0000972558 00000 n + 0000055198 00000 n + 0000054976 00000 n + 0000053369 00000 n + 0000055088 00000 n + 0000055141 00000 n + 0000057051 00000 n + 0000056772 00000 n + 0000055296 00000 n + 0000056884 00000 n + 0000056937 00000 n + 0000972879 00000 n + 0000056994 00000 n + 0000058875 00000 n + 0000059026 00000 n + 0000059177 00000 n + 0000059331 00000 n + 0000059485 00000 n + 0000059644 00000 n + 0000059801 00000 n + 0000059959 00000 n + 0000060118 00000 n + 0000060272 00000 n + 0000060425 00000 n + 0000060579 00000 n + 0000060738 00000 n + 0000060896 00000 n + 0000061050 00000 n + 0000061209 00000 n + 0000061368 00000 n + 0000061526 00000 n + 0000061685 00000 n + 0000061843 00000 n + 0000061997 00000 n + 0000062155 00000 n + 0000062314 00000 n + 0000062473 00000 n + 0000062624 00000 n + 0000062777 00000 n + 0000062931 00000 n + 0000063081 00000 n + 0000063235 00000 n + 0000063388 00000 n + 0000065592 00000 n + 0000063593 00000 n + 0000058511 00000 n + 0000057162 00000 n + 0000063540 00000 n + 0000065751 00000 n + 0000065904 00000 n + 0000066058 00000 n + 0000066212 00000 n + 0000066371 00000 n + 0000066530 00000 n + 0000066689 00000 n + 0000066848 00000 n + 0000067007 00000 n + 0000067159 00000 n + 0000067318 00000 n + 0000067477 00000 n + 0000067634 00000 n + 0000067793 00000 n + 0000067947 00000 n + 0000068101 00000 n + 0000068260 00000 n + 0000068411 00000 n + 0000068565 00000 n + 0000068724 00000 n + 0000068883 00000 n + 0000069042 00000 n + 0000069195 00000 n + 0000069354 00000 n + 0000069513 00000 n + 0000069672 00000 n + 0000069825 00000 n + 0000069983 00000 n + 0000070142 00000 n + 0000070300 00000 n + 0000070454 00000 n + 0000070605 00000 n + 0000070757 00000 n + 0000070910 00000 n + 0000071064 00000 n + 0000071218 00000 n + 0000071370 00000 n + 0000071523 00000 n + 0000072713 00000 n + 0000071728 00000 n + 0000065156 00000 n + 0000063691 00000 n + 0000071675 00000 n + 0000072871 00000 n + 0000073030 00000 n + 0000073189 00000 n + 0000073348 00000 n + 0000073507 00000 n + 0000073664 00000 n + 0000073815 00000 n + 0000073974 00000 n + 0000074133 00000 n + 0000074287 00000 n + 0000074551 00000 n + 0000072501 00000 n + 0000071826 00000 n + 0000074441 00000 n + 0000074494 00000 n + 0000974306 00000 n + 0000076484 00000 n + 0000076636 00000 n + 0000076787 00000 n + 0000076993 00000 n + 0000076336 00000 n + 0000074636 00000 n + 0000973606 00000 n + 0000723498 00000 n + 0000079500 00000 n + 0000079805 00000 n + 0000079958 00000 n + 0000080110 00000 n + 0000080262 00000 n + 0000083819 00000 n + 0000083976 00000 n + 0000084134 00000 n + 0000080696 00000 n + 0000079328 00000 n + 0000077104 00000 n + 0000080415 00000 n + 0000079653 00000 n + 0000080635 00000 n + 0000732124 00000 n + 0000084288 00000 n + 0000084442 00000 n + 0000084596 00000 n + 0000084755 00000 n + 0000084912 00000 n + 0000085069 00000 n + 0000085223 00000 n + 0000085375 00000 n + 0000085526 00000 n + 0000085681 00000 n + 0000089605 00000 n + 0000089763 00000 n + 0000089921 00000 n + 0000090073 00000 n + 0000086292 00000 n + 0000083591 00000 n + 0000080807 00000 n + 0000085836 00000 n + 0000973752 00000 n + 0000085945 00000 n + 0000972732 00000 n + 0000085998 00000 n + 0000086111 00000 n + 0000086168 00000 n + 0000086230 00000 n + 0000740435 00000 n + 0000000791 00000 f + 0000090225 00000 n + 0000090383 00000 n + 0000090537 00000 n + 0000094115 00000 n + 0000094424 00000 n + 0000090912 00000 n + 0000089425 00000 n + 0000086442 00000 n + 0000090690 00000 n + 0000090743 00000 n + 0000732685 00000 n + 0000094579 00000 n + 0000094734 00000 n + 0000094888 00000 n + 0000095042 00000 n + 0000098775 00000 n + 0000095202 00000 n + 0000095356 00000 n + 0000095511 00000 n + 0000095666 00000 n + 0000095818 00000 n + 0000095972 00000 n + 0000096129 00000 n + 0000100557 00000 n + 0000100864 00000 n + 0000096574 00000 n + 0000093879 00000 n + 0000091023 00000 n + 0000096286 00000 n + 0000094270 00000 n + 0000096451 00000 n + 0000096513 00000 n + 0000747846 00000 n + 0000103972 00000 n + 0000748278 00000 n + 0000731752 00000 n + 0000732062 00000 n + 0000101018 00000 n + 0000101173 00000 n + 0000101328 00000 n + 0000101482 00000 n + 0000101636 00000 n + 0000101790 00000 n + 0000101944 00000 n + 0000102098 00000 n + 0000102252 00000 n + 0000102403 00000 n + 0000102555 00000 n + 0000102707 00000 n + 0000102859 00000 n + 0000103011 00000 n + 0000103164 00000 n + 0000103623 00000 n + 0000103771 00000 n + 0000103318 00000 n + 0000103471 00000 n + 0000107883 00000 n + 0000108039 00000 n + 0000104152 00000 n + 0000098475 00000 n + 0000096698 00000 n + 0000103919 00000 n + 0000100711 00000 n + 0000104029 00000 n + 0000973898 00000 n + 0000104091 00000 n + 0000974424 00000 n + 0000100209 00000 n + 0000100436 00000 n + 0000100483 00000 n + 0000732186 00000 n + 0000723931 00000 n + 0000723745 00000 n + 0000723062 00000 n + 0000723312 00000 n + 0000732000 00000 n + 0000723000 00000 n + 0000723124 00000 n + 0000723374 00000 n + 0000108195 00000 n + 0000108348 00000 n + 0000108501 00000 n + 0000108806 00000 n + 0000108959 00000 n + 0000109113 00000 n + 0000109269 00000 n + 0000109425 00000 n + 0000109575 00000 n + 0000113598 00000 n + 0000113749 00000 n + 0000110008 00000 n + 0000107663 00000 n + 0000104291 00000 n + 0000109726 00000 n + 0000972206 00000 n + 0000108654 00000 n + 0000109947 00000 n + 0000741369 00000 n + 0000722938 00000 n + 0000740497 00000 n + 0000747908 00000 n + 0000723436 00000 n + 0000113900 00000 n + 0000114052 00000 n + 0000114202 00000 n + 0000114353 00000 n + 0000114505 00000 n + 0000114665 00000 n + 0000114817 00000 n + 0000114971 00000 n + 0000117921 00000 n + 0000115813 00000 n + 0000113394 00000 n + 0000110132 00000 n + 0000115126 00000 n + 0000115291 00000 n + 0000115348 00000 n + 0000115405 00000 n + 0000115462 00000 n + 0000115519 00000 n + 0000115576 00000 n + 0000115633 00000 n + 0000115690 00000 n + 0000115752 00000 n + 0000120861 00000 n + 0000120652 00000 n + 0000124604 00000 n + 0000125853 00000 n + 0000126007 00000 n + 0000126164 00000 n + 0000121487 00000 n + 0000117789 00000 n + 0000115937 00000 n + 0000120808 00000 n + 0000120918 00000 n + 0000120975 00000 n + 0000121032 00000 n + 0000121089 00000 n + 0000121146 00000 n + 0000121203 00000 n + 0000121260 00000 n + 0000121317 00000 n + 0000121374 00000 n + 0000120304 00000 n + 0000120531 00000 n + 0000120578 00000 n + 0000126320 00000 n + 0000126473 00000 n + 0000126624 00000 n + 0000126780 00000 n + 0000126936 00000 n + 0000127093 00000 n + 0000127247 00000 n + 0000127403 00000 n + 0000127556 00000 n + 0000127711 00000 n + 0000127868 00000 n + 0000128024 00000 n + 0000128180 00000 n + 0000128335 00000 n + 0000128490 00000 n + 0000128647 00000 n + 0000129086 00000 n + 0000124328 00000 n + 0000121626 00000 n + 0000128803 00000 n + 0000128967 00000 n + 0000129029 00000 n + 0000125505 00000 n + 0000125732 00000 n + 0000125779 00000 n + 0000723560 00000 n + 0000748032 00000 n + 0000748154 00000 n + 0000740621 00000 n + 0000741244 00000 n + 0000132009 00000 n + 0000723622 00000 n + 0000740995 00000 n + 0000134568 00000 n + 0000131844 00000 n + 0000129225 00000 n + 0000131956 00000 n + 0000132066 00000 n + 0000132123 00000 n + 0000132180 00000 n + 0000132237 00000 n + 0000132294 00000 n + 0000132351 00000 n + 0000132408 00000 n + 0000132465 00000 n + 0000132522 00000 n + 0000132579 00000 n + 0000132636 00000 n + 0000132693 00000 n + 0000132750 00000 n + 0000132807 00000 n + 0000132864 00000 n + 0000132921 00000 n + 0000132978 00000 n + 0000133035 00000 n + 0000133092 00000 n + 0000133149 00000 n + 0000133206 00000 n + 0000133263 00000 n + 0000133320 00000 n + 0000133377 00000 n + 0000133434 00000 n + 0000133491 00000 n + 0000133548 00000 n + 0000133605 00000 n + 0000133662 00000 n + 0000133719 00000 n + 0000133776 00000 n + 0000133832 00000 n + 0000133889 00000 n + 0000133946 00000 n + 0000134002 00000 n + 0000134059 00000 n + 0000134116 00000 n + 0000134172 00000 n + 0000134229 00000 n + 0000134286 00000 n + 0000134342 00000 n + 0000134399 00000 n + 0000134456 00000 n + 0000134512 00000 n + 0000137738 00000 n + 0000137896 00000 n + 0000138052 00000 n + 0000138211 00000 n + 0000138370 00000 n + 0000138529 00000 n + 0000138688 00000 n + 0000139005 00000 n + 0000143722 00000 n + 0000143876 00000 n + 0000139670 00000 n + 0000137542 00000 n + 0000134666 00000 n + 0000139164 00000 n + 0000139217 00000 n + 0000139274 00000 n + 0000139331 00000 n + 0000139388 00000 n + 0000138847 00000 n + 0000139613 00000 n + 0000974542 00000 n + 0000740745 00000 n + 0000747970 00000 n + 0000740870 00000 n + 0000144029 00000 n + 0000144183 00000 n + 0000144342 00000 n + 0000144501 00000 n + 0000144660 00000 n + 0000144815 00000 n + 0000144971 00000 n + 0000145124 00000 n + 0000145278 00000 n + 0000145433 00000 n + 0000149267 00000 n + 0000149421 00000 n + 0000145987 00000 n + 0000143502 00000 n + 0000139781 00000 n + 0000145588 00000 n + 0000145641 00000 n + 0000145698 00000 n + 0000145755 00000 n + 0000145812 00000 n + 0000145869 00000 n + 0000145926 00000 n + 0000731814 00000 n + 0000150402 00000 n + 0000723683 00000 n + 0000731938 00000 n + 0000741057 00000 n + 0000740373 00000 n + 0000149575 00000 n + 0000149728 00000 n + 0000149882 00000 n + 0000150035 00000 n + 0000150189 00000 n + 0000000840 00000 f + 0000154985 00000 n + 0000151658 00000 n + 0000149087 00000 n + 0000146098 00000 n + 0000150349 00000 n + 0000150459 00000 n + 0000150516 00000 n + 0000150573 00000 n + 0000150629 00000 n + 0000150686 00000 n + 0000150743 00000 n + 0000150800 00000 n + 0000150857 00000 n + 0000150914 00000 n + 0000150971 00000 n + 0000151028 00000 n + 0000151085 00000 n + 0000151142 00000 n + 0000151199 00000 n + 0000151256 00000 n + 0000151369 00000 n + 0000151426 00000 n + 0000151483 00000 n + 0000151540 00000 n + 0000151597 00000 n + 0000740559 00000 n + 0000732623 00000 n + 0000155472 00000 n + 0000157081 00000 n + 0000157390 00000 n + 0000155529 00000 n + 0000154853 00000 n + 0000151782 00000 n + 0000155136 00000 n + 0000155189 00000 n + 0000155246 00000 n + 0000155303 00000 n + 0000155360 00000 n + 0000157598 00000 n + 0000156933 00000 n + 0000155653 00000 n + 0000157545 00000 n + 0000157236 00000 n + 0000748093 00000 n + 0000252594 00000 n + 0000252748 00000 n + 0000159787 00000 n + 0000252523 00000 n + 0000000841 00000 f + 0000001471 00000 f + 0000252902 00000 n + 0000253058 00000 n + 0000253214 00000 n + 0000253366 00000 n + 0000253519 00000 n + 0000257486 00000 n + 0000257639 00000 n + 0000253899 00000 n + 0000159592 00000 n + 0000157683 00000 n + 0000253676 00000 n + 0000253842 00000 n + 0000188245 00000 n + 0000732747 00000 n + 0000732373 00000 n + 0000257791 00000 n + 0000257942 00000 n + 0000258093 00000 n + 0000258245 00000 n + 0000258397 00000 n + 0000258550 00000 n + 0000258702 00000 n + 0000258853 00000 n + 0000259114 00000 n + 0000257282 00000 n + 0000254033 00000 n + 0000259004 00000 n + 0000974660 00000 n + 0000732561 00000 n + 0000731690 00000 n + 0000731876 00000 n + 0000748216 00000 n + 0000723993 00000 n + 0000262955 00000 n + 0000263109 00000 n + 0000263262 00000 n + 0000263417 00000 n + 0000263571 00000 n + 0000263731 00000 n + 0000261501 00000 n + 0000267874 00000 n + 0000263891 00000 n + 0000363801 00000 n + 0000363956 00000 n + 0000364110 00000 n + 0000264326 00000 n + 0000261306 00000 n + 0000259212 00000 n + 0000264045 00000 n + 0000264212 00000 n + 0000262607 00000 n + 0000262834 00000 n + 0000262881 00000 n + 0000741119 00000 n + 0000364319 00000 n + 0000365571 00000 n + 0000267711 00000 n + 0000264465 00000 n + 0000364266 00000 n + 0000364433 00000 n + 0000364490 00000 n + 0000364547 00000 n + 0000364604 00000 n + 0000364660 00000 n + 0000364717 00000 n + 0000364774 00000 n + 0000364831 00000 n + 0000364888 00000 n + 0000364945 00000 n + 0000365002 00000 n + 0000365059 00000 n + 0000365116 00000 n + 0000365173 00000 n + 0000365230 00000 n + 0000365287 00000 n + 0000365344 00000 n + 0000365401 00000 n + 0000365458 00000 n + 0000365515 00000 n + 0000345317 00000 n + 0000370542 00000 n + 0000367818 00000 n + 0000365718 00000 n + 0000367930 00000 n + 0000367983 00000 n + 0000368040 00000 n + 0000368097 00000 n + 0000368154 00000 n + 0000368211 00000 n + 0000368268 00000 n + 0000368325 00000 n + 0000368382 00000 n + 0000368439 00000 n + 0000368496 00000 n + 0000368551 00000 n + 0000368608 00000 n + 0000368665 00000 n + 0000368721 00000 n + 0000368778 00000 n + 0000368835 00000 n + 0000368891 00000 n + 0000368948 00000 n + 0000369005 00000 n + 0000369061 00000 n + 0000369118 00000 n + 0000369175 00000 n + 0000369231 00000 n + 0000369288 00000 n + 0000369345 00000 n + 0000369402 00000 n + 0000369459 00000 n + 0000369516 00000 n + 0000369573 00000 n + 0000369630 00000 n + 0000369687 00000 n + 0000369744 00000 n + 0000369801 00000 n + 0000369858 00000 n + 0000369915 00000 n + 0000369972 00000 n + 0000370029 00000 n + 0000370086 00000 n + 0000370143 00000 n + 0000370200 00000 n + 0000370257 00000 n + 0000370314 00000 n + 0000370371 00000 n + 0000370428 00000 n + 0000370485 00000 n + 0000375940 00000 n + 0000373196 00000 n + 0000370640 00000 n + 0000373308 00000 n + 0000373361 00000 n + 0000373418 00000 n + 0000373475 00000 n + 0000373532 00000 n + 0000373589 00000 n + 0000373646 00000 n + 0000373703 00000 n + 0000373760 00000 n + 0000373817 00000 n + 0000373874 00000 n + 0000373929 00000 n + 0000373986 00000 n + 0000374043 00000 n + 0000374099 00000 n + 0000374156 00000 n + 0000374213 00000 n + 0000374269 00000 n + 0000374326 00000 n + 0000374383 00000 n + 0000374439 00000 n + 0000374496 00000 n + 0000374553 00000 n + 0000374609 00000 n + 0000374666 00000 n + 0000374723 00000 n + 0000374780 00000 n + 0000374838 00000 n + 0000374896 00000 n + 0000374954 00000 n + 0000375012 00000 n + 0000375070 00000 n + 0000375128 00000 n + 0000375186 00000 n + 0000375244 00000 n + 0000375302 00000 n + 0000375360 00000 n + 0000375418 00000 n + 0000375476 00000 n + 0000375534 00000 n + 0000375592 00000 n + 0000375650 00000 n + 0000375708 00000 n + 0000375766 00000 n + 0000375824 00000 n + 0000375882 00000 n + 0000379116 00000 n + 0000379269 00000 n + 0000379423 00000 n + 0000379581 00000 n + 0000379738 00000 n + 0000379891 00000 n + 0000384942 00000 n + 0000381987 00000 n + 0000378935 00000 n + 0000376038 00000 n + 0000380046 00000 n + 0000380101 00000 n + 0000380160 00000 n + 0000380219 00000 n + 0000380278 00000 n + 0000380337 00000 n + 0000380396 00000 n + 0000380455 00000 n + 0000380514 00000 n + 0000380573 00000 n + 0000380630 00000 n + 0000380689 00000 n + 0000380748 00000 n + 0000380806 00000 n + 0000380865 00000 n + 0000380924 00000 n + 0000380982 00000 n + 0000381041 00000 n + 0000381100 00000 n + 0000381158 00000 n + 0000381217 00000 n + 0000381276 00000 n + 0000381334 00000 n + 0000381393 00000 n + 0000381452 00000 n + 0000381511 00000 n + 0000381570 00000 n + 0000381629 00000 n + 0000381688 00000 n + 0000381805 00000 n + 0000381864 00000 n + 0000381923 00000 n + 0000385839 00000 n + 0000741181 00000 n + 0000385098 00000 n + 0000385257 00000 n + 0000385416 00000 n + 0000385570 00000 n + 0000389485 00000 n + 0000386517 00000 n + 0000384754 00000 n + 0000382151 00000 n + 0000385725 00000 n + 0000385780 00000 n + 0000385898 00000 n + 0000385962 00000 n + 0000386021 00000 n + 0000386080 00000 n + 0000386144 00000 n + 0000386208 00000 n + 0000386266 00000 n + 0000386325 00000 n + 0000386389 00000 n + 0000386453 00000 n + 0000973172 00000 n + 0000974779 00000 n + 0000414869 00000 n + 0000413047 00000 n + 0000415028 00000 n + 0000415731 00000 n + 0000389324 00000 n + 0000386669 00000 n + 0000415186 00000 n + 0000415241 00000 n + 0000415358 00000 n + 0000415417 00000 n + 0000415476 00000 n + 0000415540 00000 n + 0000415603 00000 n + 0000415667 00000 n + 0000410342 00000 n + 0000414518 00000 n + 0000414746 00000 n + 0000414794 00000 n + 0000420081 00000 n + 0000420240 00000 n + 0000420401 00000 n + 0000420732 00000 n + 0000419926 00000 n + 0000415907 00000 n + 0000420556 00000 n + 0000420669 00000 n + 0000491769 00000 n + 0000422917 00000 n + 0000491236 00000 n + 0000491392 00000 n + 0000491553 00000 n + 0000490048 00000 n + 0000492184 00000 n + 0000422747 00000 n + 0000420857 00000 n + 0000491714 00000 n + 0000491828 00000 n + 0000492003 00000 n + 0000492062 00000 n + 0000492121 00000 n + 0000482322 00000 n + 0000490885 00000 n + 0000491113 00000 n + 0000491161 00000 n + 0000495029 00000 n + 0000494521 00000 n + 0000499354 00000 n + 0000495088 00000 n + 0000494384 00000 n + 0000492349 00000 n + 0000494682 00000 n + 0000494911 00000 n + 0000494970 00000 n + 0000499509 00000 n + 0000504474 00000 n + 0000504632 00000 n + 0000500723 00000 n + 0000499193 00000 n + 0000495226 00000 n + 0000499667 00000 n + 0000973317 00000 n + 0000973025 00000 n + 0000499722 00000 n + 0000499781 00000 n + 0000499840 00000 n + 0000499898 00000 n + 0000499957 00000 n + 0000500016 00000 n + 0000500075 00000 n + 0000500134 00000 n + 0000500193 00000 n + 0000500252 00000 n + 0000500311 00000 n + 0000500370 00000 n + 0000500429 00000 n + 0000500488 00000 n + 0000500547 00000 n + 0000500606 00000 n + 0000500665 00000 n + 0000504788 00000 n + 0000506417 00000 n + 0000504319 00000 n + 0000500925 00000 n + 0000504945 00000 n + 0000505000 00000 n + 0000505059 00000 n + 0000505118 00000 n + 0000505177 00000 n + 0000505236 00000 n + 0000505295 00000 n + 0000505354 00000 n + 0000505413 00000 n + 0000505472 00000 n + 0000505531 00000 n + 0000505590 00000 n + 0000505649 00000 n + 0000505708 00000 n + 0000505767 00000 n + 0000505826 00000 n + 0000505885 00000 n + 0000505944 00000 n + 0000506003 00000 n + 0000506119 00000 n + 0000506178 00000 n + 0000506237 00000 n + 0000506296 00000 n + 0000506354 00000 n + 0000974904 00000 n + 0000510762 00000 n + 0000510920 00000 n + 0000511075 00000 n + 0000509726 00000 n + 0000516089 00000 n + 0000511701 00000 n + 0000509571 00000 n + 0000506555 00000 n + 0000511236 00000 n + 0000511291 00000 n + 0000511350 00000 n + 0000511409 00000 n + 0000511467 00000 n + 0000511642 00000 n + 0000510411 00000 n + 0000510639 00000 n + 0000510687 00000 n + 0000516250 00000 n + 0000516405 00000 n + 0000515142 00000 n + 0000516560 00000 n + 0000520203 00000 n + 0000520364 00000 n + 0000517193 00000 n + 0000514978 00000 n + 0000511856 00000 n + 0000516718 00000 n + 0000516831 00000 n + 0000516890 00000 n + 0000516949 00000 n + 0000517066 00000 n + 0000517130 00000 n + 0000515738 00000 n + 0000515966 00000 n + 0000516014 00000 n + 0000520914 00000 n + 0000520520 00000 n + 0000522566 00000 n + 0000520048 00000 n + 0000517349 00000 n + 0000520680 00000 n + 0000520735 00000 n + 0000520793 00000 n + 0000520851 00000 n + 0000520972 00000 n + 0000521031 00000 n + 0000521090 00000 n + 0000521148 00000 n + 0000521207 00000 n + 0000521266 00000 n + 0000521324 00000 n + 0000521383 00000 n + 0000521442 00000 n + 0000521500 00000 n + 0000521559 00000 n + 0000521618 00000 n + 0000521677 00000 n + 0000521736 00000 n + 0000521795 00000 n + 0000521854 00000 n + 0000521913 00000 n + 0000521972 00000 n + 0000522031 00000 n + 0000522090 00000 n + 0000522149 00000 n + 0000522208 00000 n + 0000522267 00000 n + 0000522326 00000 n + 0000522385 00000 n + 0000522444 00000 n + 0000522503 00000 n + 0000526449 00000 n + 0000526082 00000 n + 0000526239 00000 n + 0000527159 00000 n + 0000525936 00000 n + 0000522691 00000 n + 0000526394 00000 n + 0000526566 00000 n + 0000526625 00000 n + 0000526683 00000 n + 0000526742 00000 n + 0000526801 00000 n + 0000526860 00000 n + 0000526919 00000 n + 0000526978 00000 n + 0000527037 00000 n + 0000527096 00000 n + 0000533818 00000 n + 0000531550 00000 n + 0000530439 00000 n + 0000527297 00000 n + 0000530555 00000 n + 0000530610 00000 n + 0000530669 00000 n + 0000530727 00000 n + 0000530786 00000 n + 0000530845 00000 n + 0000530904 00000 n + 0000530963 00000 n + 0000531022 00000 n + 0000531081 00000 n + 0000531140 00000 n + 0000531199 00000 n + 0000531258 00000 n + 0000531316 00000 n + 0000531374 00000 n + 0000531433 00000 n + 0000534144 00000 n + 0000533681 00000 n + 0000531662 00000 n + 0000533973 00000 n + 0000975029 00000 n + 0000537490 00000 n + 0000537641 00000 n + 0000537792 00000 n + 0000537949 00000 n + 0000538107 00000 n + 0000538262 00000 n + 0000538417 00000 n + 0000538572 00000 n + 0000539371 00000 n + 0000537290 00000 n + 0000534256 00000 n + 0000538730 00000 n + 0000538959 00000 n + 0000539018 00000 n + 0000539077 00000 n + 0000539136 00000 n + 0000539195 00000 n + 0000539254 00000 n + 0000539313 00000 n + 0000732310 00000 n + 0000740932 00000 n + 0000741306 00000 n + 0000542773 00000 n + 0000542931 00000 n + 0000543092 00000 n + 0000543247 00000 n + 0000543403 00000 n + 0000543561 00000 n + 0000543721 00000 n + 0000543881 00000 n + 0000547712 00000 n + 0000547872 00000 n + 0000544743 00000 n + 0000542573 00000 n + 0000539496 00000 n + 0000544039 00000 n + 0000544094 00000 n + 0000544153 00000 n + 0000544212 00000 n + 0000544271 00000 n + 0000544330 00000 n + 0000544389 00000 n + 0000544448 00000 n + 0000544680 00000 n + 0000797512 00000 n + 0000807175 00000 n + 0000804987 00000 n + 0000801743 00000 n + 0000832380 00000 n + 0000549083 00000 n + 0000547566 00000 n + 0000544868 00000 n + 0000548027 00000 n + 0000548140 00000 n + 0000548199 00000 n + 0000548258 00000 n + 0000548316 00000 n + 0000548375 00000 n + 0000548434 00000 n + 0000548493 00000 n + 0000548552 00000 n + 0000548611 00000 n + 0000548670 00000 n + 0000548729 00000 n + 0000548788 00000 n + 0000548847 00000 n + 0000548906 00000 n + 0000548965 00000 n + 0000549024 00000 n + 0000553274 00000 n + 0000553431 00000 n + 0000554173 00000 n + 0000553128 00000 n + 0000549195 00000 n + 0000553589 00000 n + 0000553702 00000 n + 0000553761 00000 n + 0000553820 00000 n + 0000553879 00000 n + 0000553938 00000 n + 0000553997 00000 n + 0000554056 00000 n + 0000554115 00000 n + 0000558729 00000 n + 0000559850 00000 n + 0000557324 00000 n + 0000554298 00000 n + 0000557440 00000 n + 0000557495 00000 n + 0000557554 00000 n + 0000557613 00000 n + 0000557672 00000 n + 0000557731 00000 n + 0000557790 00000 n + 0000557849 00000 n + 0000557908 00000 n + 0000557967 00000 n + 0000558026 00000 n + 0000558083 00000 n + 0000558142 00000 n + 0000558201 00000 n + 0000558259 00000 n + 0000558318 00000 n + 0000558377 00000 n + 0000558435 00000 n + 0000558494 00000 n + 0000558553 00000 n + 0000558611 00000 n + 0000558670 00000 n + 0000558788 00000 n + 0000558847 00000 n + 0000558906 00000 n + 0000558965 00000 n + 0000559024 00000 n + 0000559083 00000 n + 0000559142 00000 n + 0000559201 00000 n + 0000559260 00000 n + 0000559319 00000 n + 0000559378 00000 n + 0000559437 00000 n + 0000559496 00000 n + 0000559555 00000 n + 0000559614 00000 n + 0000559673 00000 n + 0000559732 00000 n + 0000559791 00000 n + 0000563673 00000 n + 0000563831 00000 n + 0000563992 00000 n + 0000564151 00000 n + 0000564307 00000 n + 0000565107 00000 n + 0000563500 00000 n + 0000559949 00000 n + 0000564463 00000 n + 0000564518 00000 n + 0000564577 00000 n + 0000564636 00000 n + 0000564695 00000 n + 0000564754 00000 n + 0000564813 00000 n + 0000564872 00000 n + 0000564931 00000 n + 0000564990 00000 n + 0000975154 00000 n + 0000723186 00000 n + 0000569132 00000 n + 0000569287 00000 n + 0000569442 00000 n + 0000573334 00000 n + 0000573488 00000 n + 0000573642 00000 n + 0000573797 00000 n + 0000569775 00000 n + 0000568977 00000 n + 0000565232 00000 n + 0000569600 00000 n + 0000569712 00000 n + 0000760199 00000 n + 0000573952 00000 n + 0000574112 00000 n + 0000574272 00000 n + 0000574430 00000 n + 0000001472 00000 f + 0000000000 00000 f + 0000574588 00000 n + 0000574741 00000 n + 0000575890 00000 n + 0000573116 00000 n + 0000569887 00000 n + 0000574894 00000 n + 0000575065 00000 n + 0000575124 00000 n + 0000575183 00000 n + 0000575242 00000 n + 0000575301 00000 n + 0000575360 00000 n + 0000575419 00000 n + 0000575478 00000 n + 0000575537 00000 n + 0000575596 00000 n + 0000575655 00000 n + 0000575714 00000 n + 0000575773 00000 n + 0000575832 00000 n + 0000732435 00000 n + 0000740807 00000 n + 0000723868 00000 n + 0000579562 00000 n + 0000579714 00000 n + 0000579866 00000 n + 0000580021 00000 n + 0000580176 00000 n + 0000580337 00000 n + 0000580492 00000 n + 0000580647 00000 n + 0000583725 00000 n + 0000581507 00000 n + 0000579347 00000 n + 0000576015 00000 n + 0000580805 00000 n + 0000580860 00000 n + 0000580919 00000 n + 0000580978 00000 n + 0000581037 00000 n + 0000581096 00000 n + 0000581155 00000 n + 0000581214 00000 n + 0000581273 00000 n + 0000581332 00000 n + 0000581391 00000 n + 0000581448 00000 n + 0000740682 00000 n + 0000732809 00000 n + 0000732247 00000 n + 0000712436 00000 n + 0000711598 00000 n + 0000711753 00000 n + 0000711908 00000 n + 0000712064 00000 n + 0000712221 00000 n + 0000712611 00000 n + 0000583537 00000 n + 0000581619 00000 n + 0000712381 00000 n + 0000671368 00000 n + 0000714819 00000 n + 0000714648 00000 n + 0000712748 00000 n + 0000714764 00000 n + 0000717411 00000 n + 0000717859 00000 n + 0000718042 00000 n + 0000718480 00000 n + 0000718650 00000 n + 0000718834 00000 n + 0000719006 00000 n + 0000719182 00000 n + 0000719349 00000 n + 0000719782 00000 n + 0000720127 00000 n + 0000720511 00000 n + 0000720699 00000 n + 0000721097 00000 n + 0000721548 00000 n + 0000721719 00000 n + 0000722184 00000 n + 0000722656 00000 n + 0000727383 00000 n + 0000724054 00000 n + 0000717040 00000 n + 0000714905 00000 n + 0000722825 00000 n + 0000717636 00000 n + 0000718262 00000 n + 0000723249 00000 n + 0000719565 00000 n + 0000719955 00000 n + 0000720319 00000 n + 0000720898 00000 n + 0000721323 00000 n + 0000723806 00000 n + 0000721952 00000 n + 0000722420 00000 n + 0000975279 00000 n + 0000727561 00000 n + 0000728036 00000 n + 0000728209 00000 n + 0000728382 00000 n + 0000728551 00000 n + 0000728744 00000 n + 0000729188 00000 n + 0000729580 00000 n + 0000729982 00000 n + 0000730380 00000 n + 0000730766 00000 n + 0000731155 00000 n + 0000736165 00000 n + 0000736367 00000 n + 0000732872 00000 n + 0000727066 00000 n + 0000724166 00000 n + 0000731635 00000 n + 0000727799 00000 n + 0000728966 00000 n + 0000729384 00000 n + 0000729782 00000 n + 0000730181 00000 n + 0000730574 00000 n + 0000732498 00000 n + 0000730961 00000 n + 0000731395 00000 n + 0000736584 00000 n + 0000736769 00000 n + 0000737170 00000 n + 0000737372 00000 n + 0000737753 00000 n + 0000737944 00000 n + 0000738167 00000 n + 0000738349 00000 n + 0000738707 00000 n + 0000739106 00000 n + 0000739618 00000 n + 0000739801 00000 n + 0000743539 00000 n + 0000741431 00000 n + 0000735857 00000 n + 0000732971 00000 n + 0000740255 00000 n + 0000740310 00000 n + 0000736970 00000 n + 0000737565 00000 n + 0000738528 00000 n + 0000738906 00000 n + 0000739363 00000 n + 0000740029 00000 n + 0000745127 00000 n + 0000745545 00000 n + 0000745905 00000 n + 0000746327 00000 n + 0000746717 00000 n + 0000747068 00000 n + 0000748340 00000 n + 0000743258 00000 n + 0000741530 00000 n + 0000747791 00000 n + 0000743937 00000 n + 0000744334 00000 n + 0000744731 00000 n + 0000745337 00000 n + 0000745726 00000 n + 0000746116 00000 n + 0000746522 00000 n + 0000746893 00000 n + 0000747310 00000 n + 0000747551 00000 n + 0000750467 00000 n + 0000749770 00000 n + 0000748439 00000 n + 0000749886 00000 n + 0000750057 00000 n + 0000750116 00000 n + 0000750175 00000 n + 0000750292 00000 n + 0000750349 00000 n + 0000750408 00000 n + 0000755851 00000 n + 0000756012 00000 n + 0000752533 00000 n + 0000752070 00000 n + 0000750592 00000 n + 0000752186 00000 n + 0000752241 00000 n + 0000752298 00000 n + 0000752356 00000 n + 0000752415 00000 n + 0000752474 00000 n + 0000756286 00000 n + 0000755705 00000 n + 0000752645 00000 n + 0000756173 00000 n + 0000973462 00000 n + 0000975404 00000 n + 0000761787 00000 n + 0000759912 00000 n + 0000756438 00000 n + 0000760028 00000 n + 0000760258 00000 n + 0000760317 00000 n + 0000760376 00000 n + 0000760434 00000 n + 0000760493 00000 n + 0000760552 00000 n + 0000760611 00000 n + 0000760669 00000 n + 0000760728 00000 n + 0000760786 00000 n + 0000760845 00000 n + 0000760904 00000 n + 0000760962 00000 n + 0000761021 00000 n + 0000761080 00000 n + 0000761139 00000 n + 0000761198 00000 n + 0000761257 00000 n + 0000761316 00000 n + 0000761375 00000 n + 0000761434 00000 n + 0000761493 00000 n + 0000761552 00000 n + 0000761611 00000 n + 0000761670 00000 n + 0000761729 00000 n + 0000767312 00000 n + 0000764492 00000 n + 0000761912 00000 n + 0000764608 00000 n + 0000764663 00000 n + 0000764722 00000 n + 0000764781 00000 n + 0000764840 00000 n + 0000764899 00000 n + 0000764958 00000 n + 0000765017 00000 n + 0000765076 00000 n + 0000765135 00000 n + 0000765194 00000 n + 0000765251 00000 n + 0000765310 00000 n + 0000765369 00000 n + 0000765427 00000 n + 0000765486 00000 n + 0000765545 00000 n + 0000765603 00000 n + 0000765662 00000 n + 0000765721 00000 n + 0000765779 00000 n + 0000765838 00000 n + 0000765897 00000 n + 0000765955 00000 n + 0000766014 00000 n + 0000766073 00000 n + 0000766132 00000 n + 0000766191 00000 n + 0000766250 00000 n + 0000766309 00000 n + 0000766368 00000 n + 0000766427 00000 n + 0000766486 00000 n + 0000766545 00000 n + 0000766604 00000 n + 0000766663 00000 n + 0000766722 00000 n + 0000766781 00000 n + 0000766840 00000 n + 0000766899 00000 n + 0000766958 00000 n + 0000767017 00000 n + 0000767076 00000 n + 0000767135 00000 n + 0000767194 00000 n + 0000767253 00000 n + 0000773477 00000 n + 0000771010 00000 n + 0000767411 00000 n + 0000771126 00000 n + 0000771181 00000 n + 0000771240 00000 n + 0000771299 00000 n + 0000771358 00000 n + 0000771417 00000 n + 0000771476 00000 n + 0000771535 00000 n + 0000771594 00000 n + 0000771653 00000 n + 0000771712 00000 n + 0000771769 00000 n + 0000771828 00000 n + 0000771887 00000 n + 0000771946 00000 n + 0000772004 00000 n + 0000772063 00000 n + 0000772122 00000 n + 0000772180 00000 n + 0000772239 00000 n + 0000772298 00000 n + 0000772356 00000 n + 0000772415 00000 n + 0000772474 00000 n + 0000772533 00000 n + 0000772592 00000 n + 0000772651 00000 n + 0000772710 00000 n + 0000772769 00000 n + 0000772828 00000 n + 0000772887 00000 n + 0000772946 00000 n + 0000773005 00000 n + 0000773064 00000 n + 0000773123 00000 n + 0000773182 00000 n + 0000773241 00000 n + 0000773300 00000 n + 0000773359 00000 n + 0000773418 00000 n + 0000777202 00000 n + 0000775666 00000 n + 0000773576 00000 n + 0000775797 00000 n + 0000775852 00000 n + 0000775911 00000 n + 0000775970 00000 n + 0000776029 00000 n + 0000776088 00000 n + 0000776147 00000 n + 0000776206 00000 n + 0000776265 00000 n + 0000776324 00000 n + 0000776383 00000 n + 0000776440 00000 n + 0000776499 00000 n + 0000776558 00000 n + 0000776616 00000 n + 0000776675 00000 n + 0000776734 00000 n + 0000776792 00000 n + 0000776851 00000 n + 0000776910 00000 n + 0000776968 00000 n + 0000777027 00000 n + 0000781040 00000 n + 0000778793 00000 n + 0000777351 00000 n + 0000778909 00000 n + 0000778964 00000 n + 0000779027 00000 n + 0000779090 00000 n + 0000779153 00000 n + 0000779212 00000 n + 0000779275 00000 n + 0000779338 00000 n + 0000779400 00000 n + 0000779463 00000 n + 0000779526 00000 n + 0000779589 00000 n + 0000779652 00000 n + 0000779715 00000 n + 0000779778 00000 n + 0000779841 00000 n + 0000779904 00000 n + 0000779967 00000 n + 0000780030 00000 n + 0000780093 00000 n + 0000780156 00000 n + 0000780219 00000 n + 0000780282 00000 n + 0000780345 00000 n + 0000780408 00000 n + 0000780471 00000 n + 0000780534 00000 n + 0000780597 00000 n + 0000780661 00000 n + 0000780725 00000 n + 0000780789 00000 n + 0000780849 00000 n + 0000780913 00000 n + 0000780977 00000 n + 0000784042 00000 n + 0000782431 00000 n + 0000781152 00000 n + 0000782547 00000 n + 0000782660 00000 n + 0000782723 00000 n + 0000782785 00000 n + 0000782848 00000 n + 0000782911 00000 n + 0000782974 00000 n + 0000783037 00000 n + 0000783100 00000 n + 0000783163 00000 n + 0000783226 00000 n + 0000783289 00000 n + 0000783352 00000 n + 0000783415 00000 n + 0000783478 00000 n + 0000783541 00000 n + 0000783604 00000 n + 0000783667 00000 n + 0000783730 00000 n + 0000783793 00000 n + 0000783857 00000 n + 0000783920 00000 n + 0000975529 00000 n + 0000787010 00000 n + 0000785394 00000 n + 0000784154 00000 n + 0000785510 00000 n + 0000785565 00000 n + 0000785628 00000 n + 0000785691 00000 n + 0000785754 00000 n + 0000785813 00000 n + 0000785876 00000 n + 0000785939 00000 n + 0000786001 00000 n + 0000786064 00000 n + 0000786127 00000 n + 0000786190 00000 n + 0000786253 00000 n + 0000786316 00000 n + 0000786379 00000 n + 0000786442 00000 n + 0000786505 00000 n + 0000786568 00000 n + 0000786631 00000 n + 0000786694 00000 n + 0000786758 00000 n + 0000786822 00000 n + 0000786886 00000 n + 0000786946 00000 n + 0000790189 00000 n + 0000788450 00000 n + 0000787122 00000 n + 0000788566 00000 n + 0000788679 00000 n + 0000788742 00000 n + 0000788804 00000 n + 0000788867 00000 n + 0000788930 00000 n + 0000788993 00000 n + 0000789056 00000 n + 0000789119 00000 n + 0000789182 00000 n + 0000789245 00000 n + 0000789308 00000 n + 0000789371 00000 n + 0000789434 00000 n + 0000789497 00000 n + 0000789560 00000 n + 0000789623 00000 n + 0000789686 00000 n + 0000789749 00000 n + 0000789812 00000 n + 0000789876 00000 n + 0000789939 00000 n + 0000790003 00000 n + 0000790067 00000 n + 0000793155 00000 n + 0000791539 00000 n + 0000790301 00000 n + 0000791655 00000 n + 0000791710 00000 n + 0000791773 00000 n + 0000791836 00000 n + 0000791899 00000 n + 0000791958 00000 n + 0000792021 00000 n + 0000792084 00000 n + 0000792146 00000 n + 0000792209 00000 n + 0000792272 00000 n + 0000792335 00000 n + 0000792398 00000 n + 0000792461 00000 n + 0000792524 00000 n + 0000792587 00000 n + 0000792650 00000 n + 0000792713 00000 n + 0000792776 00000 n + 0000792839 00000 n + 0000792903 00000 n + 0000792967 00000 n + 0000793031 00000 n + 0000793091 00000 n + 0000797924 00000 n + 0000795343 00000 n + 0000793267 00000 n + 0000795459 00000 n + 0000795572 00000 n + 0000795635 00000 n + 0000795698 00000 n + 0000795761 00000 n + 0000795824 00000 n + 0000795887 00000 n + 0000795950 00000 n + 0000796013 00000 n + 0000796076 00000 n + 0000796139 00000 n + 0000796202 00000 n + 0000796265 00000 n + 0000796328 00000 n + 0000796391 00000 n + 0000796453 00000 n + 0000796516 00000 n + 0000796579 00000 n + 0000796640 00000 n + 0000796703 00000 n + 0000796766 00000 n + 0000796828 00000 n + 0000796891 00000 n + 0000796954 00000 n + 0000797016 00000 n + 0000797079 00000 n + 0000797142 00000 n + 0000797204 00000 n + 0000797268 00000 n + 0000797332 00000 n + 0000797571 00000 n + 0000797630 00000 n + 0000797689 00000 n + 0000797748 00000 n + 0000797807 00000 n + 0000797866 00000 n + 0000803038 00000 n + 0000800280 00000 n + 0000798036 00000 n + 0000800396 00000 n + 0000800451 00000 n + 0000800510 00000 n + 0000800569 00000 n + 0000800628 00000 n + 0000800687 00000 n + 0000800746 00000 n + 0000800805 00000 n + 0000800864 00000 n + 0000800923 00000 n + 0000800982 00000 n + 0000801039 00000 n + 0000801098 00000 n + 0000801157 00000 n + 0000801215 00000 n + 0000801274 00000 n + 0000801333 00000 n + 0000801391 00000 n + 0000801450 00000 n + 0000801509 00000 n + 0000801567 00000 n + 0000801626 00000 n + 0000801685 00000 n + 0000801802 00000 n + 0000801861 00000 n + 0000801919 00000 n + 0000801978 00000 n + 0000802037 00000 n + 0000802095 00000 n + 0000802154 00000 n + 0000802213 00000 n + 0000802272 00000 n + 0000802331 00000 n + 0000802390 00000 n + 0000802449 00000 n + 0000802508 00000 n + 0000802567 00000 n + 0000802626 00000 n + 0000802685 00000 n + 0000802744 00000 n + 0000802803 00000 n + 0000802862 00000 n + 0000802921 00000 n + 0000802980 00000 n + 0000805931 00000 n + 0000804580 00000 n + 0000803137 00000 n + 0000804696 00000 n + 0000804751 00000 n + 0000804810 00000 n + 0000804869 00000 n + 0000804928 00000 n + 0000805046 00000 n + 0000805105 00000 n + 0000805164 00000 n + 0000805223 00000 n + 0000805282 00000 n + 0000805341 00000 n + 0000805400 00000 n + 0000805459 00000 n + 0000805518 00000 n + 0000805577 00000 n + 0000805636 00000 n + 0000805695 00000 n + 0000805754 00000 n + 0000805813 00000 n + 0000805872 00000 n + 0000975654 00000 n + 0000808469 00000 n + 0000807004 00000 n + 0000806030 00000 n + 0000807120 00000 n + 0000807234 00000 n + 0000807293 00000 n + 0000807352 00000 n + 0000807411 00000 n + 0000807470 00000 n + 0000807529 00000 n + 0000807588 00000 n + 0000807647 00000 n + 0000807706 00000 n + 0000807764 00000 n + 0000807823 00000 n + 0000807882 00000 n + 0000807940 00000 n + 0000807999 00000 n + 0000808058 00000 n + 0000808116 00000 n + 0000808175 00000 n + 0000808234 00000 n + 0000808292 00000 n + 0000808351 00000 n + 0000808410 00000 n + 0000811823 00000 n + 0000829773 00000 n + 0000811590 00000 n + 0000810848 00000 n + 0000810554 00000 n + 0000808582 00000 n + 0000810670 00000 n + 0000810785 00000 n + 0000830028 00000 n + 0000811474 00000 n + 0000810960 00000 n + 0000829908 00000 n + 0000829963 00000 n + 0000829836 00000 n + 0000813461 00000 n + 0000813622 00000 n + 0000813957 00000 n + 0000814158 00000 n + 0000814643 00000 n + 0000829749 00000 n + 0000834793 00000 n + 0000832135 00000 n + 0000830156 00000 n + 0000832267 00000 n + 0000832439 00000 n + 0000832498 00000 n + 0000832556 00000 n + 0000832615 00000 n + 0000832674 00000 n + 0000832731 00000 n + 0000832790 00000 n + 0000832849 00000 n + 0000832907 00000 n + 0000832966 00000 n + 0000833025 00000 n + 0000833083 00000 n + 0000833142 00000 n + 0000833201 00000 n + 0000833260 00000 n + 0000833319 00000 n + 0000833378 00000 n + 0000833437 00000 n + 0000833496 00000 n + 0000833555 00000 n + 0000833614 00000 n + 0000833673 00000 n + 0000833732 00000 n + 0000833791 00000 n + 0000833850 00000 n + 0000833909 00000 n + 0000833968 00000 n + 0000834027 00000 n + 0000834086 00000 n + 0000834145 00000 n + 0000834204 00000 n + 0000834263 00000 n + 0000834322 00000 n + 0000834381 00000 n + 0000834440 00000 n + 0000834499 00000 n + 0000834558 00000 n + 0000834617 00000 n + 0000834676 00000 n + 0000834735 00000 n + 0000839298 00000 n + 0000836775 00000 n + 0000834905 00000 n + 0000836891 00000 n + 0000836946 00000 n + 0000837005 00000 n + 0000837064 00000 n + 0000837123 00000 n + 0000837182 00000 n + 0000837241 00000 n + 0000837300 00000 n + 0000837359 00000 n + 0000837418 00000 n + 0000837477 00000 n + 0000837534 00000 n + 0000837593 00000 n + 0000837652 00000 n + 0000837710 00000 n + 0000837769 00000 n + 0000837828 00000 n + 0000837886 00000 n + 0000838003 00000 n + 0000838062 00000 n + 0000838121 00000 n + 0000838179 00000 n + 0000838238 00000 n + 0000838297 00000 n + 0000838355 00000 n + 0000838414 00000 n + 0000838473 00000 n + 0000838532 00000 n + 0000838591 00000 n + 0000838650 00000 n + 0000838709 00000 n + 0000838768 00000 n + 0000838827 00000 n + 0000838886 00000 n + 0000838945 00000 n + 0000839004 00000 n + 0000839063 00000 n + 0000839122 00000 n + 0000839181 00000 n + 0000839240 00000 n + 0000844278 00000 n + 0000841694 00000 n + 0000839410 00000 n + 0000841810 00000 n + 0000841865 00000 n + 0000841924 00000 n + 0000841983 00000 n + 0000842042 00000 n + 0000842101 00000 n + 0000842160 00000 n + 0000842219 00000 n + 0000842278 00000 n + 0000842337 00000 n + 0000842394 00000 n + 0000842453 00000 n + 0000842511 00000 n + 0000842570 00000 n + 0000842629 00000 n + 0000842688 00000 n + 0000842747 00000 n + 0000842805 00000 n + 0000842864 00000 n + 0000842923 00000 n + 0000842981 00000 n + 0000843040 00000 n + 0000843099 00000 n + 0000843158 00000 n + 0000843217 00000 n + 0000843276 00000 n + 0000843335 00000 n + 0000843394 00000 n + 0000843453 00000 n + 0000843512 00000 n + 0000843571 00000 n + 0000843630 00000 n + 0000843689 00000 n + 0000843748 00000 n + 0000843807 00000 n + 0000843866 00000 n + 0000843925 00000 n + 0000843984 00000 n + 0000844043 00000 n + 0000844102 00000 n + 0000844161 00000 n + 0000844220 00000 n + 0000975779 00000 n + 0000846511 00000 n + 0000845458 00000 n + 0000844377 00000 n + 0000845574 00000 n + 0000845629 00000 n + 0000845688 00000 n + 0000845747 00000 n + 0000845806 00000 n + 0000845865 00000 n + 0000845924 00000 n + 0000845983 00000 n + 0000846042 00000 n + 0000846101 00000 n + 0000846160 00000 n + 0000846217 00000 n + 0000846276 00000 n + 0000846335 00000 n + 0000846393 00000 n + 0000846452 00000 n + 0000846610 00000 n + 0000846636 00000 n + 0000846751 00000 n + 0000846779 00000 n + 0000971588 00000 n + 0000846817 00000 n + 0000847006 00000 n + 0000847524 00000 n + 0000847848 00000 n + 0000848240 00000 n + 0000848776 00000 n + 0000849148 00000 n + 0000849731 00000 n + 0000850208 00000 n + 0000850600 00000 n + 0000851165 00000 n + 0000867609 00000 n + 0000868059 00000 n + 0000874541 00000 n + 0000874798 00000 n + 0000894412 00000 n + 0000894985 00000 n + 0000913154 00000 n + 0000913663 00000 n + 0000918425 00000 n + 0000918689 00000 n + 0000920716 00000 n + 0000920953 00000 n + 0000923175 00000 n + 0000923400 00000 n + 0000925188 00000 n + 0000925422 00000 n + 0000927259 00000 n + 0000927488 00000 n + 0000929156 00000 n + 0000929378 00000 n + 0000930926 00000 n + 0000931180 00000 n + 0000946019 00000 n + 0000946578 00000 n + 0000955750 00000 n + 0000956132 00000 n + 0000970978 00000 n + 0000975868 00000 n + 0000975989 00000 n + 0000976115 00000 n + 0000976204 00000 n + 0000976286 00000 n + 0000983845 00000 n + 0000984049 00000 n + 0000984266 00000 n + 0000984477 00000 n + 0000984680 00000 n + 0000984854 00000 n + 0000985028 00000 n + 0000985205 00000 n + 0000985380 00000 n + 0000985557 00000 n + 0000985732 00000 n + 0000985909 00000 n + 0000986082 00000 n + 0000986263 00000 n + 0000986455 00000 n + 0000986654 00000 n + 0000986863 00000 n + 0000987082 00000 n + 0000987291 00000 n + 0000987514 00000 n + 0000987735 00000 n + 0000987948 00000 n + 0000988154 00000 n + 0000988349 00000 n + 0000988549 00000 n + 0000988796 00000 n + 0000989050 00000 n + 0000989307 00000 n + 0000989564 00000 n + 0000989821 00000 n + 0000990061 00000 n + 0000990289 00000 n + 0000990522 00000 n + 0000990755 00000 n + 0000991004 00000 n + 0000991245 00000 n + 0000991480 00000 n + 0000991710 00000 n + 0000991940 00000 n + 0000992184 00000 n + 0000992433 00000 n + 0000992674 00000 n + 0000992915 00000 n + 0000993162 00000 n + 0000993409 00000 n + 0000993658 00000 n + 0000993899 00000 n + 0000994143 00000 n + 0000994392 00000 n + 0000994637 00000 n + 0000994875 00000 n + 0000995108 00000 n + 0000995335 00000 n + 0000995572 00000 n + 0000995813 00000 n + 0000996052 00000 n + 0000996287 00000 n + 0000996520 00000 n + 0000996757 00000 n + 0000996996 00000 n + 0000997229 00000 n + 0000997465 00000 n + 0000997706 00000 n + 0000997939 00000 n + 0000998172 00000 n + 0000998411 00000 n + 0000998648 00000 n + 0000998882 00000 n + 0000999125 00000 n + 0000999360 00000 n + 0000999599 00000 n + 0000999842 00000 n + 0001000084 00000 n + 0001000327 00000 n + 0001000568 00000 n + 0001000809 00000 n + 0001001052 00000 n + 0001001291 00000 n + 0001001526 00000 n + 0001001773 00000 n + 0001002030 00000 n + 0001002285 00000 n + 0001002542 00000 n + 0001002796 00000 n + 0001003050 00000 n + 0001003307 00000 n + 0001003555 00000 n + 0001003797 00000 n + 0001004040 00000 n + 0001004282 00000 n + 0001004525 00000 n + 0001004766 00000 n + 0001005007 00000 n + 0001005250 00000 n + 0001005492 00000 n + 0001005735 00000 n + 0001005977 00000 n + 0001006220 00000 n + 0001006462 00000 n + 0001006705 00000 n + 0001006951 00000 n + 0001007200 00000 n + 0001007441 00000 n + 0001007684 00000 n + 0001007928 00000 n + 0001008177 00000 n + 0001008418 00000 n + 0001008659 00000 n + 0001008904 00000 n + 0001009153 00000 n + 0001009401 00000 n + 0001009646 00000 n + 0001009887 00000 n + 0001010132 00000 n + 0001010373 00000 n + 0001010619 00000 n + 0001010868 00000 n + 0001011115 00000 n + 0001011361 00000 n + 0001011602 00000 n + 0001011851 00000 n + 0001012096 00000 n + 0001012337 00000 n + 0001012578 00000 n + 0001012821 00000 n + 0001013070 00000 n + 0001013315 00000 n + 0001013556 00000 n + 0001013811 00000 n + 0001014066 00000 n + 0001014323 00000 n + 0001014579 00000 n + 0001014836 00000 n + 0001015092 00000 n + 0001015341 00000 n + 0001015588 00000 n + 0001015835 00000 n + 0001016084 00000 n + 0001016332 00000 n + 0001016581 00000 n + 0001016829 00000 n + 0001017078 00000 n + 0001017326 00000 n + 0001017575 00000 n + 0001017823 00000 n + 0001018072 00000 n + 0001018319 00000 n + 0001018566 00000 n + 0001018815 00000 n + 0001019063 00000 n + 0001019312 00000 n + 0001019560 00000 n + 0001019809 00000 n + 0001020052 00000 n + 0001020297 00000 n + 0001020546 00000 n + 0001020794 00000 n + 0001021038 00000 n + 0001021282 00000 n + 0001021528 00000 n + 0001021769 00000 n + 0001022016 00000 n + 0001022263 00000 n + 0001022512 00000 n + 0001022760 00000 n + 0001023006 00000 n + 0001023249 00000 n + 0001023498 00000 n + 0001023746 00000 n + 0001023989 00000 n + 0001024234 00000 n + 0001024483 00000 n + 0001024731 00000 n + 0001024980 00000 n + 0001025227 00000 n + 0001025474 00000 n + 0001025723 00000 n + 0001025971 00000 n + 0001026220 00000 n + 0001026464 00000 n + 0001026711 00000 n + 0001026957 00000 n + 0001027198 00000 n + 0001027367 00000 n + 0001027536 00000 n + 0001027710 00000 n + 0001027885 00000 n + 0001028062 00000 n + 0001028237 00000 n + 0001028414 00000 n + 0001028589 00000 n + 0001028766 00000 n + 0001028941 00000 n + 0001029118 00000 n + 0001029289 00000 n + 0001029456 00000 n + 0001029648 00000 n + 0001029853 00000 n + 0001030058 00000 n + 0001030255 00000 n + 0001030458 00000 n + 0001030661 00000 n + 0001030864 00000 n + 0001031078 00000 n + 0001031321 00000 n + 0001031562 00000 n + 0001031799 00000 n + 0001032036 00000 n + 0001032276 00000 n + 0001032519 00000 n + 0001032762 00000 n + 0001033005 00000 n + 0001033248 00000 n + 0001033356 00000 n + 0001033473 00000 n + 0001033588 00000 n + 0001033708 00000 n + 0001033834 00000 n + 0001033966 00000 n + 0001034096 00000 n + 0001034227 00000 n + 0001034360 00000 n + 0001034493 00000 n + 0001034623 00000 n + 0001034753 00000 n + 0001034885 00000 n + 0001035018 00000 n + 0001035151 00000 n + 0001035286 00000 n + 0001035419 00000 n + 0001035552 00000 n + 0001035686 00000 n + 0001035819 00000 n + 0001035952 00000 n + 0001036085 00000 n + 0001036219 00000 n + 0001036354 00000 n + 0001036488 00000 n + 0001036622 00000 n + 0001036756 00000 n + 0001036889 00000 n + 0001037023 00000 n + 0001037157 00000 n + 0001037291 00000 n + 0001037416 00000 n + 0001037532 00000 n + 0001037652 00000 n + 0001037780 00000 n + 0001037913 00000 n + 0001038020 00000 n + 0001038145 00000 n + 0001038277 00000 n + 0001038411 00000 n + 0001038545 00000 n + 0001038679 00000 n + 0001038813 00000 n + 0001038940 00000 n + 0001038980 00000 n + 0001039161 00000 n + trailer + << /Size 2576 + /Root 2574 0 R + /Info 2575 0 R + /ID [<1F58060ADB31985F36039F54627C6E21> <1F58060ADB31985F36039F54627C6E21>] >> + startxref + 1039477 + %%EOF From sabre at nondot.org Mon May 25 20:05:56 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 20:05:56 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html Message-ID: <200905260105.n4Q15uP6010231@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2009-05-21-Thesis-Barrett-3c.html updated: 1.2 -> 1.3 --- Log message: fix css reference --- Diffs of the changes: (+1 -1) 2009-05-21-Thesis-Barrett-3c.html | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html diff -u llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html:1.2 llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html:1.3 --- llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html:1.2 Mon May 25 20:04:57 2009 +++ llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html Mon May 25 20:05:36 2009 @@ -2,7 +2,7 @@ - + 3c: A JIT Compiler with LLVM From sabre at nondot.org Mon May 25 20:08:37 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 25 May 2009 20:08:37 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/pubs.js Message-ID: <200905260108.n4Q18bum010350@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: pubs.js updated: 1.13 -> 1.14 --- Log message: add edd's project. --- Diffs of the changes: (+8 -0) pubs.js | 8 ++++++++ 1 files changed, 8 insertions(+) Index: llvm-www/pubs/pubs.js diff -u llvm-www/pubs/pubs.js:1.13 llvm-www/pubs/pubs.js:1.14 --- llvm-www/pubs/pubs.js:1.13 Fri May 8 11:23:05 2009 +++ llvm-www/pubs/pubs.js Mon May 25 20:08:17 2009 @@ -1,6 +1,14 @@ // The array should be sorted reverse-chronologically, and will be displayed on // the page in the order listed. var PUBS = [ + {url: '2009-05-21-Thesis-Barrett-3c.html', + title: '3c: A JIT Compiler with LLVM', + author: 'Edd Barrett', + published: "Final Year Project, Bournemouth University", + location: "United Kingdom", + month: 5, + year: 2009}, + {url: '2009-05-EnsuringCorrectnessOfCompiledCode.html', title: 'Ensuring Correctness of Compiled Code', author: 'Ganna Zaks', From evan.cheng at apple.com Mon May 25 21:26:11 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 25 May 2009 19:26:11 -0700 Subject: [llvm-commits] Avoid O(#registers*#basicblocks) memory use in LiveVariables In-Reply-To: References: <8FEB6CFA-7992-46CD-BE02-789B1344DF90@apple.com> Message-ID: <5C0EABE9-BB47-4DCA-B7C5-939FA7F37E7A@apple.com> On May 23, 2009, at 9:24 AM, Jeffrey Yasskin wrote: > On Fri, May 22, 2009 at 5:10 PM, Evan Cheng > wrote: >> >> On May 22, 2009, at 4:37 PM, Jeffrey Yasskin wrote: >> >>> I just wanted to double-check that you're not worried about the >>> extra >>> memory use for small functions, and the potential for quadratic time >>> with a higher constant, before I commit this. >> >> I can see the potential for both of those issues. Perhaps you can >> specialize SparseBitVector with a smaller element size to reduce >> memory usage? As for compile time cost, can you measure it by return >> through the llvm test suite? > > I've attached the results of `make TEST=nightly report.html > ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1` from before and after my > patch. I'm not sure how to read it though. Is there documentation for > what the columns mean? Do these results say whether the extra memory > use is a problem or just whether the worse random access is a problem? You can use TEST=llc. It will report compile time spent each pass. Unfortunately it doesn't report memory use. > > > I haven't yet reduced the template argument to SparseBitVector. What's > the largest common number of basic blocks in a function that variables > tend to be used or alive through? I'd want to set the argument to There isn't a "right" answer for this. I'd say we should just choose a reasonable number. Perhaps 8? Evan > > that, since the size of an extra SparseBitVectorElement is higher than > anything we could save by reducing the size of an Element. > > Thanks, > Jeffrey > < > report > .nightly > .trunk > .html > > > < > report > .nightly > .smaller_livevars.html>_______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Mon May 25 21:27:31 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 25 May 2009 19:27:31 -0700 Subject: [llvm-commits] Avoid O(#registers*#basicblocks) memory use in LiveVariables In-Reply-To: References: <8FEB6CFA-7992-46CD-BE02-789B1344DF90@apple.com> Message-ID: <0EE5EEB1-8370-4F11-A044-F52F5D99D3E7@apple.com> On May 23, 2009, at 5:04 PM, Jeffrey Yasskin wrote: > On Sat, May 23, 2009 at 9:24 AM, Jeffrey Yasskin > wrote: >> On Fri, May 22, 2009 at 5:10 PM, Evan Cheng >> wrote: >>> I can see the potential for both of those issues. Perhaps you can >>> specialize SparseBitVector with a smaller element size to reduce >>> memory usage? As for compile time cost, can you measure it by return >>> through the llvm test suite? >> >> I've attached the results of `make TEST=nightly report.html >> ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1` from before and after my >> patch. > > Here are new versions of the nightly report. The LLC compile time was > broken until Nick fixed it, and, of course, it's the column we care > about here. Compile time looks fine to me, it seems to have improved slightly. Evan > > < > report > .nightly > .smaller_livevars > .html > > > < > report > .nightly.trunk.html>_______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Mon May 25 21:30:55 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 25 May 2009 19:30:55 -0700 Subject: [llvm-commits] Avoid O(#registers*#basicblocks) memory use in LiveVariables In-Reply-To: References: <8FEB6CFA-7992-46CD-BE02-789B1344DF90@apple.com> Message-ID: <363EF47E-1FBE-4A8B-873C-B6B667B26388@apple.com> On May 22, 2009, at 9:07 PM, me22 wrote: > 2009/5/22 Evan Cheng : >> >> I can see the potential for both of those issues. Perhaps you can >> specialize SparseBitVector with a smaller element size to reduce >> memory usage? As for compile time cost, can you measure it by return >> through the llvm test suite? >> > > I'd be wary of decreasing the element size any more. > > I wrote up a quick test (attached) that suggests that on 64-bit linux > only a third of the node is actually holding data right now. (The > overhead from sparsity and linked list pointers is the other > two-thirds.) And on whatever platform codepad.org runs (I think VC++ > Win32), only a quarter of the memory is actually holding bits, and > ElementSize could actually be increased to 160 without changing the > amount of memory that new actually allocates per node. 32-bit linux > seems to have the best ratio, with half of it useful. > > I don't know the pattern of sparsity in LiveVariables, but I'd > actually argue for trying increasing it. > > Also, you might try using unsigned int for the BitWord in the > SparseBitVectorElement (instead of unsigned long), as on 64-bit it > would keep you from wasting the padding after the ElementIndex. It > should just involve changing the typedef, but could also slow things > down a bit since Elements would no longer be a power of two. No idea > whether that'd be noticable over the pointer-following overhead, > though. > > Or I suppose, depending on the way the numbering it implemented, it > might be even better to have some kind of range container instead... Thanks for doing the analysis. I think it all point to just leaving ElementSize along is probably fine. Evan > > > ~ Scott > < > sbve_size_experiment > .cxx>_______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From nicholas at mxc.ca Mon May 25 21:37:02 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 25 May 2009 19:37:02 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> <4A1B22D9.6000607@mxc.ca> <4A1B352D.9050208@mxc.ca> Message-ID: <4A1B55CE.10207@mxc.ca> Eli Friedman wrote: > On Mon, May 25, 2009 at 5:17 PM, Nick Lewycky wrote: >> Eli Friedman wrote: >>> On Mon, May 25, 2009 at 3:59 PM, Nick Lewycky wrote: >>>> Eli Friedman wrote: >>>>> On Sun, May 24, 2009 at 11:25 PM, Nick Lewycky wrote: >>>>>> Eli Friedman wrote: >>>>>>> On Sun, May 24, 2009 at 9:34 PM, Nick Lewycky wrote: >>>>>>>> However, it doesn't simplify it down all the way. See llvm.org/PR4261 for an >>>>>>>> example of what happens after this optimization is applied on the above >>>>>>>> program. We may decide that PR4261 is too hard to fix in general and just >>>>>>>> add some extra logic to this pass, but I'd rather have this committed for a >>>>>>>> start. >>>>>>> Couldn't you just change AcquireRet from a constant 1 to a constant 0? >>>>>>> If it's safe to remove the guard, I don't see how the chosen path >>>>>>> could make a difference. >>>>>> Release has to run. It has the visible effect of changing the guard >>>>>> variable to a 1. Nowhere in this pass do we prove those two calls are >>>>>> the only places looking at the guard variable. >>>>> Assuming it's actually a guard, nothing besides the guard should care >>>>> whether the guard variable initialized or not in the current call. The >>>>> pass as written already makes assumptions that agree with that: for >>>>> example, it doesn't bother to check for instructions with side-effects >>>>> after the call to __cxa_guard_release. >>>> I'm going to change my mind on this one. That's not safe. Here's my example. >>>> >>>> We have a function that calls __cxa_guard_acquire/release on a single >>>> guard variable. Then we decide to clone it as part of partial >>>> specialization. >>>> >>>> The initialization being guarded depends on some global variable -- if >>>> it's zero it does nothing, else it prints "foo". When cloneA is run we >>>> know that the global is always 0 so the initialization does nothing and >>>> we eliminate the guards. In cloneB the global is always non-zero, so it >>>> always prints "foo" to the screen and we keep the guards. >>>> >>>> When cloneA runs it needs to mark the guard variable as being "already >>>> initialized" or else when cloneB runs it will go ahead and print "foo" >>>> and it's not supposed to. You've changed the behaviour of the program. >>> Ooh, that's right. Actually, it gets nastier than that: suppose >>> something like the following: >>> >>> static int gval1 = 1; >>> int gval2 = 1; >>> struct A { A() { if (gval1) { printf("%d\n", gval2); } }; >>> void a() { static A x(); gval2 = 0;} >>> void b() { a(); } >>> void c() { gval1 = 0; a(); } >>> >>> Then suppose b() and c() are called at the same time on separate >>> threads, and we've inlined/optimized everything; if the guard is >>> removed from c(), we can end up printing out "0", which shouldn't be >>> possible because setting gval2 to zero only happens after the >>> constructor for A finishes. >> Right. deadGuardElim checks for memory *reads* as well as writes and >> unwinds in order to prevent this sort of thing from happening. > > If a() gets inlined into c(), the load inside A() of gval1 can be > eliminated; I'm not sure if we do that particular optimization at the > moment, though. Boo. We'll continue to have problems so long as we try to eliminate one pair at a time, we need to either prove them all dead for a given guard variable or not. Excellent review, by the way! Nick From clattner at apple.com Mon May 25 23:13:09 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 25 May 2009 21:13:09 -0700 Subject: [llvm-commits] [llvm] r72325 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp In-Reply-To: References: <200905231235.n4NCZgvT018589@zion.cs.uiuc.edu> <2E4DA060-7225-419D-AB83-0E5FF6FAA7DE@apple.com> Message-ID: <19EF2DDB-27D8-4D9B-BC55-108698E8FF97@apple.com> On May 25, 2009, at 5:49 PM, Eli Friedman wrote: > On Mon, May 25, 2009 at 4:12 PM, Chris Lattner > wrote: >> As Duncan said, please convert this from recursive to iterative. One >> known-problem with the existing legalizedag stuff is that the >> recursive parts quickly run out of stack space when run on a thread >> (which often has a smaller stack than the main process), it would be >> nice to keep improving this: legalizetypes is iterative. > > I don't really want to copy 500 lines of LegalizeTypes code into > LegalizeVectorOps.cpp... do you have some other suggestion? What 500 lines would you need? >>> + /// This returns true if it made any changes; in that case, >>> LegalizeTypes >>> + /// is called again before Legalize. >>> + /// >>> + /// Note that this is an involved process that may invalidate >>> pointers into >>> + /// the graph. >>> + bool LegalizeVectors(); >> >> Would it make sense to change this to only return true when an >> illegal >> type is created? > > Maybe; the downside is that we lose the extra DAGCombiner run. Yes, that's true. I'd also like to get the dag combiner to be more incremental at some point. It would be "really nice" to be possible to run the dag combiner on a subgraph of the dag after *every* major change (e.g. i64 -> i32 legalization). > This > significantly improves code generation for > test/CodeGen/X86/widen_cast-4.ll, for example. And others. that looks like a partially reduced testcase, so the effects are probably bigger than in other cases, but I agree that it can be a significant win. >>>> 2. The remaining pieces of LegalizeDAG should be rewritten, both to >> make it iterative, and also to simplify it. There is a ton of >> duplicated code that happens for each operation. Making it iterative >> would allow us to simplify a bunch of this away I think. > > Yeah; there are also issues at the moment with inconsistently > legalizing the operands of various operations. Yeah, the old dag combiner used to get away with never legalizing certain magic operands. I think that the use of TargetConstant, the changes to shufflevector etc are reducing the need for this though. -Chris From clattner at apple.com Mon May 25 23:15:35 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 25 May 2009 21:15:35 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1B1CBE.2030804@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> <4A1A4FAB.2050404@free.fr> <4A1B1CBE.2030804@mxc.ca> Message-ID: On May 25, 2009, at 3:33 PM, Nick Lewycky wrote: >>> + This pass deletes dead calls to __cxa_guard_acquire and >>> __cxa_guard_release >>> + which are part of the Itanium C++ ABI. T hese are used to >>> prevent a function >> T hese -> These > > That line is gone. > > Updated patch attached. Thanks for the review! hi Nick, As we discussed on IRC, I'd really like to see this get sucked into simplifylibcalls instead of being its own pass. This has two advantages: 1) it will be a function pass, so it will interoperate more nicely with the inliner etc, and 2) it eliminates a special purpose pass with narrow goals. I haven't look at the patch in detail yet, but one other minor point is that your loop to check to see if all uses of cxa_* are direct calls is not sufficient: other translation units could take their addresses etc. -Chris From clattner at apple.com Mon May 25 23:33:40 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 25 May 2009 21:33:40 -0700 Subject: [llvm-commits] Avoid O(#registers*#basicblocks) memory use in LiveVariables In-Reply-To: References: Message-ID: On May 22, 2009, at 3:41 PM, Jeffrey Yasskin wrote: > LiveVariables::VarInfo contains two BitVectors, AliveBlocks and > UsedBlocks, which have as many entries as there are basic blocks in > the function. I believe LiveVariables::getVarInfo creates a VarInfo > struct for every register in the function, leading to quadratic space > use. On a particular function with approximately 30k basic blocks and > 280k instructions, which I've uploaded to > http://jeffrey.yasskin.info/dump/big_module.bc.bz2, this took > approximately 1.6GB of memory to codegen. The attached patch changes > these two variables to SparseBitVectors, which makes the memory use go > down to ~420MB (on Mac; llc on linux goes from 1.6GB->~900MB). I don't have any specific comment on this patch, but I will raise the bigger issue: having a bitmap like this is insanity :). Evan/Owen, what do you think the long term solution is for this? Can we eliminate this bitmap entirely from livevariables by using dominance based techniques, or build live intervals directly instead of building live variables? What is the client of this info? -Chris From eli.friedman at gmail.com Tue May 26 00:21:48 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 25 May 2009 22:21:48 -0700 Subject: [llvm-commits] [llvm] r72325 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp In-Reply-To: <19EF2DDB-27D8-4D9B-BC55-108698E8FF97@apple.com> References: <200905231235.n4NCZgvT018589@zion.cs.uiuc.edu> <2E4DA060-7225-419D-AB83-0E5FF6FAA7DE@apple.com> <19EF2DDB-27D8-4D9B-BC55-108698E8FF97@apple.com> Message-ID: On Mon, May 25, 2009 at 9:13 PM, Chris Lattner wrote: > > On May 25, 2009, at 5:49 PM, Eli Friedman wrote: > >> On Mon, May 25, 2009 at 4:12 PM, Chris Lattner >> wrote: >>> As Duncan said, please convert this from recursive to iterative. ?One >>> known-problem with the existing legalizedag stuff is that the >>> recursive parts quickly run out of stack space when run on a thread >>> (which often has a smaller stack than the main process), it would be >>> nice to keep improving this: legalizetypes is iterative. >> >> I don't really want to copy 500 lines of LegalizeTypes code into >> LegalizeVectorOps.cpp... do you have some other suggestion? > > What 500 lines would you need? Large parts of DAGTypeLegalizer::run and DAGTypeLegalizer::PerformExpensiveChecks, DAGTypeLegalizer::AnalyzeNewNode, DAGTypeLegalizer::AnalyzeNewValue, DAGTypeLegalizer::RemapValue, a bit of DAGTypeLegalizer::ExpungeNode, and NodeUpdateListener. Okay, maybe not quite 500 lines, but still a lot. >>>>> 2. The remaining pieces of LegalizeDAG should be rewritten, both to >>> make it iterative, and also to simplify it. ?There is a ton of >>> duplicated code that happens for each operation. ?Making it iterative >>> would allow us to simplify a bunch of this away I think. >> >> Yeah; there are also issues at the moment with inconsistently >> legalizing the operands of various operations. > > Yeah, the old dag combiner used to get away with never legalizing > certain magic operands. ?I think that the use of TargetConstant, the > changes to shufflevector etc are reducing the need for this though. LegalizeDAG now asserts that all the results and operands of every node it inspects have legal type, so I think I've caught all the issues of that sort. But one example of something I saw is that PPC was creating BUILD_VECTOR nodes with operands of illegal type, and the legalizer never looked at them. -Eli From evan.cheng at apple.com Tue May 26 00:59:50 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 25 May 2009 22:59:50 -0700 Subject: [llvm-commits] Avoid O(#registers*#basicblocks) memory use in LiveVariables In-Reply-To: References: Message-ID: <66D0F297-77AB-49FF-B551-C0B544BC37BA@apple.com> On May 25, 2009, at 9:33 PM, Chris Lattner wrote: > > On May 22, 2009, at 3:41 PM, Jeffrey Yasskin wrote: > >> LiveVariables::VarInfo contains two BitVectors, AliveBlocks and >> UsedBlocks, which have as many entries as there are basic blocks in >> the function. I believe LiveVariables::getVarInfo creates a VarInfo >> struct for every register in the function, leading to quadratic space >> use. On a particular function with approximately 30k basic blocks and >> 280k instructions, which I've uploaded to >> http://jeffrey.yasskin.info/dump/big_module.bc.bz2, this took >> approximately 1.6GB of memory to codegen. The attached patch changes >> these two variables to SparseBitVectors, which makes the memory use >> go >> down to ~420MB (on Mac; llc on linux goes from 1.6GB->~900MB). > > I don't have any specific comment on this patch, but I will raise > the bigger issue: having a bitmap like this is insanity :). Evan/ > Owen, what do you think the long term solution is for this? Can we > eliminate this bitmap entirely from livevariables by using dominance > based techniques, or build live intervals directly instead of > building live variables? What is the client of this info? Actually "UsedBlocks" can be eliminated today. It's not used any more as far as I can tell. As far "AliveBlocks", it's used by liveintervalanalysis and phi elimination. I believe LiveVariables can be eliminated by moving to dominance based technique. Certainly strongphielim does not make use of LiveVariables at all. Evan > > > -Chris From evan.cheng at apple.com Tue May 26 01:25:47 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 26 May 2009 06:25:47 -0000 Subject: [llvm-commits] [llvm] r72411 - in /llvm/trunk: include/llvm/CodeGen/LiveVariables.h lib/CodeGen/LiveVariables.cpp lib/CodeGen/PHIElimination.cpp lib/CodeGen/TwoAddressInstructionPass.cpp Message-ID: <200905260625.n4Q6PlM0021824@zion.cs.uiuc.edu> Author: evancheng Date: Tue May 26 01:25:46 2009 New Revision: 72411 URL: http://llvm.org/viewvc/llvm-project?rev=72411&view=rev Log: Eliminate VarInfo::UsedBlocks. Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h llvm/trunk/lib/CodeGen/LiveVariables.cpp llvm/trunk/lib/CodeGen/PHIElimination.cpp llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveVariables.h?rev=72411&r1=72410&r2=72411&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveVariables.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveVariables.h Tue May 26 01:25:46 2009 @@ -77,10 +77,6 @@ /// BitVector AliveBlocks; - /// UsedBlocks - Set of blocks in which this value is actually used. This - /// is a bit set which uses the basic block number as an index. - BitVector UsedBlocks; - /// NumUses - Number of uses of this register across the entire function. /// unsigned NumUses; Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveVariables.cpp?rev=72411&r1=72410&r2=72411&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveVariables.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveVariables.cpp Tue May 26 01:25:46 2009 @@ -54,9 +54,6 @@ cerr << " Alive in blocks: "; for (int i = AliveBlocks.find_first(); i != -1; i = AliveBlocks.find_next(i)) cerr << i << ", "; - cerr << " Used in blocks: "; - for (int i = UsedBlocks.find_first(); i != -1; i = UsedBlocks.find_next(i)) - cerr << i << ", "; cerr << "\n Killed by:"; if (Kills.empty()) cerr << " No instructions.\n"; @@ -80,7 +77,6 @@ } VarInfo &VI = VirtRegInfo[RegIdx]; VI.AliveBlocks.resize(MF->getNumBlockIDs()); - VI.UsedBlocks.resize(MF->getNumBlockIDs()); return VI; } @@ -131,7 +127,6 @@ unsigned BBNum = MBB->getNumber(); VarInfo& VRInfo = getVarInfo(reg); - VRInfo.UsedBlocks[BBNum] = true; VRInfo.NumUses++; // Check to see if this basic block is already a kill block. Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PHIElimination.cpp?rev=72411&r1=72410&r2=72411&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/PHIElimination.cpp Tue May 26 01:25:46 2009 @@ -249,8 +249,6 @@ // each for each incoming block), the "def" block and instruction fields // for the VarInfo is not filled in. LV->addVirtualRegisterKilled(IncomingReg, PHICopy); - - LV->getVarInfo(IncomingReg).UsedBlocks[MBB.getNumber()] = true; } // Since we are going to be deleting the PHI node, if it is the last use of @@ -317,7 +315,6 @@ // variables information so that it knows the copy source instruction kills // the incoming value. LiveVariables::VarInfo &InRegVI = LV->getVarInfo(SrcReg); - InRegVI.UsedBlocks[opBlock.getNumber()] = true; // Loop over all of the successors of the basic block, checking to see if // the value is either live in the block, or if it is killed in the block. Modified: llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp?rev=72411&r1=72410&r2=72411&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp (original) +++ llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp Tue May 26 01:25:46 2009 @@ -955,11 +955,6 @@ // Update live variables for regB. if (LV) { - LiveVariables::VarInfo& varInfoB = LV->getVarInfo(regB); - - // regB is used in this BB. - varInfoB.UsedBlocks[mbbi->getNumber()] = true; - if (LV->removeVirtualRegisterKilled(regB, mi)) LV->addVirtualRegisterKilled(regB, prevMI); From baldrick at free.fr Tue May 26 03:12:53 2009 From: baldrick at free.fr (Duncan Sands) Date: Tue, 26 May 2009 10:12:53 +0200 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1B1CBE.2030804@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> <4A1A4FAB.2050404@free.fr> <4A1B1CBE.2030804@mxc.ca> Message-ID: <4A1BA485.3040503@free.fr> Hi Nick, >> What about this: >> >> bb1: acquire >> br bbr >> bb2: acquire >> br bbr >> bbr: release >> >> Aren't you going to eliminate the first acquire and the release, but >> not the second acquire? > > No, it'll eliminate the second acquire and the release, but not the > first acquire. Note that there's code to detect this case in > deadGuardElim (see the comments). note that bb1 doesn't branch to bb2, it branches to bbr. > As far as I can tell that's valid behaviour for this transform so long > as we don't mind removing infinite loops (note that these infinite loops > can't be deliberately constructed by the user code, the calls to > __cxa_guard are always emitted by the compiler...). Not sure what you are saying? I hope you are not saying that this transform relies on a particular style of guard usage being fed into it... Ciao, Duncan. From eli.friedman at gmail.com Tue May 26 03:55:56 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Tue, 26 May 2009 08:55:56 -0000 Subject: [llvm-commits] [llvm] r72414 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200905260855.n4Q8tvJu006888@zion.cs.uiuc.edu> Author: efriedma Date: Tue May 26 03:55:52 2009 New Revision: 72414 URL: http://llvm.org/viewvc/llvm-project?rev=72414&view=rev Log: Delete a bunch of dead code from LegalizeDAG. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=72414&r1=72413&r2=72414&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Tue May 26 03:55:52 2009 @@ -69,11 +69,6 @@ /// being legalized (which could lead to non-serialized call sequences). bool IsLegalizingCall; - /// IsLegalizingCallArguments - This member is used only for the purpose - /// of providing assert to check for LegalizeTypes because legalizing an - /// operation might introduce call nodes that might need type legalization. - bool IsLegalizingCallArgs; - enum LegalizeAction { Legal, // The target natively supports this operation. Promote, // This operation should be executed in a larger type. @@ -90,51 +85,12 @@ /// allows us to avoid legalizing the same thing more than once. DenseMap LegalizedNodes; - /// PromotedNodes - For nodes that are below legal width, and that have more - /// than one use, this map indicates what promoted value to use. This allows - /// us to avoid promoting the same thing more than once. - DenseMap PromotedNodes; - - /// ExpandedNodes - For nodes that need to be expanded this map indicates - /// which operands are the expanded version of the input. This allows - /// us to avoid expanding the same node more than once. - DenseMap > ExpandedNodes; - - /// SplitNodes - For vector nodes that need to be split, this map indicates - /// which operands are the split version of the input. This allows us - /// to avoid splitting the same node more than once. - std::map > SplitNodes; - - /// ScalarizedNodes - For nodes that need to be converted from vector types to - /// scalar types, this contains the mapping of ones we have already - /// processed to the result. - std::map ScalarizedNodes; - - /// WidenNodes - For nodes that need to be widened from one vector type to - /// another, this contains the mapping of those that we have already widen. - /// This allows us to avoid widening more than once. - std::map WidenNodes; - void AddLegalizedOperand(SDValue From, SDValue To) { LegalizedNodes.insert(std::make_pair(From, To)); // If someone requests legalization of the new node, return itself. if (From != To) LegalizedNodes.insert(std::make_pair(To, To)); } - void AddPromotedOperand(SDValue From, SDValue To) { - bool isNew = PromotedNodes.insert(std::make_pair(From, To)).second; - assert(isNew && "Got into the map somehow?"); - isNew = isNew; - // If someone requests legalization of the new node, return itself. - LegalizedNodes.insert(std::make_pair(To, To)); - } - void AddWidenedOperand(SDValue From, SDValue To) { - bool isNew = WidenNodes.insert(std::make_pair(From, To)).second; - assert(isNew && "Got into the map somehow?"); - isNew = isNew; - // If someone requests legalization of the new node, return itself. - LegalizedNodes.insert(std::make_pair(To, To)); - } public: SelectionDAGLegalize(SelectionDAG &DAG, CodeGenOpt::Level ol); @@ -164,12 +120,6 @@ /// result. SDValue LegalizeOp(SDValue O); - /// UnrollVectorOp - We know that the given vector has a legal type, however - /// the operation it performs is not legal and is an operation that we have - /// no way of lowering. "Unroll" the vector, splitting out the scalars and - /// operating on each element individually. - SDValue UnrollVectorOp(SDValue O); - /// PerformInsertVectorEltInMemory - Some target cannot handle a variable /// insertion index for the INSERT_VECTOR_ELT instruction. In this case, it /// is necessary to spill the vector being inserted into to memory, perform @@ -177,94 +127,9 @@ SDValue PerformInsertVectorEltInMemory(SDValue Vec, SDValue Val, SDValue Idx, DebugLoc dl); - /// PromoteOp - Given an operation that produces a value in an invalid type, - /// promote it to compute the value into a larger type. The produced value - /// will have the correct bits for the low portion of the register, but no - /// guarantee is made about the top bits: it may be zero, sign-extended, or - /// garbage. - SDValue PromoteOp(SDValue O); - - /// ExpandOp - Expand the specified SDValue into its two component pieces - /// Lo&Hi. Note that the Op MUST be an expanded type. As a result of this, - /// the LegalizedNodes map is filled in for any results that are not expanded, - /// the ExpandedNodes map is filled in for any results that are expanded, and - /// the Lo/Hi values are returned. This applies to integer types and Vector - /// types. - void ExpandOp(SDValue O, SDValue &Lo, SDValue &Hi); - - /// WidenVectorOp - Widen a vector operation to a wider type given by WidenVT - /// (e.g., v3i32 to v4i32). The produced value will have the correct value - /// for the existing elements but no guarantee is made about the new elements - /// at the end of the vector: it may be zero, ones, or garbage. This is useful - /// when we have an instruction operating on an illegal vector type and we - /// want to widen it to do the computation on a legal wider vector type. - SDValue WidenVectorOp(SDValue Op, MVT WidenVT); - - /// SplitVectorOp - Given an operand of vector type, break it down into - /// two smaller values. - void SplitVectorOp(SDValue O, SDValue &Lo, SDValue &Hi); - - /// ScalarizeVectorOp - Given an operand of single-element vector type - /// (e.g. v1f32), convert it into the equivalent operation that returns a - /// scalar (e.g. f32) value. - SDValue ScalarizeVectorOp(SDValue O); - /// Useful 16 element vector type that is used to pass operands for widening. typedef SmallVector SDValueVector; - /// LoadWidenVectorOp - Load a vector for a wider type. Returns true if - /// the LdChain contains a single load and false if it contains a token - /// factor for multiple loads. It takes - /// Result: location to return the result - /// LdChain: location to return the load chain - /// Op: load operation to widen - /// NVT: widen vector result type we want for the load - bool LoadWidenVectorOp(SDValue& Result, SDValue& LdChain, - SDValue Op, MVT NVT); - - /// Helper genWidenVectorLoads - Helper function to generate a set of - /// loads to load a vector with a resulting wider type. It takes - /// LdChain: list of chains for the load we have generated - /// Chain: incoming chain for the ld vector - /// BasePtr: base pointer to load from - /// SV: memory disambiguation source value - /// SVOffset: memory disambiugation offset - /// Alignment: alignment of the memory - /// isVolatile: volatile load - /// LdWidth: width of memory that we want to load - /// ResType: the wider result result type for the resulting loaded vector - SDValue genWidenVectorLoads(SDValueVector& LdChain, SDValue Chain, - SDValue BasePtr, const Value *SV, - int SVOffset, unsigned Alignment, - bool isVolatile, unsigned LdWidth, - MVT ResType, DebugLoc dl); - - /// StoreWidenVectorOp - Stores a widen vector into non widen memory - /// location. It takes - /// ST: store node that we want to replace - /// Chain: incoming store chain - /// BasePtr: base address of where we want to store into - SDValue StoreWidenVectorOp(StoreSDNode *ST, SDValue Chain, - SDValue BasePtr); - - /// Helper genWidenVectorStores - Helper function to generate a set of - /// stores to store a widen vector into non widen memory - // It takes - // StChain: list of chains for the stores we have generated - // Chain: incoming chain for the ld vector - // BasePtr: base pointer to load from - // SV: memory disambiguation source value - // SVOffset: memory disambiugation offset - // Alignment: alignment of the memory - // isVolatile: volatile lod - // ValOp: value to store - // StWidth: width of memory that we want to store - void genWidenVectorStores(SDValueVector& StChain, SDValue Chain, - SDValue BasePtr, const Value *SV, - int SVOffset, unsigned Alignment, - bool isVolatile, SDValue ValOp, - unsigned StWidth, DebugLoc dl); - /// ShuffleWithNarrowerEltType - Return a vector shuffle operation which /// performs the same shuffe in terms of order or result bytes, but on a type /// whose vector element type is narrower than the original shuffle type. @@ -288,7 +153,6 @@ SDValue ExpandLibCall(RTLIB::Libcall LC, SDNode *Node, bool isSigned, SDValue &Hi); - SDValue ExpandIntToFP(bool isSigned, MVT DestTy, SDValue Source, DebugLoc dl); SDValue EmitStackConvert(SDValue SrcOp, MVT SlotVT, MVT DestVT, DebugLoc dl); SDValue ExpandBUILD_VECTOR(SDNode *Node); @@ -304,12 +168,7 @@ SDValue ExpandBSWAP(SDValue Op, DebugLoc dl); SDValue ExpandBitCount(unsigned Opc, SDValue Op, DebugLoc dl); - bool ExpandShift(unsigned Opc, SDValue Op, SDValue Amt, - SDValue &Lo, SDValue &Hi, DebugLoc dl); - void ExpandShiftParts(unsigned NodeOp, SDValue Op, SDValue Amt, - SDValue &Lo, SDValue &Hi, DebugLoc dl); - SDValue ExpandEXTRACT_SUBVECTOR(SDValue Op); SDValue ExpandEXTRACT_VECTOR_ELT(SDValue Op); SDValue ExpandExtractFromVectorThroughStack(SDValue Op); }; @@ -359,7 +218,6 @@ void SelectionDAGLegalize::LegalizeDAG() { LastCALLSEQ_END = DAG.getEntryNode(); IsLegalizingCall = false; - IsLegalizingCallArgs = false; // The legalize process is inherently a bottom-up recursive process (users // legalize their uses before themselves). Given infinite stack space, we @@ -377,12 +235,7 @@ assert(LegalizedNodes.count(OldRoot) && "Root didn't get legalized?"); DAG.setRoot(LegalizedNodes[OldRoot]); - ExpandedNodes.clear(); LegalizedNodes.clear(); - PromotedNodes.clear(); - SplitNodes.clear(); - ScalarizedNodes.clear(); - WidenNodes.clear(); // Remove dead nodes now. DAG.RemoveDeadNodes(); @@ -457,17 +310,7 @@ // If the first result of this node has been already legalized, then it cannot // reach N. - switch (getTypeAction(N->getValueType(0))) { - case Legal: - if (LegalizedNodes.count(SDValue(N, 0))) return false; - break; - case Promote: - if (PromotedNodes.count(SDValue(N, 0))) return false; - break; - case Expand: - if (ExpandedNodes.count(SDValue(N, 0))) return false; - break; - } + if (LegalizedNodes.count(SDValue(N, 0))) return false; // Okay, this node has not already been legalized. Check and legalize all // operands. If none lead to Dest, then we can legalize this node. @@ -495,43 +338,7 @@ MVT VT = Op.getValueType(); // We should never see any illegal result types here. assert(isTypeLegal(VT) && "Illegal type introduced after type legalization?"); - switch (getTypeAction(VT)) { - default: assert(0 && "Bad type action!"); - case Legal: (void)LegalizeOp(Op); break; - case Promote: - if (!VT.isVector()) { - (void)PromoteOp(Op); - break; - } - else { - // See if we can widen otherwise use Expand to either scalarize or split - MVT WidenVT = TLI.getWidenVectorType(VT); - if (WidenVT != MVT::Other) { - (void) WidenVectorOp(Op, WidenVT); - break; - } - // else fall thru to expand since we can't widen the vector - } - case Expand: - if (!VT.isVector()) { - // If this is an illegal scalar, expand it into its two component - // pieces. - SDValue X, Y; - if (Op.getOpcode() == ISD::TargetConstant) - break; // Allow illegal target nodes. - ExpandOp(Op, X, Y); - } else if (VT.getVectorNumElements() == 1) { - // If this is an illegal single element vector, convert it to a - // scalar operation. - (void)ScalarizeVectorOp(Op); - } else { - // This is an illegal multiple element vector. - // Split it in half and legalize both parts. - SDValue X, Y; - SplitVectorOp(Op, X, Y); - } - break; - } + (void)LegalizeOp(Op); } /// ExpandConstantFP - Expands the ConstantFP node to an integer constant or @@ -582,53 +389,6 @@ PseudoSourceValue::getConstantPool(), 0, false, Alignment); } - -/// ExpandFCOPYSIGNToBitwiseOps - Expands fcopysign to a series of bitwise -/// operations. -static -SDValue ExpandFCOPYSIGNToBitwiseOps(SDNode *Node, MVT NVT, - SelectionDAG &DAG, - const TargetLowering &TLI) { - DebugLoc dl = Node->getDebugLoc(); - MVT VT = Node->getValueType(0); - MVT SrcVT = Node->getOperand(1).getValueType(); - assert((SrcVT == MVT::f32 || SrcVT == MVT::f64) && - "fcopysign expansion only supported for f32 and f64"); - MVT SrcNVT = (SrcVT == MVT::f64) ? MVT::i64 : MVT::i32; - - // First get the sign bit of second operand. - SDValue Mask1 = (SrcVT == MVT::f64) - ? DAG.getConstantFP(BitsToDouble(1ULL << 63), SrcVT) - : DAG.getConstantFP(BitsToFloat(1U << 31), SrcVT); - Mask1 = DAG.getNode(ISD::BIT_CONVERT, dl, SrcNVT, Mask1); - SDValue SignBit= DAG.getNode(ISD::BIT_CONVERT, dl, SrcNVT, - Node->getOperand(1)); - SignBit = DAG.getNode(ISD::AND, dl, SrcNVT, SignBit, Mask1); - // Shift right or sign-extend it if the two operands have different types. - int SizeDiff = SrcNVT.getSizeInBits() - NVT.getSizeInBits(); - if (SizeDiff > 0) { - SignBit = DAG.getNode(ISD::SRL, dl, SrcNVT, SignBit, - DAG.getConstant(SizeDiff, TLI.getShiftAmountTy())); - SignBit = DAG.getNode(ISD::TRUNCATE, dl, NVT, SignBit); - } else if (SizeDiff < 0) { - SignBit = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, SignBit); - SignBit = DAG.getNode(ISD::SHL, dl, NVT, SignBit, - DAG.getConstant(-SizeDiff, TLI.getShiftAmountTy())); - } - - // Clear the sign bit of first operand. - SDValue Mask2 = (VT == MVT::f64) - ? DAG.getConstantFP(BitsToDouble(~(1ULL << 63)), VT) - : DAG.getConstantFP(BitsToFloat(~(1U << 31)), VT); - Mask2 = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, Mask2); - SDValue Result = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, Node->getOperand(0)); - Result = DAG.getNode(ISD::AND, dl, NVT, Result, Mask2); - - // Or the value with the sign bit. - Result = DAG.getNode(ISD::OR, dl, NVT, Result, SignBit); - return Result; -} - /// ExpandUnalignedStore - Expands an unaligned store to 2 half-size stores. static SDValue ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG, @@ -864,58 +624,6 @@ return DAG.getMergeValues(Ops, 2, dl); } -/// UnrollVectorOp - We know that the given vector has a legal type, however -/// the operation it performs is not legal and is an operation that we have -/// no way of lowering. "Unroll" the vector, splitting out the scalars and -/// operating on each element individually. -SDValue SelectionDAGLegalize::UnrollVectorOp(SDValue Op) { - MVT VT = Op.getValueType(); - assert(isTypeLegal(VT) && - "Caller should expand or promote operands that are not legal!"); - assert(Op.getNode()->getNumValues() == 1 && - "Can't unroll a vector with multiple results!"); - unsigned NE = VT.getVectorNumElements(); - MVT EltVT = VT.getVectorElementType(); - DebugLoc dl = Op.getDebugLoc(); - - SmallVector Scalars; - SmallVector Operands(Op.getNumOperands()); - for (unsigned i = 0; i != NE; ++i) { - for (unsigned j = 0; j != Op.getNumOperands(); ++j) { - SDValue Operand = Op.getOperand(j); - MVT OperandVT = Operand.getValueType(); - if (OperandVT.isVector()) { - // A vector operand; extract a single element. - MVT OperandEltVT = OperandVT.getVectorElementType(); - Operands[j] = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, - OperandEltVT, - Operand, - DAG.getConstant(i, MVT::i32)); - } else { - // A scalar operand; just use it as is. - Operands[j] = Operand; - } - } - - switch (Op.getOpcode()) { - default: - Scalars.push_back(DAG.getNode(Op.getOpcode(), dl, EltVT, - &Operands[0], Operands.size())); - break; - case ISD::SHL: - case ISD::SRA: - case ISD::SRL: - case ISD::ROTL: - case ISD::ROTR: - Scalars.push_back(DAG.getNode(Op.getOpcode(), dl, EltVT, Operands[0], - DAG.getShiftAmountOperand(Operands[1]))); - break; - } - } - - return DAG.getNode(ISD::BUILD_VECTOR, dl, VT, &Scalars[0], Scalars.size()); -} - /// GetFPLibCall - Return the right libcall for the given floating point type. static RTLIB::Libcall GetFPLibCall(MVT VT, RTLIB::Libcall Call_F32, @@ -1291,20 +999,13 @@ if (Result.getNode()) break; case TargetLowering::Legal: { - LegalizeAction Action = getTypeAction(Node->getOperand(1).getValueType()); - if (Action == Legal && Tmp1 == Node->getOperand(0)) + if (Tmp1 == Node->getOperand(0)) break; SmallVector Ops; Ops.push_back(Tmp1); - if (Action == Legal) { - Ops.push_back(Node->getOperand(1)); // line # must be legal. - Ops.push_back(Node->getOperand(2)); // col # must be legal. - } else { - // Otherwise promote them. - Ops.push_back(PromoteOp(Node->getOperand(1))); - Ops.push_back(PromoteOp(Node->getOperand(2))); - } + Ops.push_back(Node->getOperand(1)); // line # must be legal. + Ops.push_back(Node->getOperand(2)); // col # must be legal. Ops.push_back(Node->getOperand(3)); // filename must be legal. Ops.push_back(Node->getOperand(4)); // working dir # must be legal. Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size()); @@ -1784,13 +1485,11 @@ // Recursively Legalize all of the inputs of the call end that do not lead // to this call start. This ensures that any libcalls that need be inserted // are inserted *before* the CALLSEQ_START. - IsLegalizingCallArgs = true; {SmallPtrSet NodesLeadingTo; for (unsigned i = 0, e = CallEnd->getNumOperands(); i != e; ++i) LegalizeAllNodesNotLeadingTo(CallEnd->getOperand(i).getNode(), Node, NodesLeadingTo); } - IsLegalizingCallArgs = false; // Now that we legalized all of the inputs (which may have inserted // libcalls) create the new CALLSEQ_START node. @@ -3086,10 +2785,7 @@ break; } - assert(Node->getValueType(0).isVector() && - "Cannot expand this binary operator!"); - // Expand the operation into a bunch of nasty scalar code. - Result = LegalizeOp(UnrollVectorOp(Op)); + assert(0 && "Cannot expand this binary operator!"); break; } case TargetLowering::Promote: { @@ -3336,10 +3032,7 @@ break; } - assert(VT.isVector() && - "Cannot expand this binary operator!"); - // Expand the operation into a bunch of nasty scalar code. - Result = LegalizeOp(UnrollVectorOp(Op)); + assert(0 && "Cannot expand this binary operator!"); break; } } @@ -3620,11 +3313,7 @@ case ISD::FNEARBYINT: { MVT VT = Node->getValueType(0); - // Expand unsupported unary vector operators by unrolling them. - if (VT.isVector()) { - Result = LegalizeOp(UnrollVectorOp(Op)); - break; - } + assert(!VT.isVector() && "Vector shouldn't get here!"); RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL; switch(Node->getOpcode()) { @@ -3695,10 +3384,7 @@ MVT VT = Node->getValueType(0); // Expand unsupported unary vector operators by unrolling them. - if (VT.isVector()) { - Result = LegalizeOp(UnrollVectorOp(Op)); - break; - } + assert(!VT.isVector() && "Vector shouldn't get here!"); // We always lower FPOWI into a libcall. No target support for it yet. RTLIB::Libcall LC = GetFPLibCall(VT, RTLIB::POWI_F32, RTLIB::POWI_F64, @@ -3774,11 +3460,6 @@ if (Tmp1.getNode()) Result = Tmp1; } break; - case TargetLowering::Expand: - assert(Result.getValueType().isVector() && "must be vector type"); - // Unroll the truncate. We should do better. - Result = LegalizeOp(UnrollVectorOp(Result)); - break; } break; @@ -4093,497 +3774,6 @@ return Result; } -/// PromoteOp - Given an operation that produces a value in an invalid type, -/// promote it to compute the value into a larger type. The produced value will -/// have the correct bits for the low portion of the register, but no guarantee -/// is made about the top bits: it may be zero, sign-extended, or garbage. -SDValue SelectionDAGLegalize::PromoteOp(SDValue Op) { - assert(0 && "This should be dead!"); - MVT VT = Op.getValueType(); - MVT NVT = TLI.getTypeToTransformTo(VT); - assert(getTypeAction(VT) == Promote && - "Caller should expand or legalize operands that are not promotable!"); - assert(NVT.bitsGT(VT) && NVT.isInteger() == VT.isInteger() && - "Cannot promote to smaller type!"); - - SDValue Tmp1, Tmp2, Tmp3; - SDValue Result; - SDNode *Node = Op.getNode(); - DebugLoc dl = Node->getDebugLoc(); - - DenseMap::iterator I = PromotedNodes.find(Op); - if (I != PromotedNodes.end()) return I->second; - - switch (Node->getOpcode()) { - case ISD::CopyFromReg: - assert(0 && "CopyFromReg must be legal!"); - default: -#ifndef NDEBUG - cerr << "NODE: "; Node->dump(&DAG); cerr << "\n"; -#endif - assert(0 && "Do not know how to promote this operator!"); - abort(); - case ISD::UNDEF: - Result = DAG.getUNDEF(NVT); - break; - case ISD::Constant: - if (VT != MVT::i1) - Result = DAG.getNode(ISD::SIGN_EXTEND, dl, NVT, Op); - else - Result = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Op); - assert(isa(Result) && "Didn't constant fold zext?"); - break; - case ISD::ConstantFP: - Result = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Op); - assert(isa(Result) && "Didn't constant fold fp_extend?"); - break; - - case ISD::SETCC: { - MVT VT0 = Node->getOperand(0).getValueType(); - assert(isTypeLegal(TLI.getSetCCResultType(VT0)) - && "SetCC type is not legal??"); - Result = DAG.getNode(ISD::SETCC, dl, TLI.getSetCCResultType(VT0), - Node->getOperand(0), Node->getOperand(1), - Node->getOperand(2)); - break; - } - case ISD::TRUNCATE: - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Legal: - Result = LegalizeOp(Node->getOperand(0)); - assert(Result.getValueType().bitsGE(NVT) && - "This truncation doesn't make sense!"); - if (Result.getValueType().bitsGT(NVT)) // Truncate to NVT instead of VT - Result = DAG.getNode(ISD::TRUNCATE, dl, NVT, Result); - break; - case Promote: - // The truncation is not required, because we don't guarantee anything - // about high bits anyway. - Result = PromoteOp(Node->getOperand(0)); - break; - case Expand: - ExpandOp(Node->getOperand(0), Tmp1, Tmp2); - // Truncate the low part of the expanded value to the result type - Result = DAG.getNode(ISD::TRUNCATE, dl, NVT, Tmp1); - } - break; - case ISD::SIGN_EXTEND: - case ISD::ZERO_EXTEND: - case ISD::ANY_EXTEND: - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Expand: assert(0 && "BUG: Smaller reg should have been promoted!"); - case Legal: - // Input is legal? Just do extend all the way to the larger type. - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Node->getOperand(0)); - break; - case Promote: - // Promote the reg if it's smaller. - Result = PromoteOp(Node->getOperand(0)); - // The high bits are not guaranteed to be anything. Insert an extend. - if (Node->getOpcode() == ISD::SIGN_EXTEND) - Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Result, - DAG.getValueType(Node->getOperand(0).getValueType())); - else if (Node->getOpcode() == ISD::ZERO_EXTEND) - Result = DAG.getZeroExtendInReg(Result, dl, - Node->getOperand(0).getValueType()); - break; - } - break; - case ISD::CONVERT_RNDSAT: { - ISD::CvtCode CvtCode = cast(Node)->getCvtCode(); - assert ((CvtCode == ISD::CVT_SS || CvtCode == ISD::CVT_SU || - CvtCode == ISD::CVT_US || CvtCode == ISD::CVT_UU || - CvtCode == ISD::CVT_SF || CvtCode == ISD::CVT_UF) && - "can only promote integers"); - Result = DAG.getConvertRndSat(NVT, dl, Node->getOperand(0), - Node->getOperand(1), Node->getOperand(2), - Node->getOperand(3), Node->getOperand(4), - CvtCode); - break; - - } - case ISD::BIT_CONVERT: - Result = EmitStackConvert(Node->getOperand(0), Node->getValueType(0), - Node->getValueType(0), dl); - Result = PromoteOp(Result); - break; - - case ISD::FP_EXTEND: - assert(0 && "Case not implemented. Dynamically dead with 2 FP types!"); - case ISD::FP_ROUND: - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Expand: assert(0 && "BUG: Cannot expand FP regs!"); - case Promote: assert(0 && "Unreachable with 2 FP types!"); - case Legal: - if (Node->getConstantOperandVal(1) == 0) { - // Input is legal? Do an FP_ROUND_INREG. - Result = DAG.getNode(ISD::FP_ROUND_INREG, dl, NVT, Node->getOperand(0), - DAG.getValueType(VT)); - } else { - // Just remove the truncate, it isn't affecting the value. - Result = DAG.getNode(ISD::FP_ROUND, dl, NVT, Node->getOperand(0), - Node->getOperand(1)); - } - break; - } - break; - case ISD::SINT_TO_FP: - case ISD::UINT_TO_FP: - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Legal: - // No extra round required here. - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Node->getOperand(0)); - break; - - case Promote: - Result = PromoteOp(Node->getOperand(0)); - if (Node->getOpcode() == ISD::SINT_TO_FP) - Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, Result.getValueType(), - Result, - DAG.getValueType(Node->getOperand(0).getValueType())); - else - Result = DAG.getZeroExtendInReg(Result, dl, - Node->getOperand(0).getValueType()); - // No extra round required here. - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Result); - break; - case Expand: - Result = ExpandIntToFP(Node->getOpcode() == ISD::SINT_TO_FP, NVT, - Node->getOperand(0), dl); - // Round if we cannot tolerate excess precision. - if (NoExcessFPPrecision) - Result = DAG.getNode(ISD::FP_ROUND_INREG, dl, NVT, Result, - DAG.getValueType(VT)); - break; - } - break; - - case ISD::SIGN_EXTEND_INREG: - Result = PromoteOp(Node->getOperand(0)); - Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Result, - Node->getOperand(1)); - break; - case ISD::FP_TO_SINT: - case ISD::FP_TO_UINT: - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Legal: - case Expand: - Tmp1 = Node->getOperand(0); - break; - case Promote: - // The input result is prerounded, so we don't have to do anything - // special. - Tmp1 = PromoteOp(Node->getOperand(0)); - break; - } - // If we're promoting a UINT to a larger size, check to see if the new node - // will be legal. If it isn't, check to see if FP_TO_SINT is legal, since - // we can use that instead. This allows us to generate better code for - // FP_TO_UINT for small destination sizes on targets where FP_TO_UINT is not - // legal, such as PowerPC. - if (Node->getOpcode() == ISD::FP_TO_UINT && - !TLI.isOperationLegalOrCustom(ISD::FP_TO_UINT, NVT) && - (TLI.isOperationLegalOrCustom(ISD::FP_TO_SINT, NVT) || - TLI.getOperationAction(ISD::FP_TO_SINT, NVT)==TargetLowering::Custom)){ - Result = DAG.getNode(ISD::FP_TO_SINT, dl, NVT, Tmp1); - } else { - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1); - } - break; - - case ISD::FABS: - case ISD::FNEG: - Tmp1 = PromoteOp(Node->getOperand(0)); - assert(Tmp1.getValueType() == NVT); - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1); - // NOTE: we do not have to do any extra rounding here for - // NoExcessFPPrecision, because we know the input will have the appropriate - // precision, and these operations don't modify precision at all. - break; - - case ISD::FLOG: - case ISD::FLOG2: - case ISD::FLOG10: - case ISD::FEXP: - case ISD::FEXP2: - case ISD::FSQRT: - case ISD::FSIN: - case ISD::FCOS: - case ISD::FTRUNC: - case ISD::FFLOOR: - case ISD::FCEIL: - case ISD::FRINT: - case ISD::FNEARBYINT: - Tmp1 = PromoteOp(Node->getOperand(0)); - assert(Tmp1.getValueType() == NVT); - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1); - if (NoExcessFPPrecision) - Result = DAG.getNode(ISD::FP_ROUND_INREG, dl, NVT, Result, - DAG.getValueType(VT)); - break; - - case ISD::FPOW: - case ISD::FPOWI: { - // Promote f32 pow(i) to f64 pow(i). Note that this could insert a libcall - // directly as well, which may be better. - Tmp1 = PromoteOp(Node->getOperand(0)); - Tmp2 = Node->getOperand(1); - if (Node->getOpcode() == ISD::FPOW) - Tmp2 = PromoteOp(Tmp2); - assert(Tmp1.getValueType() == NVT); - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2); - if (NoExcessFPPrecision) - Result = DAG.getNode(ISD::FP_ROUND_INREG, dl, NVT, Result, - DAG.getValueType(VT)); - break; - } - - case ISD::ATOMIC_CMP_SWAP: { - AtomicSDNode* AtomNode = cast(Node); - Tmp2 = PromoteOp(Node->getOperand(2)); - Tmp3 = PromoteOp(Node->getOperand(3)); - Result = DAG.getAtomic(Node->getOpcode(), dl, AtomNode->getMemoryVT(), - AtomNode->getChain(), - AtomNode->getBasePtr(), Tmp2, Tmp3, - AtomNode->getSrcValue(), - AtomNode->getAlignment()); - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1))); - break; - } - case ISD::ATOMIC_LOAD_ADD: - case ISD::ATOMIC_LOAD_SUB: - case ISD::ATOMIC_LOAD_AND: - case ISD::ATOMIC_LOAD_OR: - case ISD::ATOMIC_LOAD_XOR: - case ISD::ATOMIC_LOAD_NAND: - case ISD::ATOMIC_LOAD_MIN: - case ISD::ATOMIC_LOAD_MAX: - case ISD::ATOMIC_LOAD_UMIN: - case ISD::ATOMIC_LOAD_UMAX: - case ISD::ATOMIC_SWAP: { - AtomicSDNode* AtomNode = cast(Node); - Tmp2 = PromoteOp(Node->getOperand(2)); - Result = DAG.getAtomic(Node->getOpcode(), dl, AtomNode->getMemoryVT(), - AtomNode->getChain(), - AtomNode->getBasePtr(), Tmp2, - AtomNode->getSrcValue(), - AtomNode->getAlignment()); - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1))); - break; - } - - case ISD::AND: - case ISD::OR: - case ISD::XOR: - case ISD::ADD: - case ISD::SUB: - case ISD::MUL: - // The input may have strange things in the top bits of the registers, but - // these operations don't care. They may have weird bits going out, but - // that too is okay if they are integer operations. - Tmp1 = PromoteOp(Node->getOperand(0)); - Tmp2 = PromoteOp(Node->getOperand(1)); - assert(Tmp1.getValueType() == NVT && Tmp2.getValueType() == NVT); - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2); - break; - case ISD::FADD: - case ISD::FSUB: - case ISD::FMUL: - Tmp1 = PromoteOp(Node->getOperand(0)); - Tmp2 = PromoteOp(Node->getOperand(1)); - assert(Tmp1.getValueType() == NVT && Tmp2.getValueType() == NVT); - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2); - - // Floating point operations will give excess precision that we may not be - // able to tolerate. If we DO allow excess precision, just leave it, - // otherwise excise it. - // FIXME: Why would we need to round FP ops more than integer ones? - // Is Round(Add(Add(A,B),C)) != Round(Add(Round(Add(A,B)), C)) - if (NoExcessFPPrecision) - Result = DAG.getNode(ISD::FP_ROUND_INREG, dl, NVT, Result, - DAG.getValueType(VT)); - break; - - case ISD::SDIV: - case ISD::SREM: - // These operators require that their input be sign extended. - Tmp1 = PromoteOp(Node->getOperand(0)); - Tmp2 = PromoteOp(Node->getOperand(1)); - if (NVT.isInteger()) { - Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Tmp1, - DAG.getValueType(VT)); - Tmp2 = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Tmp2, - DAG.getValueType(VT)); - } - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2); - - // Perform FP_ROUND: this is probably overly pessimistic. - if (NVT.isFloatingPoint() && NoExcessFPPrecision) - Result = DAG.getNode(ISD::FP_ROUND_INREG, dl, NVT, Result, - DAG.getValueType(VT)); - break; - case ISD::FDIV: - case ISD::FREM: - case ISD::FCOPYSIGN: - // These operators require that their input be fp extended. - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Expand: assert(0 && "not implemented"); - case Legal: Tmp1 = LegalizeOp(Node->getOperand(0)); break; - case Promote: Tmp1 = PromoteOp(Node->getOperand(0)); break; - } - switch (getTypeAction(Node->getOperand(1).getValueType())) { - case Expand: assert(0 && "not implemented"); - case Legal: Tmp2 = LegalizeOp(Node->getOperand(1)); break; - case Promote: Tmp2 = PromoteOp(Node->getOperand(1)); break; - } - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2); - - // Perform FP_ROUND: this is probably overly pessimistic. - if (NoExcessFPPrecision && Node->getOpcode() != ISD::FCOPYSIGN) - Result = DAG.getNode(ISD::FP_ROUND_INREG, dl, NVT, Result, - DAG.getValueType(VT)); - break; - - case ISD::UDIV: - case ISD::UREM: - // These operators require that their input be zero extended. - Tmp1 = PromoteOp(Node->getOperand(0)); - Tmp2 = PromoteOp(Node->getOperand(1)); - assert(NVT.isInteger() && "Operators don't apply to FP!"); - Tmp1 = DAG.getZeroExtendInReg(Tmp1, dl, VT); - Tmp2 = DAG.getZeroExtendInReg(Tmp2, dl, VT); - Result = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2); - break; - - case ISD::SHL: - Tmp1 = PromoteOp(Node->getOperand(0)); - Result = DAG.getNode(ISD::SHL, dl, NVT, Tmp1, Node->getOperand(1)); - break; - case ISD::SRA: - // The input value must be properly sign extended. - Tmp1 = PromoteOp(Node->getOperand(0)); - Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Tmp1, - DAG.getValueType(VT)); - Result = DAG.getNode(ISD::SRA, dl, NVT, Tmp1, Node->getOperand(1)); - break; - case ISD::SRL: - // The input value must be properly zero extended. - Tmp1 = PromoteOp(Node->getOperand(0)); - Tmp1 = DAG.getZeroExtendInReg(Tmp1, dl, VT); - Result = DAG.getNode(ISD::SRL, dl, NVT, Tmp1, Node->getOperand(1)); - break; - - case ISD::VAARG: - Tmp1 = Node->getOperand(0); // Get the chain. - Tmp2 = Node->getOperand(1); // Get the pointer. - if (TLI.getOperationAction(ISD::VAARG, VT) == TargetLowering::Custom) { - Tmp3 = DAG.getVAArg(VT, dl, Tmp1, Tmp2, Node->getOperand(2)); - Result = TLI.LowerOperation(Tmp3, DAG); - } else { - const Value *V = cast(Node->getOperand(2))->getValue(); - SDValue VAList = DAG.getLoad(TLI.getPointerTy(), dl, Tmp1, Tmp2, V, 0); - // Increment the pointer, VAList, to the next vaarg - Tmp3 = DAG.getNode(ISD::ADD, dl, TLI.getPointerTy(), VAList, - DAG.getConstant(VT.getSizeInBits()/8, - TLI.getPointerTy())); - // Store the incremented VAList to the legalized pointer - Tmp3 = DAG.getStore(VAList.getValue(1), dl, Tmp3, Tmp2, V, 0); - // Load the actual argument out of the pointer VAList - Result = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Tmp3, VAList, NULL, 0, VT); - } - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1))); - break; - - case ISD::LOAD: { - LoadSDNode *LD = cast(Node); - ISD::LoadExtType ExtType = ISD::isNON_EXTLoad(Node) - ? ISD::EXTLOAD : LD->getExtensionType(); - Result = DAG.getExtLoad(ExtType, dl, NVT, - LD->getChain(), LD->getBasePtr(), - LD->getSrcValue(), LD->getSrcValueOffset(), - LD->getMemoryVT(), - LD->isVolatile(), - LD->getAlignment()); - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1))); - break; - } - case ISD::SELECT: { - Tmp2 = PromoteOp(Node->getOperand(1)); // Legalize the op0 - Tmp3 = PromoteOp(Node->getOperand(2)); // Legalize the op1 - - MVT VT2 = Tmp2.getValueType(); - assert(VT2 == Tmp3.getValueType() - && "PromoteOp SELECT: Operands 2 and 3 ValueTypes don't match"); - // Ensure that the resulting node is at least the same size as the operands' - // value types, because we cannot assume that TLI.getSetCCValueType() is - // constant. - Result = DAG.getNode(ISD::SELECT, dl, VT2, Node->getOperand(0), Tmp2, Tmp3); - break; - } - case ISD::SELECT_CC: - Tmp2 = PromoteOp(Node->getOperand(2)); // True - Tmp3 = PromoteOp(Node->getOperand(3)); // False - Result = DAG.getNode(ISD::SELECT_CC, dl, NVT, Node->getOperand(0), - Node->getOperand(1), Tmp2, Tmp3, Node->getOperand(4)); - break; - case ISD::BSWAP: - Tmp1 = Node->getOperand(0); - Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Tmp1); - Tmp1 = DAG.getNode(ISD::BSWAP, dl, NVT, Tmp1); - Result = DAG.getNode(ISD::SRL, dl, NVT, Tmp1, - DAG.getConstant(NVT.getSizeInBits() - - VT.getSizeInBits(), - TLI.getShiftAmountTy())); - break; - case ISD::CTPOP: - case ISD::CTTZ: - case ISD::CTLZ: - // Zero extend the argument - Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(0)); - // Perform the larger operation, then subtract if needed. - Tmp1 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1); - switch(Node->getOpcode()) { - case ISD::CTPOP: - Result = Tmp1; - break; - case ISD::CTTZ: - // if Tmp1 == sizeinbits(NVT) then Tmp1 = sizeinbits(Old VT) - Tmp2 = DAG.getSetCC(dl, TLI.getSetCCResultType(Tmp1.getValueType()), Tmp1, - DAG.getConstant(NVT.getSizeInBits(), NVT), - ISD::SETEQ); - Result = DAG.getNode(ISD::SELECT, dl, NVT, Tmp2, - DAG.getConstant(VT.getSizeInBits(), NVT), Tmp1); - break; - case ISD::CTLZ: - //Tmp1 = Tmp1 - (sizeinbits(NVT) - sizeinbits(Old VT)) - Result = DAG.getNode(ISD::SUB, dl, NVT, Tmp1, - DAG.getConstant(NVT.getSizeInBits() - - VT.getSizeInBits(), NVT)); - break; - } - break; - case ISD::EXTRACT_SUBVECTOR: - Result = PromoteOp(ExpandEXTRACT_SUBVECTOR(Op)); - break; - case ISD::EXTRACT_VECTOR_ELT: - Result = PromoteOp(ExpandEXTRACT_VECTOR_ELT(Op)); - break; - } - - assert(Result.getNode() && "Didn't set a result!"); - - // Make sure the result is itself legal. - Result = LegalizeOp(Result); - - // Remember that we promoted this! - AddPromotedOperand(Op, Result); - return Result; -} - /// ExpandEXTRACT_VECTOR_ELT - Expand an EXTRACT_VECTOR_ELT operation into /// a legal EXTRACT_VECTOR_ELT operation, scalar code, or memory traffic, /// based on the vector type. The return type of this matches the element type @@ -4654,37 +3844,6 @@ return DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr, NULL, 0); } -/// ExpandEXTRACT_SUBVECTOR - Expand a EXTRACT_SUBVECTOR operation. For now -/// we assume the operation can be split if it is not already legal. -SDValue SelectionDAGLegalize::ExpandEXTRACT_SUBVECTOR(SDValue Op) { - // We know that operand #0 is the Vec vector. For now we assume the index - // is a constant and that the extracted result is a supported hardware type. - SDValue Vec = Op.getOperand(0); - SDValue Idx = LegalizeOp(Op.getOperand(1)); - - unsigned NumElems = Vec.getValueType().getVectorNumElements(); - - if (NumElems == Op.getValueType().getVectorNumElements()) { - // This must be an access of the desired vector length. Return it. - return Vec; - } - - ConstantSDNode *CIdx = cast(Idx); - SDValue Lo, Hi; - SplitVectorOp(Vec, Lo, Hi); - if (CIdx->getZExtValue() < NumElems/2) { - Vec = Lo; - } else { - Vec = Hi; - Idx = DAG.getConstant(CIdx->getZExtValue() - NumElems/2, - Idx.getValueType()); - } - - // It's now an extract from the appropriate high or low part. Recurse. - Op = DAG.UpdateNodeOperands(Op, Vec, Idx); - return ExpandEXTRACT_SUBVECTOR(Op); -} - /// LegalizeSetCCOperands - Attempts to create a legal LHS and RHS for a SETCC /// with condition CC on the current target. This usually involves legalizing /// or promoting the arguments. In the case where LHS and RHS must be expanded, @@ -4695,259 +3854,8 @@ SDValue &RHS, SDValue &CC, DebugLoc dl) { - SDValue Tmp1, Tmp2, Tmp3, Result; - - switch (getTypeAction(LHS.getValueType())) { - case Legal: - Tmp1 = LegalizeOp(LHS); // LHS - Tmp2 = LegalizeOp(RHS); // RHS - break; - case Promote: - Tmp1 = PromoteOp(LHS); // LHS - Tmp2 = PromoteOp(RHS); // RHS - - // If this is an FP compare, the operands have already been extended. - if (LHS.getValueType().isInteger()) { - MVT VT = LHS.getValueType(); - MVT NVT = TLI.getTypeToTransformTo(VT); - - // Otherwise, we have to insert explicit sign or zero extends. Note - // that we could insert sign extends for ALL conditions, but zero extend - // is cheaper on many machines (an AND instead of two shifts), so prefer - // it. - switch (cast(CC)->get()) { - default: assert(0 && "Unknown integer comparison!"); - case ISD::SETEQ: - case ISD::SETNE: - case ISD::SETUGE: - case ISD::SETUGT: - case ISD::SETULE: - case ISD::SETULT: - // ALL of these operations will work if we either sign or zero extend - // the operands (including the unsigned comparisons!). Zero extend is - // usually a simpler/cheaper operation, so prefer it. - Tmp1 = DAG.getZeroExtendInReg(Tmp1, dl, VT); - Tmp2 = DAG.getZeroExtendInReg(Tmp2, dl, VT); - break; - case ISD::SETGE: - case ISD::SETGT: - case ISD::SETLT: - case ISD::SETLE: - Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Tmp1, - DAG.getValueType(VT)); - Tmp2 = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Tmp2, - DAG.getValueType(VT)); - Tmp1 = LegalizeOp(Tmp1); // Relegalize new nodes. - Tmp2 = LegalizeOp(Tmp2); // Relegalize new nodes. - break; - } - } - break; - case Expand: { - MVT VT = LHS.getValueType(); - if (VT == MVT::f32 || VT == MVT::f64) { - // Expand into one or more soft-fp libcall(s). - RTLIB::Libcall LC1 = RTLIB::UNKNOWN_LIBCALL, LC2 = RTLIB::UNKNOWN_LIBCALL; - switch (cast(CC)->get()) { - case ISD::SETEQ: - case ISD::SETOEQ: - LC1 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : RTLIB::OEQ_F64; - break; - case ISD::SETNE: - case ISD::SETUNE: - LC1 = (VT == MVT::f32) ? RTLIB::UNE_F32 : RTLIB::UNE_F64; - break; - case ISD::SETGE: - case ISD::SETOGE: - LC1 = (VT == MVT::f32) ? RTLIB::OGE_F32 : RTLIB::OGE_F64; - break; - case ISD::SETLT: - case ISD::SETOLT: - LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64; - break; - case ISD::SETLE: - case ISD::SETOLE: - LC1 = (VT == MVT::f32) ? RTLIB::OLE_F32 : RTLIB::OLE_F64; - break; - case ISD::SETGT: - case ISD::SETOGT: - LC1 = (VT == MVT::f32) ? RTLIB::OGT_F32 : RTLIB::OGT_F64; - break; - case ISD::SETUO: - LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64; - break; - case ISD::SETO: - LC1 = (VT == MVT::f32) ? RTLIB::O_F32 : RTLIB::O_F64; - break; - default: - LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64; - switch (cast(CC)->get()) { - case ISD::SETONE: - // SETONE = SETOLT | SETOGT - LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64; - // Fallthrough - case ISD::SETUGT: - LC2 = (VT == MVT::f32) ? RTLIB::OGT_F32 : RTLIB::OGT_F64; - break; - case ISD::SETUGE: - LC2 = (VT == MVT::f32) ? RTLIB::OGE_F32 : RTLIB::OGE_F64; - break; - case ISD::SETULT: - LC2 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64; - break; - case ISD::SETULE: - LC2 = (VT == MVT::f32) ? RTLIB::OLE_F32 : RTLIB::OLE_F64; - break; - case ISD::SETUEQ: - LC2 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : RTLIB::OEQ_F64; - break; - default: assert(0 && "Unsupported FP setcc!"); - } - } - - SDValue Dummy; - SDValue Ops[2] = { LHS, RHS }; - Tmp1 = ExpandLibCall(LC1, DAG.getMergeValues(Ops, 2, dl).getNode(), - false /*sign irrelevant*/, Dummy); - Tmp2 = DAG.getConstant(0, MVT::i32); - CC = DAG.getCondCode(TLI.getCmpLibcallCC(LC1)); - if (LC2 != RTLIB::UNKNOWN_LIBCALL) { - Tmp1 = DAG.getNode(ISD::SETCC, dl, - TLI.getSetCCResultType(Tmp1.getValueType()), - Tmp1, Tmp2, CC); - LHS = ExpandLibCall(LC2, DAG.getMergeValues(Ops, 2, dl).getNode(), - false /*sign irrelevant*/, Dummy); - Tmp2 = DAG.getNode(ISD::SETCC, dl, - TLI.getSetCCResultType(LHS.getValueType()), LHS, - Tmp2, DAG.getCondCode(TLI.getCmpLibcallCC(LC2))); - Tmp1 = DAG.getNode(ISD::OR, dl, Tmp1.getValueType(), Tmp1, Tmp2); - Tmp2 = SDValue(); - } - LHS = LegalizeOp(Tmp1); - RHS = Tmp2; - return; - } - - SDValue LHSLo, LHSHi, RHSLo, RHSHi; - ExpandOp(LHS, LHSLo, LHSHi); - ExpandOp(RHS, RHSLo, RHSHi); - ISD::CondCode CCCode = cast(CC)->get(); - - if (VT==MVT::ppcf128) { - // FIXME: This generated code sucks. We want to generate - // FCMPU crN, hi1, hi2 - // BNE crN, L: - // FCMPU crN, lo1, lo2 - // The following can be improved, but not that much. - Tmp1 = DAG.getSetCC(dl, TLI.getSetCCResultType(LHSHi.getValueType()), - LHSHi, RHSHi, ISD::SETOEQ); - Tmp2 = DAG.getSetCC(dl, TLI.getSetCCResultType(LHSLo.getValueType()), - LHSLo, RHSLo, CCCode); - Tmp3 = DAG.getNode(ISD::AND, dl, Tmp1.getValueType(), Tmp1, Tmp2); - Tmp1 = DAG.getSetCC(dl, TLI.getSetCCResultType(LHSHi.getValueType()), - LHSHi, RHSHi, ISD::SETUNE); - Tmp2 = DAG.getSetCC(dl, TLI.getSetCCResultType(LHSHi.getValueType()), - LHSHi, RHSHi, CCCode); - Tmp1 = DAG.getNode(ISD::AND, dl, Tmp1.getValueType(), Tmp1, Tmp2); - Tmp1 = DAG.getNode(ISD::OR, dl, Tmp1.getValueType(), Tmp1, Tmp3); - Tmp2 = SDValue(); - break; - } - - switch (CCCode) { - case ISD::SETEQ: - case ISD::SETNE: - if (RHSLo == RHSHi) - if (ConstantSDNode *RHSCST = dyn_cast(RHSLo)) - if (RHSCST->isAllOnesValue()) { - // Comparison to -1. - Tmp1 = DAG.getNode(ISD::AND, dl,LHSLo.getValueType(), LHSLo, LHSHi); - Tmp2 = RHSLo; - break; - } - - Tmp1 = DAG.getNode(ISD::XOR, dl, LHSLo.getValueType(), LHSLo, RHSLo); - Tmp2 = DAG.getNode(ISD::XOR, dl, LHSLo.getValueType(), LHSHi, RHSHi); - Tmp1 = DAG.getNode(ISD::OR, dl, Tmp1.getValueType(), Tmp1, Tmp2); - Tmp2 = DAG.getConstant(0, Tmp1.getValueType()); - break; - default: - // If this is a comparison of the sign bit, just look at the top part. - // X > -1, x < 0 - if (ConstantSDNode *CST = dyn_cast(RHS)) - if ((cast(CC)->get() == ISD::SETLT && - CST->isNullValue()) || // X < 0 - (cast(CC)->get() == ISD::SETGT && - CST->isAllOnesValue())) { // X > -1 - Tmp1 = LHSHi; - Tmp2 = RHSHi; - break; - } - - // FIXME: This generated code sucks. - ISD::CondCode LowCC; - switch (CCCode) { - default: assert(0 && "Unknown integer setcc!"); - case ISD::SETLT: - case ISD::SETULT: LowCC = ISD::SETULT; break; - case ISD::SETGT: - case ISD::SETUGT: LowCC = ISD::SETUGT; break; - case ISD::SETLE: - case ISD::SETULE: LowCC = ISD::SETULE; break; - case ISD::SETGE: - case ISD::SETUGE: LowCC = ISD::SETUGE; break; - } - - // Tmp1 = lo(op1) < lo(op2) // Always unsigned comparison - // Tmp2 = hi(op1) < hi(op2) // Signedness depends on operands - // dest = hi(op1) == hi(op2) ? Tmp1 : Tmp2; - - // NOTE: on targets without efficient SELECT of bools, we can always use - // this identity: (B1 ? B2 : B3) --> (B1 & B2)|(!B1&B3) - TargetLowering::DAGCombinerInfo DagCombineInfo(DAG, false, true, NULL); - Tmp1 = TLI.SimplifySetCC(TLI.getSetCCResultType(LHSLo.getValueType()), - LHSLo, RHSLo, LowCC, false, DagCombineInfo, dl); - if (!Tmp1.getNode()) - Tmp1 = DAG.getSetCC(dl, TLI.getSetCCResultType(LHSLo.getValueType()), - LHSLo, RHSLo, LowCC); - Tmp2 = TLI.SimplifySetCC(TLI.getSetCCResultType(LHSHi.getValueType()), - LHSHi, RHSHi, CCCode, false, DagCombineInfo, dl); - if (!Tmp2.getNode()) - Tmp2 = DAG.getNode(ISD::SETCC, dl, - TLI.getSetCCResultType(LHSHi.getValueType()), - LHSHi, RHSHi, CC); - - ConstantSDNode *Tmp1C = dyn_cast(Tmp1.getNode()); - ConstantSDNode *Tmp2C = dyn_cast(Tmp2.getNode()); - if ((Tmp1C && Tmp1C->isNullValue()) || - (Tmp2C && Tmp2C->isNullValue() && - (CCCode == ISD::SETLE || CCCode == ISD::SETGE || - CCCode == ISD::SETUGE || CCCode == ISD::SETULE)) || - (Tmp2C && Tmp2C->getAPIntValue() == 1 && - (CCCode == ISD::SETLT || CCCode == ISD::SETGT || - CCCode == ISD::SETUGT || CCCode == ISD::SETULT))) { - // low part is known false, returns high part. - // For LE / GE, if high part is known false, ignore the low part. - // For LT / GT, if high part is known true, ignore the low part. - Tmp1 = Tmp2; - Tmp2 = SDValue(); - } else { - Result = TLI.SimplifySetCC(TLI.getSetCCResultType(LHSHi.getValueType()), - LHSHi, RHSHi, ISD::SETEQ, false, - DagCombineInfo, dl); - if (!Result.getNode()) - Result=DAG.getSetCC(dl, TLI.getSetCCResultType(LHSHi.getValueType()), - LHSHi, RHSHi, ISD::SETEQ); - Result = LegalizeOp(DAG.getNode(ISD::SELECT, dl, Tmp1.getValueType(), - Result, Tmp1, Tmp2)); - Tmp1 = Result; - Tmp2 = SDValue(); - } - } - } - } - LHS = Tmp1; - RHS = Tmp2; + LHS = LegalizeOp(LHS); + RHS = LegalizeOp(RHS); } /// LegalizeSetCCCondCode - Legalize a SETCC with given LHS and RHS and @@ -5222,177 +4130,6 @@ return DAG.getLoad(VT, dl, StoreChain, FIPtr, SV, 0); } -void SelectionDAGLegalize::ExpandShiftParts(unsigned NodeOp, - SDValue Op, SDValue Amt, - SDValue &Lo, SDValue &Hi, - DebugLoc dl) { - // Expand the subcomponents. - SDValue LHSL, LHSH; - ExpandOp(Op, LHSL, LHSH); - - SDValue Ops[] = { LHSL, LHSH, Amt }; - MVT VT = LHSL.getValueType(); - Lo = DAG.getNode(NodeOp, dl, DAG.getVTList(VT, VT), Ops, 3); - Hi = Lo.getValue(1); -} - - -/// ExpandShift - Try to find a clever way to expand this shift operation out to -/// smaller elements. If we can't find a way that is more efficient than a -/// libcall on this target, return false. Otherwise, return true with the -/// low-parts expanded into Lo and Hi. -bool SelectionDAGLegalize::ExpandShift(unsigned Opc, SDValue Op, SDValue Amt, - SDValue &Lo, SDValue &Hi, - DebugLoc dl) { - assert((Opc == ISD::SHL || Opc == ISD::SRA || Opc == ISD::SRL) && - "This is not a shift!"); - - MVT NVT = TLI.getTypeToTransformTo(Op.getValueType()); - SDValue ShAmt = LegalizeOp(Amt); - MVT ShTy = ShAmt.getValueType(); - unsigned ShBits = ShTy.getSizeInBits(); - unsigned VTBits = Op.getValueType().getSizeInBits(); - unsigned NVTBits = NVT.getSizeInBits(); - - // Handle the case when Amt is an immediate. - if (ConstantSDNode *CN = dyn_cast(Amt.getNode())) { - unsigned Cst = CN->getZExtValue(); - // Expand the incoming operand to be shifted, so that we have its parts - SDValue InL, InH; - ExpandOp(Op, InL, InH); - switch(Opc) { - case ISD::SHL: - if (Cst > VTBits) { - Lo = DAG.getConstant(0, NVT); - Hi = DAG.getConstant(0, NVT); - } else if (Cst > NVTBits) { - Lo = DAG.getConstant(0, NVT); - Hi = DAG.getNode(ISD::SHL, dl, - NVT, InL, DAG.getConstant(Cst-NVTBits, ShTy)); - } else if (Cst == NVTBits) { - Lo = DAG.getConstant(0, NVT); - Hi = InL; - } else { - Lo = DAG.getNode(ISD::SHL, dl, NVT, InL, DAG.getConstant(Cst, ShTy)); - Hi = DAG.getNode(ISD::OR, dl, NVT, - DAG.getNode(ISD::SHL, dl, NVT, InH, DAG.getConstant(Cst, ShTy)), - DAG.getNode(ISD::SRL, dl, NVT, InL, - DAG.getConstant(NVTBits-Cst, ShTy))); - } - return true; - case ISD::SRL: - if (Cst > VTBits) { - Lo = DAG.getConstant(0, NVT); - Hi = DAG.getConstant(0, NVT); - } else if (Cst > NVTBits) { - Lo = DAG.getNode(ISD::SRL, dl, NVT, - InH, DAG.getConstant(Cst-NVTBits, ShTy)); - Hi = DAG.getConstant(0, NVT); - } else if (Cst == NVTBits) { - Lo = InH; - Hi = DAG.getConstant(0, NVT); - } else { - Lo = DAG.getNode(ISD::OR, dl, NVT, - DAG.getNode(ISD::SRL, dl, NVT, InL, DAG.getConstant(Cst, ShTy)), - DAG.getNode(ISD::SHL, dl, NVT, InH, - DAG.getConstant(NVTBits-Cst, ShTy))); - Hi = DAG.getNode(ISD::SRL, dl, NVT, InH, DAG.getConstant(Cst, ShTy)); - } - return true; - case ISD::SRA: - if (Cst > VTBits) { - Hi = Lo = DAG.getNode(ISD::SRA, dl, NVT, InH, - DAG.getConstant(NVTBits-1, ShTy)); - } else if (Cst > NVTBits) { - Lo = DAG.getNode(ISD::SRA, dl, NVT, InH, - DAG.getConstant(Cst-NVTBits, ShTy)); - Hi = DAG.getNode(ISD::SRA, dl, NVT, InH, - DAG.getConstant(NVTBits-1, ShTy)); - } else if (Cst == NVTBits) { - Lo = InH; - Hi = DAG.getNode(ISD::SRA, dl, NVT, InH, - DAG.getConstant(NVTBits-1, ShTy)); - } else { - Lo = DAG.getNode(ISD::OR, dl, NVT, - DAG.getNode(ISD::SRL, dl, NVT, InL, DAG.getConstant(Cst, ShTy)), - DAG.getNode(ISD::SHL, dl, - NVT, InH, DAG.getConstant(NVTBits-Cst, ShTy))); - Hi = DAG.getNode(ISD::SRA, dl, NVT, InH, DAG.getConstant(Cst, ShTy)); - } - return true; - } - } - - // Okay, the shift amount isn't constant. However, if we can tell that it is - // >= 32 or < 32, we can still simplify it, without knowing the actual value. - APInt Mask = APInt::getHighBitsSet(ShBits, ShBits - Log2_32(NVTBits)); - APInt KnownZero, KnownOne; - DAG.ComputeMaskedBits(Amt, Mask, KnownZero, KnownOne); - - // If we know that if any of the high bits of the shift amount are one, then - // we can do this as a couple of simple shifts. - if (KnownOne.intersects(Mask)) { - // Mask out the high bit, which we know is set. - Amt = DAG.getNode(ISD::AND, dl, Amt.getValueType(), Amt, - DAG.getConstant(~Mask, Amt.getValueType())); - - // Expand the incoming operand to be shifted, so that we have its parts - SDValue InL, InH; - ExpandOp(Op, InL, InH); - switch(Opc) { - case ISD::SHL: - Lo = DAG.getConstant(0, NVT); // Low part is zero. - Hi = DAG.getNode(ISD::SHL, dl, NVT, InL, Amt); // High part from Lo part. - return true; - case ISD::SRL: - Hi = DAG.getConstant(0, NVT); // Hi part is zero. - Lo = DAG.getNode(ISD::SRL, dl, NVT, InH, Amt); // Lo part from Hi part. - return true; - case ISD::SRA: - Hi = DAG.getNode(ISD::SRA, dl, NVT, InH, // Sign extend high part. - DAG.getConstant(NVTBits-1, Amt.getValueType())); - Lo = DAG.getNode(ISD::SRA, dl, NVT, InH, Amt); // Lo part from Hi part. - return true; - } - } - - // If we know that the high bits of the shift amount are all zero, then we can - // do this as a couple of simple shifts. - if ((KnownZero & Mask) == Mask) { - // Compute 32-amt. - SDValue Amt2 = DAG.getNode(ISD::SUB, dl, Amt.getValueType(), - DAG.getConstant(NVTBits, Amt.getValueType()), - Amt); - - // Expand the incoming operand to be shifted, so that we have its parts - SDValue InL, InH; - ExpandOp(Op, InL, InH); - switch(Opc) { - case ISD::SHL: - Lo = DAG.getNode(ISD::SHL, dl, NVT, InL, Amt); - Hi = DAG.getNode(ISD::OR, dl, NVT, - DAG.getNode(ISD::SHL, dl, NVT, InH, Amt), - DAG.getNode(ISD::SRL, dl, NVT, InL, Amt2)); - return true; - case ISD::SRL: - Hi = DAG.getNode(ISD::SRL, dl, NVT, InH, Amt); - Lo = DAG.getNode(ISD::OR, dl, NVT, - DAG.getNode(ISD::SRL, dl, NVT, InL, Amt), - DAG.getNode(ISD::SHL, dl, NVT, InH, Amt2)); - return true; - case ISD::SRA: - Hi = DAG.getNode(ISD::SRA, dl, NVT, InH, Amt); - Lo = DAG.getNode(ISD::OR, dl, NVT, - DAG.getNode(ISD::SRL, dl, NVT, InL, Amt), - DAG.getNode(ISD::SHL, dl, NVT, InH, Amt2)); - return true; - } - } - - return false; -} - - // ExpandLibCall - Expand a node into a call to a libcall. If the result value // does not fit into a register, return the lo part and set the hi part to the // by-reg argument. If it does fit into a single register, return the result @@ -5429,17 +4166,7 @@ // the LastCALLSEQ_END to the legalized version of the CALLSEQ_END node that // was added by LowerCallTo (guaranteeing proper serialization of calls). LegalizeOp(CallInfo.second); - SDValue Result; - switch (getTypeAction(CallInfo.first.getValueType())) { - default: assert(0 && "Unknown thing"); - case Legal: - Result = CallInfo.first; - break; - case Expand: - ExpandOp(CallInfo.first, Result, Hi); - break; - } - return Result; + return CallInfo.first; } /// LegalizeINT_TO_FP - Legalize a [US]INT_TO_FP operation. @@ -5449,197 +4176,31 @@ DebugLoc dl) { bool isCustom = false; SDValue Tmp1; - switch (getTypeAction(Op.getValueType())) { - case Legal: - switch (TLI.getOperationAction(isSigned ? ISD::SINT_TO_FP : ISD::UINT_TO_FP, - Op.getValueType())) { - default: assert(0 && "Unknown operation action!"); - case TargetLowering::Custom: - isCustom = true; - // FALLTHROUGH - case TargetLowering::Legal: - Tmp1 = LegalizeOp(Op); - if (Result.getNode()) - Result = DAG.UpdateNodeOperands(Result, Tmp1); - else - Result = DAG.getNode(isSigned ? ISD::SINT_TO_FP : ISD::UINT_TO_FP, dl, - DestTy, Tmp1); - if (isCustom) { - Tmp1 = TLI.LowerOperation(Result, DAG); - if (Tmp1.getNode()) Result = Tmp1; - } - break; - case TargetLowering::Expand: - Result = ExpandLegalINT_TO_FP(isSigned, LegalizeOp(Op), DestTy, dl); - break; - case TargetLowering::Promote: - Result = PromoteLegalINT_TO_FP(LegalizeOp(Op), DestTy, isSigned, dl); - break; - } - break; - case Expand: - Result = ExpandIntToFP(isSigned, DestTy, Op, dl) ; - break; - case Promote: - Tmp1 = PromoteOp(Op); - if (isSigned) { - Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, Tmp1.getValueType(), - Tmp1, DAG.getValueType(Op.getValueType())); - } else { - Tmp1 = DAG.getZeroExtendInReg(Tmp1, dl, Op.getValueType()); - } + switch (TLI.getOperationAction(isSigned ? ISD::SINT_TO_FP : ISD::UINT_TO_FP, + Op.getValueType())) { + default: assert(0 && "Unknown operation action!"); + case TargetLowering::Custom: + isCustom = true; + // FALLTHROUGH + case TargetLowering::Legal: + Tmp1 = LegalizeOp(Op); if (Result.getNode()) Result = DAG.UpdateNodeOperands(Result, Tmp1); else Result = DAG.getNode(isSigned ? ISD::SINT_TO_FP : ISD::UINT_TO_FP, dl, DestTy, Tmp1); - Result = LegalizeOp(Result); // The 'op' is not necessarily legal! - break; - } - return Result; -} - -/// ExpandIntToFP - Expand a [US]INT_TO_FP operation. -/// -SDValue SelectionDAGLegalize:: -ExpandIntToFP(bool isSigned, MVT DestTy, SDValue Source, DebugLoc dl) { - MVT SourceVT = Source.getValueType(); - bool ExpandSource = getTypeAction(SourceVT) == Expand; - - // Expand unsupported int-to-fp vector casts by unrolling them. - if (DestTy.isVector()) { - if (!ExpandSource) - return LegalizeOp(UnrollVectorOp(Source)); - MVT DestEltTy = DestTy.getVectorElementType(); - if (DestTy.getVectorNumElements() == 1) { - SDValue Scalar = ScalarizeVectorOp(Source); - SDValue Result = LegalizeINT_TO_FP(SDValue(), isSigned, - DestEltTy, Scalar, dl); - return DAG.getNode(ISD::BUILD_VECTOR, dl, DestTy, Result); - } - SDValue Lo, Hi; - SplitVectorOp(Source, Lo, Hi); - MVT SplitDestTy = MVT::getVectorVT(DestEltTy, - DestTy.getVectorNumElements() / 2); - SDValue LoResult = LegalizeINT_TO_FP(SDValue(), isSigned, SplitDestTy, - Lo, dl); - SDValue HiResult = LegalizeINT_TO_FP(SDValue(), isSigned, SplitDestTy, - Hi, dl); - return LegalizeOp(DAG.getNode(ISD::CONCAT_VECTORS, dl, DestTy, LoResult, - HiResult)); - } - - // Special case for i32 source to take advantage of UINTTOFP_I32_F32, etc. - if (!isSigned && SourceVT != MVT::i32) { - // The integer value loaded will be incorrectly if the 'sign bit' of the - // incoming integer is set. To handle this, we dynamically test to see if - // it is set, and, if so, add a fudge factor. - SDValue Hi; - if (ExpandSource) { - SDValue Lo; - ExpandOp(Source, Lo, Hi); - Source = DAG.getNode(ISD::BUILD_PAIR, dl, SourceVT, Lo, Hi); - } else { - // The comparison for the sign bit will use the entire operand. - Hi = Source; - } - - // Check to see if the target has a custom way to lower this. If so, use - // it. (Note we've already expanded the operand in this case.) - switch (TLI.getOperationAction(ISD::UINT_TO_FP, SourceVT)) { - default: assert(0 && "This action not implemented for this operation!"); - case TargetLowering::Legal: - case TargetLowering::Expand: - break; // This case is handled below. - case TargetLowering::Custom: { - SDValue NV = TLI.LowerOperation(DAG.getNode(ISD::UINT_TO_FP, dl, DestTy, - Source), DAG); - if (NV.getNode()) - return LegalizeOp(NV); - break; // The target decided this was legal after all - } - } - - // If this is unsigned, and not supported, first perform the conversion to - // signed, then adjust the result if the sign bit is set. - SDValue SignedConv = ExpandIntToFP(true, DestTy, Source, dl); - - SDValue SignSet = DAG.getSetCC(dl, - TLI.getSetCCResultType(Hi.getValueType()), - Hi, DAG.getConstant(0, Hi.getValueType()), - ISD::SETLT); - SDValue Zero = DAG.getIntPtrConstant(0), Four = DAG.getIntPtrConstant(4); - SDValue CstOffset = DAG.getNode(ISD::SELECT, dl, Zero.getValueType(), - SignSet, Four, Zero); - uint64_t FF = 0x5f800000ULL; - if (TLI.isLittleEndian()) FF <<= 32; - Constant *FudgeFactor = ConstantInt::get(Type::Int64Ty, FF); - - SDValue CPIdx = DAG.getConstantPool(FudgeFactor, TLI.getPointerTy()); - unsigned Alignment = cast(CPIdx)->getAlignment(); - CPIdx = DAG.getNode(ISD::ADD, dl, TLI.getPointerTy(), CPIdx, CstOffset); - Alignment = std::min(Alignment, 4u); - SDValue FudgeInReg; - if (DestTy == MVT::f32) - FudgeInReg = DAG.getLoad(MVT::f32, dl, DAG.getEntryNode(), CPIdx, - PseudoSourceValue::getConstantPool(), 0, - false, Alignment); - else if (DestTy.bitsGT(MVT::f32)) - // FIXME: Avoid the extend by construction the right constantpool? - FudgeInReg = DAG.getExtLoad(ISD::EXTLOAD, dl, DestTy, DAG.getEntryNode(), - CPIdx, - PseudoSourceValue::getConstantPool(), 0, - MVT::f32, false, Alignment); - else - assert(0 && "Unexpected conversion"); - - MVT SCVT = SignedConv.getValueType(); - if (SCVT != DestTy) { - // Destination type needs to be expanded as well. The FADD now we are - // constructing will be expanded into a libcall. - if (SCVT.getSizeInBits() != DestTy.getSizeInBits()) { - assert(SCVT.getSizeInBits() * 2 == DestTy.getSizeInBits()); - SignedConv = DAG.getNode(ISD::BUILD_PAIR, dl, DestTy, - SignedConv, SignedConv.getValue(1)); - } - SignedConv = DAG.getNode(ISD::BIT_CONVERT, dl, DestTy, SignedConv); + if (isCustom) { + Tmp1 = TLI.LowerOperation(Result, DAG); + if (Tmp1.getNode()) Result = Tmp1; } - return DAG.getNode(ISD::FADD, dl, DestTy, SignedConv, FudgeInReg); - } - - // Check to see if the target has a custom way to lower this. If so, use it. - switch (TLI.getOperationAction(ISD::SINT_TO_FP, SourceVT)) { - default: assert(0 && "This action not implemented for this operation!"); - case TargetLowering::Legal: + break; case TargetLowering::Expand: - break; // This case is handled below. - case TargetLowering::Custom: { - SDValue NV = TLI.LowerOperation(DAG.getNode(ISD::SINT_TO_FP, dl, DestTy, - Source), DAG); - if (NV.getNode()) - return LegalizeOp(NV); - break; // The target decided this was legal after all - } + Result = ExpandLegalINT_TO_FP(isSigned, LegalizeOp(Op), DestTy, dl); + break; + case TargetLowering::Promote: + Result = PromoteLegalINT_TO_FP(LegalizeOp(Op), DestTy, isSigned, dl); + break; } - - // Expand the source, then glue it back together for the call. We must expand - // the source in case it is shared (this pass of legalize must traverse it). - if (ExpandSource) { - SDValue SrcLo, SrcHi; - ExpandOp(Source, SrcLo, SrcHi); - Source = DAG.getNode(ISD::BUILD_PAIR, dl, SourceVT, SrcLo, SrcHi); - } - - RTLIB::Libcall LC = isSigned ? - RTLIB::getSINTTOFP(SourceVT, DestTy) : - RTLIB::getUINTTOFP(SourceVT, DestTy); - assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unknown int value type"); - - Source = DAG.getNode(ISD::SINT_TO_FP, dl, DestTy, Source); - SDValue HiPart; - SDValue Result = ExpandLibCall(LC, Source.getNode(), isSigned, HiPart); - if (Result.getValueType() != DestTy && HiPart.getNode()) - Result = DAG.getNode(ISD::BUILD_PAIR, dl, DestTy, Result, HiPart); return Result; } @@ -5990,2205 +4551,6 @@ } } -/// ExpandOp - Expand the specified SDValue into its two component pieces -/// Lo&Hi. Note that the Op MUST be an expanded type. As a result of this, the -/// LegalizedNodes map is filled in for any results that are not expanded, the -/// ExpandedNodes map is filled in for any results that are expanded, and the -/// Lo/Hi values are returned. -void SelectionDAGLegalize::ExpandOp(SDValue Op, SDValue &Lo, SDValue &Hi){ - assert(0 && "This should be dead!"); - MVT VT = Op.getValueType(); - MVT NVT = TLI.getTypeToTransformTo(VT); - SDNode *Node = Op.getNode(); - DebugLoc dl = Node->getDebugLoc(); - assert(getTypeAction(VT) == Expand && "Not an expanded type!"); - assert(((NVT.isInteger() && NVT.bitsLT(VT)) || VT.isFloatingPoint() || - VT.isVector()) && "Cannot expand to FP value or to larger int value!"); - - // See if we already expanded it. - DenseMap >::iterator I - = ExpandedNodes.find(Op); - if (I != ExpandedNodes.end()) { - Lo = I->second.first; - Hi = I->second.second; - return; - } - - switch (Node->getOpcode()) { - case ISD::CopyFromReg: - assert(0 && "CopyFromReg must be legal!"); - case ISD::FP_ROUND_INREG: - if (VT == MVT::ppcf128 && - TLI.getOperationAction(ISD::FP_ROUND_INREG, VT) == - TargetLowering::Custom) { - SDValue SrcLo, SrcHi, Src; - ExpandOp(Op.getOperand(0), SrcLo, SrcHi); - Src = DAG.getNode(ISD::BUILD_PAIR, dl, VT, SrcLo, SrcHi); - SDValue Result = - TLI.LowerOperation(DAG.getNode(ISD::FP_ROUND_INREG, dl, VT, Src, - Op.getOperand(1)), DAG); - assert(Result.getNode()->getOpcode() == ISD::BUILD_PAIR); - Lo = Result.getNode()->getOperand(0); - Hi = Result.getNode()->getOperand(1); - break; - } - // fall through - default: -#ifndef NDEBUG - cerr << "NODE: "; Node->dump(&DAG); cerr << "\n"; -#endif - assert(0 && "Do not know how to expand this operator!"); - abort(); - case ISD::EXTRACT_ELEMENT: - ExpandOp(Node->getOperand(0), Lo, Hi); - if (cast(Node->getOperand(1))->getZExtValue()) - return ExpandOp(Hi, Lo, Hi); - return ExpandOp(Lo, Lo, Hi); - case ISD::EXTRACT_VECTOR_ELT: - // ExpandEXTRACT_VECTOR_ELT tolerates invalid result types. - Lo = ExpandEXTRACT_VECTOR_ELT(Op); - return ExpandOp(Lo, Lo, Hi); - case ISD::UNDEF: - Lo = DAG.getUNDEF(NVT); - Hi = DAG.getUNDEF(NVT); - break; - case ISD::Constant: { - unsigned NVTBits = NVT.getSizeInBits(); - const APInt &Cst = cast(Node)->getAPIntValue(); - Lo = DAG.getConstant(APInt(Cst).trunc(NVTBits), NVT); - Hi = DAG.getConstant(Cst.lshr(NVTBits).trunc(NVTBits), NVT); - break; - } - case ISD::ConstantFP: { - ConstantFPSDNode *CFP = cast(Node); - if (CFP->getValueType(0) == MVT::ppcf128) { - APInt api = CFP->getValueAPF().bitcastToAPInt(); - Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &api.getRawData()[1])), - MVT::f64); - Hi = DAG.getConstantFP(APFloat(APInt(64, 1, &api.getRawData()[0])), - MVT::f64); - break; - } - Lo = ExpandConstantFP(CFP, false, DAG, TLI); - if (getTypeAction(Lo.getValueType()) == Expand) - ExpandOp(Lo, Lo, Hi); - break; - } - case ISD::BUILD_PAIR: - // Return the operands. - Lo = Node->getOperand(0); - Hi = Node->getOperand(1); - break; - - case ISD::MERGE_VALUES: - if (Node->getNumValues() == 1) { - ExpandOp(Op.getOperand(0), Lo, Hi); - break; - } - // FIXME: For now only expand i64,chain = MERGE_VALUES (x, y) - assert(Op.getResNo() == 0 && Node->getNumValues() == 2 && - Op.getValue(1).getValueType() == MVT::Other && - "unhandled MERGE_VALUES"); - ExpandOp(Op.getOperand(0), Lo, Hi); - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Op.getOperand(1))); - break; - - case ISD::SIGN_EXTEND_INREG: - ExpandOp(Node->getOperand(0), Lo, Hi); - // sext_inreg the low part if needed. - Lo = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NVT, Lo, Node->getOperand(1)); - - // The high part gets the sign extension from the lo-part. This handles - // things like sextinreg V:i64 from i8. - Hi = DAG.getNode(ISD::SRA, dl, NVT, Lo, - DAG.getConstant(NVT.getSizeInBits()-1, - TLI.getShiftAmountTy())); - break; - - case ISD::BSWAP: { - ExpandOp(Node->getOperand(0), Lo, Hi); - SDValue TempLo = DAG.getNode(ISD::BSWAP, dl, NVT, Hi); - Hi = DAG.getNode(ISD::BSWAP, dl, NVT, Lo); - Lo = TempLo; - break; - } - - case ISD::CTPOP: - ExpandOp(Node->getOperand(0), Lo, Hi); - Lo = DAG.getNode(ISD::ADD, dl, NVT, // ctpop(HL) -> ctpop(H)+ctpop(L) - DAG.getNode(ISD::CTPOP, dl, NVT, Lo), - DAG.getNode(ISD::CTPOP, dl, NVT, Hi)); - Hi = DAG.getConstant(0, NVT); - break; - - case ISD::CTLZ: { - // ctlz (HL) -> ctlz(H) != 32 ? ctlz(H) : (ctlz(L)+32) - ExpandOp(Node->getOperand(0), Lo, Hi); - SDValue BitsC = DAG.getConstant(NVT.getSizeInBits(), NVT); - SDValue HLZ = DAG.getNode(ISD::CTLZ, dl, NVT, Hi); - SDValue TopNotZero = DAG.getSetCC(dl, TLI.getSetCCResultType(NVT), HLZ, - BitsC, ISD::SETNE); - SDValue LowPart = DAG.getNode(ISD::CTLZ, dl, NVT, Lo); - LowPart = DAG.getNode(ISD::ADD, dl, NVT, LowPart, BitsC); - - Lo = DAG.getNode(ISD::SELECT, dl, NVT, TopNotZero, HLZ, LowPart); - Hi = DAG.getConstant(0, NVT); - break; - } - - case ISD::CTTZ: { - // cttz (HL) -> cttz(L) != 32 ? cttz(L) : (cttz(H)+32) - ExpandOp(Node->getOperand(0), Lo, Hi); - SDValue BitsC = DAG.getConstant(NVT.getSizeInBits(), NVT); - SDValue LTZ = DAG.getNode(ISD::CTTZ, dl, NVT, Lo); - SDValue BotNotZero = DAG.getSetCC(dl, TLI.getSetCCResultType(NVT), LTZ, - BitsC, ISD::SETNE); - SDValue HiPart = DAG.getNode(ISD::CTTZ, dl, NVT, Hi); - HiPart = DAG.getNode(ISD::ADD, dl, NVT, HiPart, BitsC); - - Lo = DAG.getNode(ISD::SELECT, dl, NVT, BotNotZero, LTZ, HiPart); - Hi = DAG.getConstant(0, NVT); - break; - } - - case ISD::VAARG: { - SDValue Ch = Node->getOperand(0); // Legalize the chain. - SDValue Ptr = Node->getOperand(1); // Legalize the pointer. - Lo = DAG.getVAArg(NVT, dl, Ch, Ptr, Node->getOperand(2)); - Hi = DAG.getVAArg(NVT, dl, Lo.getValue(1), Ptr, Node->getOperand(2)); - - // Remember that we legalized the chain. - Hi = LegalizeOp(Hi); - AddLegalizedOperand(Op.getValue(1), Hi.getValue(1)); - if (TLI.isBigEndian()) - std::swap(Lo, Hi); - break; - } - - case ISD::LOAD: { - LoadSDNode *LD = cast(Node); - SDValue Ch = LD->getChain(); // Legalize the chain. - SDValue Ptr = LD->getBasePtr(); // Legalize the pointer. - ISD::LoadExtType ExtType = LD->getExtensionType(); - const Value *SV = LD->getSrcValue(); - int SVOffset = LD->getSrcValueOffset(); - unsigned Alignment = LD->getAlignment(); - bool isVolatile = LD->isVolatile(); - - if (ExtType == ISD::NON_EXTLOAD) { - Lo = DAG.getLoad(NVT, dl, Ch, Ptr, SV, SVOffset, - isVolatile, Alignment); - if (VT == MVT::f32 || VT == MVT::f64) { - // f32->i32 or f64->i64 one to one expansion. - // Remember that we legalized the chain. - AddLegalizedOperand(SDValue(Node, 1), LegalizeOp(Lo.getValue(1))); - // Recursively expand the new load. - if (getTypeAction(NVT) == Expand) - ExpandOp(Lo, Lo, Hi); - break; - } - - // Increment the pointer to the other half. - unsigned IncrementSize = Lo.getValueType().getSizeInBits()/8; - Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr, - DAG.getIntPtrConstant(IncrementSize)); - SVOffset += IncrementSize; - Alignment = MinAlign(Alignment, IncrementSize); - Hi = DAG.getLoad(NVT, dl, Ch, Ptr, SV, SVOffset, - isVolatile, Alignment); - - // Build a factor node to remember that this load is independent of the - // other one. - SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo.getValue(1), - Hi.getValue(1)); - - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(TF)); - if (TLI.isBigEndian()) - std::swap(Lo, Hi); - } else { - MVT EVT = LD->getMemoryVT(); - - if ((VT == MVT::f64 && EVT == MVT::f32) || - (VT == MVT::ppcf128 && (EVT==MVT::f64 || EVT==MVT::f32))) { - // f64 = EXTLOAD f32 should expand to LOAD, FP_EXTEND - SDValue Load = DAG.getLoad(EVT, dl, Ch, Ptr, SV, - SVOffset, isVolatile, Alignment); - // Remember that we legalized the chain. - AddLegalizedOperand(SDValue(Node, 1), LegalizeOp(Load.getValue(1))); - ExpandOp(DAG.getNode(ISD::FP_EXTEND, dl, VT, Load), Lo, Hi); - break; - } - - if (EVT == NVT) - Lo = DAG.getLoad(NVT, dl, Ch, Ptr, SV, - SVOffset, isVolatile, Alignment); - else - Lo = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr, SV, - SVOffset, EVT, isVolatile, - Alignment); - - // Remember that we legalized the chain. - AddLegalizedOperand(SDValue(Node, 1), LegalizeOp(Lo.getValue(1))); - - if (ExtType == ISD::SEXTLOAD) { - // The high part is obtained by SRA'ing all but one of the bits of the - // lo part. - unsigned LoSize = Lo.getValueType().getSizeInBits(); - Hi = DAG.getNode(ISD::SRA, dl, NVT, Lo, - DAG.getConstant(LoSize-1, TLI.getShiftAmountTy())); - } else if (ExtType == ISD::ZEXTLOAD) { - // The high part is just a zero. - Hi = DAG.getConstant(0, NVT); - } else /* if (ExtType == ISD::EXTLOAD) */ { - // The high part is undefined. - Hi = DAG.getUNDEF(NVT); - } - } - break; - } - case ISD::AND: - case ISD::OR: - case ISD::XOR: { // Simple logical operators -> two trivial pieces. - SDValue LL, LH, RL, RH; - ExpandOp(Node->getOperand(0), LL, LH); - ExpandOp(Node->getOperand(1), RL, RH); - Lo = DAG.getNode(Node->getOpcode(), dl, NVT, LL, RL); - Hi = DAG.getNode(Node->getOpcode(), dl, NVT, LH, RH); - break; - } - case ISD::SELECT: { - SDValue LL, LH, RL, RH; - ExpandOp(Node->getOperand(1), LL, LH); - ExpandOp(Node->getOperand(2), RL, RH); - if (getTypeAction(NVT) == Expand) - NVT = TLI.getTypeToExpandTo(NVT); - Lo = DAG.getNode(ISD::SELECT, dl, NVT, Node->getOperand(0), LL, RL); - if (VT != MVT::f32) - Hi = DAG.getNode(ISD::SELECT, dl, NVT, Node->getOperand(0), LH, RH); - break; - } - case ISD::SELECT_CC: { - SDValue TL, TH, FL, FH; - ExpandOp(Node->getOperand(2), TL, TH); - ExpandOp(Node->getOperand(3), FL, FH); - if (getTypeAction(NVT) == Expand) - NVT = TLI.getTypeToExpandTo(NVT); - Lo = DAG.getNode(ISD::SELECT_CC, dl, NVT, Node->getOperand(0), - Node->getOperand(1), TL, FL, Node->getOperand(4)); - if (VT != MVT::f32) - Hi = DAG.getNode(ISD::SELECT_CC, dl, NVT, Node->getOperand(0), - Node->getOperand(1), TH, FH, Node->getOperand(4)); - break; - } - case ISD::ANY_EXTEND: - // The low part is any extension of the input (which degenerates to a copy). - Lo = DAG.getNode(ISD::ANY_EXTEND, dl, NVT, Node->getOperand(0)); - // The high part is undefined. - Hi = DAG.getUNDEF(NVT); - break; - case ISD::SIGN_EXTEND: { - // The low part is just a sign extension of the input (which degenerates to - // a copy). - Lo = DAG.getNode(ISD::SIGN_EXTEND, dl, NVT, Node->getOperand(0)); - - // The high part is obtained by SRA'ing all but one of the bits of the lo - // part. - unsigned LoSize = Lo.getValueType().getSizeInBits(); - Hi = DAG.getNode(ISD::SRA, dl, NVT, Lo, - DAG.getConstant(LoSize-1, TLI.getShiftAmountTy())); - break; - } - case ISD::ZERO_EXTEND: - // The low part is just a zero extension of the input (which degenerates to - // a copy). - Lo = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(0)); - - // The high part is just a zero. - Hi = DAG.getConstant(0, NVT); - break; - - case ISD::TRUNCATE: { - // The input value must be larger than this value. Expand *it*. - SDValue NewLo; - ExpandOp(Node->getOperand(0), NewLo, Hi); - - // The low part is now either the right size, or it is closer. If not the - // right size, make an illegal truncate so we recursively expand it. - if (NewLo.getValueType() != Node->getValueType(0)) - NewLo = DAG.getNode(ISD::TRUNCATE, dl, Node->getValueType(0), NewLo); - ExpandOp(NewLo, Lo, Hi); - break; - } - - case ISD::BIT_CONVERT: { - SDValue Tmp; - if (TLI.getOperationAction(ISD::BIT_CONVERT, VT) == TargetLowering::Custom){ - // If the target wants to, allow it to lower this itself. - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Expand: assert(0 && "cannot expand FP!"); - case Legal: Tmp = LegalizeOp(Node->getOperand(0)); break; - case Promote: Tmp = PromoteOp (Node->getOperand(0)); break; - } - Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, dl, VT, Tmp), DAG); - } - - // f32 / f64 must be expanded to i32 / i64. - if (VT == MVT::f32 || VT == MVT::f64) { - Lo = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, Node->getOperand(0)); - if (getTypeAction(NVT) == Expand) - ExpandOp(Lo, Lo, Hi); - break; - } - - // If source operand will be expanded to the same type as VT, i.e. - // i64 <- f64, i32 <- f32, expand the source operand instead. - MVT VT0 = Node->getOperand(0).getValueType(); - if (getTypeAction(VT0) == Expand && TLI.getTypeToTransformTo(VT0) == VT) { - ExpandOp(Node->getOperand(0), Lo, Hi); - break; - } - - // Turn this into a load/store pair by default. - if (Tmp.getNode() == 0) - Tmp = EmitStackConvert(Node->getOperand(0), VT, VT, dl); - - ExpandOp(Tmp, Lo, Hi); - break; - } - - case ISD::READCYCLECOUNTER: { - assert(TLI.getOperationAction(ISD::READCYCLECOUNTER, VT) == - TargetLowering::Custom && - "Must custom expand ReadCycleCounter"); - SDValue Tmp = TLI.LowerOperation(Op, DAG); - assert(Tmp.getNode() && "Node must be custom expanded!"); - ExpandOp(Tmp.getValue(0), Lo, Hi); - AddLegalizedOperand(SDValue(Node, 1), // Remember we legalized the chain. - LegalizeOp(Tmp.getValue(1))); - break; - } - - case ISD::ATOMIC_CMP_SWAP: { - // This operation does not need a loop. - SDValue Tmp = TLI.LowerOperation(Op, DAG); - assert(Tmp.getNode() && "Node must be custom expanded!"); - ExpandOp(Tmp.getValue(0), Lo, Hi); - AddLegalizedOperand(SDValue(Node, 1), // Remember we legalized the chain. - LegalizeOp(Tmp.getValue(1))); - break; - } - - case ISD::ATOMIC_LOAD_ADD: - case ISD::ATOMIC_LOAD_SUB: - case ISD::ATOMIC_LOAD_AND: - case ISD::ATOMIC_LOAD_OR: - case ISD::ATOMIC_LOAD_XOR: - case ISD::ATOMIC_LOAD_NAND: - case ISD::ATOMIC_SWAP: { - // These operations require a loop to be generated. We can't do that yet, - // so substitute a target-dependent pseudo and expand that later. - SDValue In2Lo, In2Hi, In2; - ExpandOp(Op.getOperand(2), In2Lo, In2Hi); - In2 = DAG.getNode(ISD::BUILD_PAIR, dl, VT, In2Lo, In2Hi); - AtomicSDNode* Anode = cast(Node); - SDValue Replace = - DAG.getAtomic(Op.getOpcode(), dl, Anode->getMemoryVT(), - Op.getOperand(0), Op.getOperand(1), In2, - Anode->getSrcValue(), Anode->getAlignment()); - SDValue Result = TLI.LowerOperation(Replace, DAG); - ExpandOp(Result.getValue(0), Lo, Hi); - // Remember that we legalized the chain. - AddLegalizedOperand(SDValue(Node, 1), LegalizeOp(Result.getValue(1))); - break; - } - - // These operators cannot be expanded directly, emit them as calls to - // library functions. - case ISD::FP_TO_SINT: { - if (TLI.getOperationAction(ISD::FP_TO_SINT, VT) == TargetLowering::Custom) { - SDValue Op; - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Expand: assert(0 && "cannot expand FP!"); - case Legal: Op = LegalizeOp(Node->getOperand(0)); break; - case Promote: Op = PromoteOp (Node->getOperand(0)); break; - } - - Op = TLI.LowerOperation(DAG.getNode(ISD::FP_TO_SINT, dl, VT, Op), DAG); - - // Now that the custom expander is done, expand the result, which is still - // VT. - if (Op.getNode()) { - ExpandOp(Op, Lo, Hi); - break; - } - } - - RTLIB::Libcall LC = RTLIB::getFPTOSINT(Node->getOperand(0).getValueType(), - VT); - assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected uint-to-fp conversion!"); - Lo = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Hi); - break; - } - - case ISD::FP_TO_UINT: { - if (TLI.getOperationAction(ISD::FP_TO_UINT, VT) == TargetLowering::Custom) { - SDValue Op; - switch (getTypeAction(Node->getOperand(0).getValueType())) { - case Expand: assert(0 && "cannot expand FP!"); - case Legal: Op = LegalizeOp(Node->getOperand(0)); break; - case Promote: Op = PromoteOp (Node->getOperand(0)); break; - } - - Op = TLI.LowerOperation(DAG.getNode(ISD::FP_TO_UINT, dl, VT, Op), DAG); - - // Now that the custom expander is done, expand the result. - if (Op.getNode()) { - ExpandOp(Op, Lo, Hi); - break; - } - } - - RTLIB::Libcall LC = RTLIB::getFPTOUINT(Node->getOperand(0).getValueType(), - VT); - assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected fp-to-uint conversion!"); - Lo = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Hi); - break; - } - - case ISD::SHL: { - // If the target wants custom lowering, do so. - SDValue ShiftAmt = LegalizeOp(Node->getOperand(1)); - if (TLI.getOperationAction(ISD::SHL, VT) == TargetLowering::Custom) { - SDValue Op = DAG.getNode(ISD::SHL, dl, VT, Node->getOperand(0), ShiftAmt); - Op = TLI.LowerOperation(Op, DAG); - if (Op.getNode()) { - // Now that the custom expander is done, expand the result, which is - // still VT. - ExpandOp(Op, Lo, Hi); - break; - } - } - - // If ADDC/ADDE are supported and if the shift amount is a constant 1, emit - // this X << 1 as X+X. - if (ConstantSDNode *ShAmt = dyn_cast(ShiftAmt)) { - if (ShAmt->getAPIntValue() == 1 && - TLI.isOperationLegalOrCustom(ISD::ADDC, NVT) && - TLI.isOperationLegalOrCustom(ISD::ADDE, NVT)) { - SDValue LoOps[2], HiOps[3]; - ExpandOp(Node->getOperand(0), LoOps[0], HiOps[0]); - SDVTList VTList = DAG.getVTList(LoOps[0].getValueType(), MVT::Flag); - LoOps[1] = LoOps[0]; - Lo = DAG.getNode(ISD::ADDC, dl, VTList, LoOps, 2); - - HiOps[1] = HiOps[0]; - HiOps[2] = Lo.getValue(1); - Hi = DAG.getNode(ISD::ADDE, dl, VTList, HiOps, 3); - break; - } - } - - // If we can emit an efficient shift operation, do so now. - if (ExpandShift(ISD::SHL, Node->getOperand(0), ShiftAmt, Lo, Hi, dl)) - break; - - // If this target supports SHL_PARTS, use it. - TargetLowering::LegalizeAction Action = - TLI.getOperationAction(ISD::SHL_PARTS, NVT); - if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) || - Action == TargetLowering::Custom) { - ExpandShiftParts(ISD::SHL_PARTS, Node->getOperand(0), - ShiftAmt, Lo, Hi, dl); - break; - } - - // Otherwise, emit a libcall. - Lo = ExpandLibCall(RTLIB::SHL_I64, Node, false/*left shift=unsigned*/, Hi); - break; - } - - case ISD::SRA: { - // If the target wants custom lowering, do so. - SDValue ShiftAmt = LegalizeOp(Node->getOperand(1)); - if (TLI.getOperationAction(ISD::SRA, VT) == TargetLowering::Custom) { - SDValue Op = DAG.getNode(ISD::SRA, dl, VT, Node->getOperand(0), ShiftAmt); - Op = TLI.LowerOperation(Op, DAG); - if (Op.getNode()) { - // Now that the custom expander is done, expand the result, which is - // still VT. - ExpandOp(Op, Lo, Hi); - break; - } - } - - // If we can emit an efficient shift operation, do so now. - if (ExpandShift(ISD::SRA, Node->getOperand(0), ShiftAmt, Lo, Hi, dl)) - break; - - // If this target supports SRA_PARTS, use it. - TargetLowering::LegalizeAction Action = - TLI.getOperationAction(ISD::SRA_PARTS, NVT); - if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) || - Action == TargetLowering::Custom) { - ExpandShiftParts(ISD::SRA_PARTS, Node->getOperand(0), - ShiftAmt, Lo, Hi, dl); - break; - } - - // Otherwise, emit a libcall. - Lo = ExpandLibCall(RTLIB::SRA_I64, Node, true/*ashr is signed*/, Hi); - break; - } - - case ISD::SRL: { - // If the target wants custom lowering, do so. - SDValue ShiftAmt = LegalizeOp(Node->getOperand(1)); - if (TLI.getOperationAction(ISD::SRL, VT) == TargetLowering::Custom) { - SDValue Op = DAG.getNode(ISD::SRL, dl, VT, Node->getOperand(0), ShiftAmt); - Op = TLI.LowerOperation(Op, DAG); - if (Op.getNode()) { - // Now that the custom expander is done, expand the result, which is - // still VT. - ExpandOp(Op, Lo, Hi); - break; - } - } - - // If we can emit an efficient shift operation, do so now. - if (ExpandShift(ISD::SRL, Node->getOperand(0), ShiftAmt, Lo, Hi, dl)) - break; - - // If this target supports SRL_PARTS, use it. - TargetLowering::LegalizeAction Action = - TLI.getOperationAction(ISD::SRL_PARTS, NVT); - if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) || - Action == TargetLowering::Custom) { - ExpandShiftParts(ISD::SRL_PARTS, - Node->getOperand(0), ShiftAmt, Lo, Hi, dl); - break; - } - - // Otherwise, emit a libcall. - Lo = ExpandLibCall(RTLIB::SRL_I64, Node, false/*lshr is unsigned*/, Hi); - break; - } - - case ISD::ADD: - case ISD::SUB: { - // If the target wants to custom expand this, let them. - if (TLI.getOperationAction(Node->getOpcode(), VT) == - TargetLowering::Custom) { - SDValue Result = TLI.LowerOperation(Op, DAG); - if (Result.getNode()) { - ExpandOp(Result, Lo, Hi); - break; - } - } - // Expand the subcomponents. - SDValue LHSL, LHSH, RHSL, RHSH; - ExpandOp(Node->getOperand(0), LHSL, LHSH); - ExpandOp(Node->getOperand(1), RHSL, RHSH); - SDValue LoOps[2], HiOps[3]; - LoOps[0] = LHSL; - LoOps[1] = RHSL; - HiOps[0] = LHSH; - HiOps[1] = RHSH; - - //cascaded check to see if any smaller size has a a carry flag. - unsigned OpV = Node->getOpcode() == ISD::ADD ? ISD::ADDC : ISD::SUBC; - bool hasCarry = false; - for (unsigned BitSize = NVT.getSizeInBits(); BitSize != 0; BitSize /= 2) { - MVT AVT = MVT::getIntegerVT(BitSize); - if (TLI.isOperationLegalOrCustom(OpV, AVT)) { - hasCarry = true; - break; - } - } - - if(hasCarry) { - SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag); - if (Node->getOpcode() == ISD::ADD) { - Lo = DAG.getNode(ISD::ADDC, dl, VTList, LoOps, 2); - HiOps[2] = Lo.getValue(1); - Hi = DAG.getNode(ISD::ADDE, dl, VTList, HiOps, 3); - } else { - Lo = DAG.getNode(ISD::SUBC, dl, VTList, LoOps, 2); - HiOps[2] = Lo.getValue(1); - Hi = DAG.getNode(ISD::SUBE, dl, VTList, HiOps, 3); - } - break; - } else { - if (Node->getOpcode() == ISD::ADD) { - Lo = DAG.getNode(ISD::ADD, dl, NVT, LoOps, 2); - Hi = DAG.getNode(ISD::ADD, dl, NVT, HiOps, 2); - SDValue Cmp1 = DAG.getSetCC(dl, TLI.getSetCCResultType(NVT), - Lo, LoOps[0], ISD::SETULT); - SDValue Carry1 = DAG.getNode(ISD::SELECT, dl, NVT, Cmp1, - DAG.getConstant(1, NVT), - DAG.getConstant(0, NVT)); - SDValue Cmp2 = DAG.getSetCC(dl, TLI.getSetCCResultType(NVT), - Lo, LoOps[1], ISD::SETULT); - SDValue Carry2 = DAG.getNode(ISD::SELECT, dl, NVT, Cmp2, - DAG.getConstant(1, NVT), - Carry1); - Hi = DAG.getNode(ISD::ADD, dl, NVT, Hi, Carry2); - } else { - Lo = DAG.getNode(ISD::SUB, dl, NVT, LoOps, 2); - Hi = DAG.getNode(ISD::SUB, dl, NVT, HiOps, 2); - SDValue Cmp = DAG.getSetCC(dl, NVT, LoOps[0], LoOps[1], ISD::SETULT); - SDValue Borrow = DAG.getNode(ISD::SELECT, dl, NVT, Cmp, - DAG.getConstant(1, NVT), - DAG.getConstant(0, NVT)); - Hi = DAG.getNode(ISD::SUB, dl, NVT, Hi, Borrow); - } - break; - } - } - - case ISD::ADDC: - case ISD::SUBC: { - // Expand the subcomponents. - SDValue LHSL, LHSH, RHSL, RHSH; - ExpandOp(Node->getOperand(0), LHSL, LHSH); - ExpandOp(Node->getOperand(1), RHSL, RHSH); - SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag); - SDValue LoOps[2] = { LHSL, RHSL }; - SDValue HiOps[3] = { LHSH, RHSH }; - - if (Node->getOpcode() == ISD::ADDC) { - Lo = DAG.getNode(ISD::ADDC, dl, VTList, LoOps, 2); - HiOps[2] = Lo.getValue(1); - Hi = DAG.getNode(ISD::ADDE, dl, VTList, HiOps, 3); - } else { - Lo = DAG.getNode(ISD::SUBC, dl, VTList, LoOps, 2); - HiOps[2] = Lo.getValue(1); - Hi = DAG.getNode(ISD::SUBE, dl, VTList, HiOps, 3); - } - // Remember that we legalized the flag. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1))); - break; - } - case ISD::ADDE: - case ISD::SUBE: { - // Expand the subcomponents. - SDValue LHSL, LHSH, RHSL, RHSH; - ExpandOp(Node->getOperand(0), LHSL, LHSH); - ExpandOp(Node->getOperand(1), RHSL, RHSH); - SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag); - SDValue LoOps[3] = { LHSL, RHSL, Node->getOperand(2) }; - SDValue HiOps[3] = { LHSH, RHSH }; - - Lo = DAG.getNode(Node->getOpcode(), dl, VTList, LoOps, 3); - HiOps[2] = Lo.getValue(1); - Hi = DAG.getNode(Node->getOpcode(), dl, VTList, HiOps, 3); - - // Remember that we legalized the flag. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1))); - break; - } - case ISD::MUL: { - // If the target wants to custom expand this, let them. - if (TLI.getOperationAction(ISD::MUL, VT) == TargetLowering::Custom) { - SDValue New = TLI.LowerOperation(Op, DAG); - if (New.getNode()) { - ExpandOp(New, Lo, Hi); - break; - } - } - - bool HasMULHS = TLI.isOperationLegalOrCustom(ISD::MULHS, NVT); - bool HasMULHU = TLI.isOperationLegalOrCustom(ISD::MULHU, NVT); - bool HasSMUL_LOHI = TLI.isOperationLegalOrCustom(ISD::SMUL_LOHI, NVT); - bool HasUMUL_LOHI = TLI.isOperationLegalOrCustom(ISD::UMUL_LOHI, NVT); - if (HasMULHU || HasMULHS || HasUMUL_LOHI || HasSMUL_LOHI) { - SDValue LL, LH, RL, RH; - ExpandOp(Node->getOperand(0), LL, LH); - ExpandOp(Node->getOperand(1), RL, RH); - unsigned OuterBitSize = Op.getValueSizeInBits(); - unsigned InnerBitSize = RH.getValueSizeInBits(); - unsigned LHSSB = DAG.ComputeNumSignBits(Op.getOperand(0)); - unsigned RHSSB = DAG.ComputeNumSignBits(Op.getOperand(1)); - APInt HighMask = APInt::getHighBitsSet(OuterBitSize, InnerBitSize); - if (DAG.MaskedValueIsZero(Node->getOperand(0), HighMask) && - DAG.MaskedValueIsZero(Node->getOperand(1), HighMask)) { - // The inputs are both zero-extended. - if (HasUMUL_LOHI) { - // We can emit a umul_lohi. - Lo = DAG.getNode(ISD::UMUL_LOHI, dl, DAG.getVTList(NVT, NVT), LL, RL); - Hi = SDValue(Lo.getNode(), 1); - break; - } - if (HasMULHU) { - // We can emit a mulhu+mul. - Lo = DAG.getNode(ISD::MUL, dl, NVT, LL, RL); - Hi = DAG.getNode(ISD::MULHU, dl, NVT, LL, RL); - break; - } - } - if (LHSSB > InnerBitSize && RHSSB > InnerBitSize) { - // The input values are both sign-extended. - if (HasSMUL_LOHI) { - // We can emit a smul_lohi. - Lo = DAG.getNode(ISD::SMUL_LOHI, dl, DAG.getVTList(NVT, NVT), LL, RL); - Hi = SDValue(Lo.getNode(), 1); - break; - } - if (HasMULHS) { - // We can emit a mulhs+mul. - Lo = DAG.getNode(ISD::MUL, dl, NVT, LL, RL); - Hi = DAG.getNode(ISD::MULHS, dl, NVT, LL, RL); - break; - } - } - if (HasUMUL_LOHI) { - // Lo,Hi = umul LHS, RHS. - SDValue UMulLOHI = DAG.getNode(ISD::UMUL_LOHI, dl, - DAG.getVTList(NVT, NVT), LL, RL); - Lo = UMulLOHI; - Hi = UMulLOHI.getValue(1); - RH = DAG.getNode(ISD::MUL, dl, NVT, LL, RH); - LH = DAG.getNode(ISD::MUL, dl, NVT, LH, RL); - Hi = DAG.getNode(ISD::ADD, dl, NVT, Hi, RH); - Hi = DAG.getNode(ISD::ADD, dl, NVT, Hi, LH); - break; - } - if (HasMULHU) { - Lo = DAG.getNode(ISD::MUL, dl, NVT, LL, RL); - Hi = DAG.getNode(ISD::MULHU, dl, NVT, LL, RL); - RH = DAG.getNode(ISD::MUL, dl, NVT, LL, RH); - LH = DAG.getNode(ISD::MUL, dl, NVT, LH, RL); - Hi = DAG.getNode(ISD::ADD, dl, NVT, Hi, RH); - Hi = DAG.getNode(ISD::ADD, dl, NVT, Hi, LH); - break; - } - } - - // If nothing else, we can make a libcall. - Lo = ExpandLibCall(RTLIB::MUL_I64, Node, false/*sign irrelevant*/, Hi); - break; - } - case ISD::SDIV: - Lo = ExpandLibCall(RTLIB::SDIV_I64, Node, true, Hi); - break; - case ISD::UDIV: - Lo = ExpandLibCall(RTLIB::UDIV_I64, Node, true, Hi); - break; - case ISD::SREM: - Lo = ExpandLibCall(RTLIB::SREM_I64, Node, true, Hi); - break; - case ISD::UREM: - Lo = ExpandLibCall(RTLIB::UREM_I64, Node, true, Hi); - break; - - case ISD::FADD: - Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::ADD_F32, - RTLIB::ADD_F64, - RTLIB::ADD_F80, - RTLIB::ADD_PPCF128), - Node, false, Hi); - break; - case ISD::FSUB: - Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::SUB_F32, - RTLIB::SUB_F64, - RTLIB::SUB_F80, - RTLIB::SUB_PPCF128), - Node, false, Hi); - break; - case ISD::FMUL: - Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::MUL_F32, - RTLIB::MUL_F64, - RTLIB::MUL_F80, - RTLIB::MUL_PPCF128), - Node, false, Hi); - break; - case ISD::FDIV: - Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::DIV_F32, - RTLIB::DIV_F64, - RTLIB::DIV_F80, - RTLIB::DIV_PPCF128), - Node, false, Hi); - break; - case ISD::FP_EXTEND: { - if (VT == MVT::ppcf128) { - assert(Node->getOperand(0).getValueType()==MVT::f32 || - Node->getOperand(0).getValueType()==MVT::f64); - const uint64_t zero = 0; - if (Node->getOperand(0).getValueType()==MVT::f32) - Hi = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Node->getOperand(0)); - else - Hi = Node->getOperand(0); - Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &zero)), MVT::f64); - break; - } - RTLIB::Libcall LC = RTLIB::getFPEXT(Node->getOperand(0).getValueType(), VT); - assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_EXTEND!"); - Lo = ExpandLibCall(LC, Node, true, Hi); - break; - } - case ISD::FP_ROUND: { - RTLIB::Libcall LC = RTLIB::getFPROUND(Node->getOperand(0).getValueType(), - VT); - assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_ROUND!"); - Lo = ExpandLibCall(LC, Node, true, Hi); - break; - } - case ISD::FSQRT: - case ISD::FSIN: - case ISD::FCOS: - case ISD::FLOG: - case ISD::FLOG2: - case ISD::FLOG10: - case ISD::FEXP: - case ISD::FEXP2: - case ISD::FTRUNC: - case ISD::FFLOOR: - case ISD::FCEIL: - case ISD::FRINT: - case ISD::FNEARBYINT: - case ISD::FPOW: - case ISD::FPOWI: { - RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL; - switch(Node->getOpcode()) { - case ISD::FSQRT: - LC = GetFPLibCall(VT, RTLIB::SQRT_F32, RTLIB::SQRT_F64, - RTLIB::SQRT_F80, RTLIB::SQRT_PPCF128); - break; - case ISD::FSIN: - LC = GetFPLibCall(VT, RTLIB::SIN_F32, RTLIB::SIN_F64, - RTLIB::SIN_F80, RTLIB::SIN_PPCF128); - break; - case ISD::FCOS: - LC = GetFPLibCall(VT, RTLIB::COS_F32, RTLIB::COS_F64, - RTLIB::COS_F80, RTLIB::COS_PPCF128); - break; - case ISD::FLOG: - LC = GetFPLibCall(VT, RTLIB::LOG_F32, RTLIB::LOG_F64, - RTLIB::LOG_F80, RTLIB::LOG_PPCF128); - break; - case ISD::FLOG2: - LC = GetFPLibCall(VT, RTLIB::LOG2_F32, RTLIB::LOG2_F64, - RTLIB::LOG2_F80, RTLIB::LOG2_PPCF128); - break; - case ISD::FLOG10: - LC = GetFPLibCall(VT, RTLIB::LOG10_F32, RTLIB::LOG10_F64, - RTLIB::LOG10_F80, RTLIB::LOG10_PPCF128); - break; - case ISD::FEXP: - LC = GetFPLibCall(VT, RTLIB::EXP_F32, RTLIB::EXP_F64, - RTLIB::EXP_F80, RTLIB::EXP_PPCF128); - break; - case ISD::FEXP2: - LC = GetFPLibCall(VT, RTLIB::EXP2_F32, RTLIB::EXP2_F64, - RTLIB::EXP2_F80, RTLIB::EXP2_PPCF128); - break; - case ISD::FTRUNC: - LC = GetFPLibCall(VT, RTLIB::TRUNC_F32, RTLIB::TRUNC_F64, - RTLIB::TRUNC_F80, RTLIB::TRUNC_PPCF128); - break; - case ISD::FFLOOR: - LC = GetFPLibCall(VT, RTLIB::FLOOR_F32, RTLIB::FLOOR_F64, - RTLIB::FLOOR_F80, RTLIB::FLOOR_PPCF128); - break; - case ISD::FCEIL: - LC = GetFPLibCall(VT, RTLIB::CEIL_F32, RTLIB::CEIL_F64, - RTLIB::CEIL_F80, RTLIB::CEIL_PPCF128); - break; - case ISD::FRINT: - LC = GetFPLibCall(VT, RTLIB::RINT_F32, RTLIB::RINT_F64, - RTLIB::RINT_F80, RTLIB::RINT_PPCF128); - break; - case ISD::FNEARBYINT: - LC = GetFPLibCall(VT, RTLIB::NEARBYINT_F32, RTLIB::NEARBYINT_F64, - RTLIB::NEARBYINT_F80, RTLIB::NEARBYINT_PPCF128); - break; - case ISD::FPOW: - LC = GetFPLibCall(VT, RTLIB::POW_F32, RTLIB::POW_F64, RTLIB::POW_F80, - RTLIB::POW_PPCF128); - break; - case ISD::FPOWI: - LC = GetFPLibCall(VT, RTLIB::POWI_F32, RTLIB::POWI_F64, RTLIB::POWI_F80, - RTLIB::POWI_PPCF128); - break; - default: assert(0 && "Unreachable!"); - } - Lo = ExpandLibCall(LC, Node, false, Hi); - break; - } - case ISD::FABS: { - if (VT == MVT::ppcf128) { - SDValue Tmp; - ExpandOp(Node->getOperand(0), Lo, Tmp); - Hi = DAG.getNode(ISD::FABS, dl, NVT, Tmp); - // lo = hi==fabs(hi) ? lo : -lo; - Lo = DAG.getNode(ISD::SELECT_CC, dl, NVT, Hi, Tmp, - Lo, DAG.getNode(ISD::FNEG, dl, NVT, Lo), - DAG.getCondCode(ISD::SETEQ)); - break; - } - SDValue Mask = (VT == MVT::f64) - ? DAG.getConstantFP(BitsToDouble(~(1ULL << 63)), VT) - : DAG.getConstantFP(BitsToFloat(~(1U << 31)), VT); - Mask = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, Mask); - Lo = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, Node->getOperand(0)); - Lo = DAG.getNode(ISD::AND, dl, NVT, Lo, Mask); - if (getTypeAction(NVT) == Expand) - ExpandOp(Lo, Lo, Hi); - break; - } - case ISD::FNEG: { - if (VT == MVT::ppcf128) { - ExpandOp(Node->getOperand(0), Lo, Hi); - Lo = DAG.getNode(ISD::FNEG, dl, MVT::f64, Lo); - Hi = DAG.getNode(ISD::FNEG, dl, MVT::f64, Hi); - break; - } - SDValue Mask = (VT == MVT::f64) - ? DAG.getConstantFP(BitsToDouble(1ULL << 63), VT) - : DAG.getConstantFP(BitsToFloat(1U << 31), VT); - Mask = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, Mask); - Lo = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, Node->getOperand(0)); - Lo = DAG.getNode(ISD::XOR, dl, NVT, Lo, Mask); - if (getTypeAction(NVT) == Expand) - ExpandOp(Lo, Lo, Hi); - break; - } - case ISD::FCOPYSIGN: { - Lo = ExpandFCOPYSIGNToBitwiseOps(Node, NVT, DAG, TLI); - if (getTypeAction(NVT) == Expand) - ExpandOp(Lo, Lo, Hi); - break; - } - case ISD::SINT_TO_FP: - case ISD::UINT_TO_FP: { - bool isSigned = Node->getOpcode() == ISD::SINT_TO_FP; - MVT SrcVT = Node->getOperand(0).getValueType(); - - // Promote the operand if needed. Do this before checking for - // ppcf128 so conversions of i16 and i8 work. - if (getTypeAction(SrcVT) == Promote) { - SDValue Tmp = PromoteOp(Node->getOperand(0)); - Tmp = isSigned - ? DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, Tmp.getValueType(), Tmp, - DAG.getValueType(SrcVT)) - : DAG.getZeroExtendInReg(Tmp, dl, SrcVT); - Node = DAG.UpdateNodeOperands(Op, Tmp).getNode(); - SrcVT = Node->getOperand(0).getValueType(); - } - - if (VT == MVT::ppcf128 && SrcVT == MVT::i32) { - static const uint64_t zero = 0; - if (isSigned) { - Hi = LegalizeOp(DAG.getNode(ISD::SINT_TO_FP, dl, MVT::f64, - Node->getOperand(0))); - Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &zero)), MVT::f64); - } else { - static const uint64_t TwoE32[] = { 0x41f0000000000000LL, 0 }; - Hi = LegalizeOp(DAG.getNode(ISD::SINT_TO_FP, dl, MVT::f64, - Node->getOperand(0))); - Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &zero)), MVT::f64); - Hi = DAG.getNode(ISD::BUILD_PAIR, dl, VT, Lo, Hi); - // X>=0 ? {(f64)x, 0} : {(f64)x, 0} + 2^32 - ExpandOp(DAG.getNode(ISD::SELECT_CC, dl, - MVT::ppcf128, Node->getOperand(0), - DAG.getConstant(0, MVT::i32), - DAG.getNode(ISD::FADD, dl, MVT::ppcf128, Hi, - DAG.getConstantFP - (APFloat(APInt(128, 2, TwoE32)), - MVT::ppcf128)), - Hi, - DAG.getCondCode(ISD::SETLT)), - Lo, Hi); - } - break; - } - if (VT == MVT::ppcf128 && SrcVT == MVT::i64 && !isSigned) { - // si64->ppcf128 done by libcall, below - static const uint64_t TwoE64[] = { 0x43f0000000000000LL, 0 }; - ExpandOp(DAG.getNode(ISD::SINT_TO_FP, dl, MVT::ppcf128, - Node->getOperand(0)), Lo, Hi); - Hi = DAG.getNode(ISD::BUILD_PAIR, dl, VT, Lo, Hi); - // x>=0 ? (ppcf128)(i64)x : (ppcf128)(i64)x + 2^64 - ExpandOp(DAG.getNode(ISD::SELECT_CC, dl, MVT::ppcf128, - Node->getOperand(0), - DAG.getConstant(0, MVT::i64), - DAG.getNode(ISD::FADD, dl, MVT::ppcf128, Hi, - DAG.getConstantFP - (APFloat(APInt(128, 2, TwoE64)), - MVT::ppcf128)), - Hi, - DAG.getCondCode(ISD::SETLT)), - Lo, Hi); - break; - } - - Lo = ExpandIntToFP(Node->getOpcode() == ISD::SINT_TO_FP, VT, - Node->getOperand(0), dl); - if (getTypeAction(Lo.getValueType()) == Expand) - // float to i32 etc. can be 'expanded' to a single node. - ExpandOp(Lo, Lo, Hi); - break; - } - } - - // Make sure the resultant values have been legalized themselves, unless this - // is a type that requires multi-step expansion. - if (getTypeAction(NVT) != Expand && NVT != MVT::isVoid) { - Lo = LegalizeOp(Lo); - if (Hi.getNode()) - // Don't legalize the high part if it is expanded to a single node. - Hi = LegalizeOp(Hi); - } - - // Remember in a map if the values will be reused later. - bool isNew = - ExpandedNodes.insert(std::make_pair(Op, std::make_pair(Lo, Hi))).second; - assert(isNew && "Value already expanded?!?"); - isNew = isNew; -} - -/// SplitVectorOp - Given an operand of vector type, break it down into -/// two smaller values, still of vector type. -void SelectionDAGLegalize::SplitVectorOp(SDValue Op, SDValue &Lo, - SDValue &Hi) { - assert(0 && "This should be dead!"); - assert(Op.getValueType().isVector() && "Cannot split non-vector type!"); - SDNode *Node = Op.getNode(); - DebugLoc dl = Node->getDebugLoc(); - unsigned NumElements = Op.getValueType().getVectorNumElements(); - assert(NumElements > 1 && "Cannot split a single element vector!"); - - MVT NewEltVT = Op.getValueType().getVectorElementType(); - - unsigned NewNumElts_Lo = 1 << Log2_32(NumElements-1); - unsigned NewNumElts_Hi = NumElements - NewNumElts_Lo; - - MVT NewVT_Lo = MVT::getVectorVT(NewEltVT, NewNumElts_Lo); - MVT NewVT_Hi = MVT::getVectorVT(NewEltVT, NewNumElts_Hi); - - // See if we already split it. - std::map >::iterator I - = SplitNodes.find(Op); - if (I != SplitNodes.end()) { - Lo = I->second.first; - Hi = I->second.second; - return; - } - - switch (Node->getOpcode()) { - default: -#ifndef NDEBUG - Node->dump(&DAG); -#endif - assert(0 && "Unhandled operation in SplitVectorOp!"); - case ISD::UNDEF: - Lo = DAG.getUNDEF(NewVT_Lo); - Hi = DAG.getUNDEF(NewVT_Hi); - break; - case ISD::BUILD_PAIR: - Lo = Node->getOperand(0); - Hi = Node->getOperand(1); - break; - case ISD::INSERT_VECTOR_ELT: { - if (ConstantSDNode *Idx = dyn_cast(Node->getOperand(2))) { - SplitVectorOp(Node->getOperand(0), Lo, Hi); - unsigned Index = Idx->getZExtValue(); - SDValue ScalarOp = Node->getOperand(1); - if (Index < NewNumElts_Lo) - Lo = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl, NewVT_Lo, Lo, ScalarOp, - DAG.getIntPtrConstant(Index)); - else - Hi = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl, NewVT_Hi, Hi, ScalarOp, - DAG.getIntPtrConstant(Index - NewNumElts_Lo)); - break; - } - SDValue Tmp = PerformInsertVectorEltInMemory(Node->getOperand(0), - Node->getOperand(1), - Node->getOperand(2), dl); - SplitVectorOp(Tmp, Lo, Hi); - break; - } - case ISD::VECTOR_SHUFFLE: { - // Build the low part. - SDValue Mask = Node->getOperand(2); - SmallVector Ops; - MVT PtrVT = TLI.getPointerTy(); - - // Insert all of the elements from the input that are needed. We use - // buildvector of extractelement here because the input vectors will have - // to be legalized, so this makes the code simpler. - for (unsigned i = 0; i != NewNumElts_Lo; ++i) { - SDValue IdxNode = Mask.getOperand(i); - if (IdxNode.getOpcode() == ISD::UNDEF) { - Ops.push_back(DAG.getUNDEF(NewEltVT)); - continue; - } - unsigned Idx = cast(IdxNode)->getZExtValue(); - SDValue InVec = Node->getOperand(0); - if (Idx >= NumElements) { - InVec = Node->getOperand(1); - Idx -= NumElements; - } - Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, NewEltVT, InVec, - DAG.getConstant(Idx, PtrVT))); - } - Lo = DAG.getNode(ISD::BUILD_VECTOR, dl, NewVT_Lo, &Ops[0], Ops.size()); - Ops.clear(); - - for (unsigned i = NewNumElts_Lo; i != NumElements; ++i) { - SDValue IdxNode = Mask.getOperand(i); - if (IdxNode.getOpcode() == ISD::UNDEF) { - Ops.push_back(DAG.getUNDEF(NewEltVT)); - continue; - } - unsigned Idx = cast(IdxNode)->getZExtValue(); - SDValue InVec = Node->getOperand(0); - if (Idx >= NumElements) { - InVec = Node->getOperand(1); - Idx -= NumElements; - } - Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, NewEltVT, InVec, - DAG.getConstant(Idx, PtrVT))); - } - Hi = DAG.getNode(ISD::BUILD_VECTOR, dl, NewVT_Hi, &Ops[0], Ops.size()); - break; - } - case ISD::BUILD_VECTOR: { - SmallVector LoOps(Node->op_begin(), - Node->op_begin()+NewNumElts_Lo); - Lo = DAG.getNode(ISD::BUILD_VECTOR, dl, NewVT_Lo, &LoOps[0], LoOps.size()); - - SmallVector HiOps(Node->op_begin()+NewNumElts_Lo, - Node->op_end()); - Hi = DAG.getNode(ISD::BUILD_VECTOR, dl, NewVT_Hi, &HiOps[0], HiOps.size()); - break; - } - case ISD::CONCAT_VECTORS: { - // FIXME: Handle non-power-of-two vectors? - unsigned NewNumSubvectors = Node->getNumOperands() / 2; - if (NewNumSubvectors == 1) { - Lo = Node->getOperand(0); - Hi = Node->getOperand(1); - } else { - SmallVector LoOps(Node->op_begin(), - Node->op_begin()+NewNumSubvectors); - Lo = DAG.getNode(ISD::CONCAT_VECTORS, dl, NewVT_Lo, - &LoOps[0], LoOps.size()); - - SmallVector HiOps(Node->op_begin()+NewNumSubvectors, - Node->op_end()); - Hi = DAG.getNode(ISD::CONCAT_VECTORS, dl, NewVT_Hi, - &HiOps[0], HiOps.size()); - } - break; - } - case ISD::EXTRACT_SUBVECTOR: { - SDValue Vec = Op.getOperand(0); - SDValue Idx = Op.getOperand(1); - MVT IdxVT = Idx.getValueType(); - - Lo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, NewVT_Lo, Vec, Idx); - ConstantSDNode *CIdx = dyn_cast(Idx); - if (CIdx) { - Hi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, NewVT_Hi, Vec, - DAG.getConstant(CIdx->getZExtValue() + NewNumElts_Lo, - IdxVT)); - } else { - Idx = DAG.getNode(ISD::ADD, dl, IdxVT, Idx, - DAG.getConstant(NewNumElts_Lo, IdxVT)); - Hi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, NewVT_Hi, Vec, Idx); - } - break; - } - case ISD::SELECT: { - SDValue Cond = Node->getOperand(0); - - SDValue LL, LH, RL, RH; - SplitVectorOp(Node->getOperand(1), LL, LH); - SplitVectorOp(Node->getOperand(2), RL, RH); - - if (Cond.getValueType().isVector()) { - // Handle a vector merge. - SDValue CL, CH; - SplitVectorOp(Cond, CL, CH); - Lo = DAG.getNode(Node->getOpcode(), dl, NewVT_Lo, CL, LL, RL); - Hi = DAG.getNode(Node->getOpcode(), dl, NewVT_Hi, CH, LH, RH); - } else { - // Handle a simple select with vector operands. - Lo = DAG.getNode(Node->getOpcode(), dl, NewVT_Lo, Cond, LL, RL); - Hi = DAG.getNode(Node->getOpcode(), dl, NewVT_Hi, Cond, LH, RH); - } - break; - } - case ISD::SELECT_CC: { - SDValue CondLHS = Node->getOperand(0); - SDValue CondRHS = Node->getOperand(1); - SDValue CondCode = Node->getOperand(4); - - SDValue LL, LH, RL, RH; - SplitVectorOp(Node->getOperand(2), LL, LH); - SplitVectorOp(Node->getOperand(3), RL, RH); - - // Handle a simple select with vector operands. - Lo = DAG.getNode(ISD::SELECT_CC, dl, NewVT_Lo, CondLHS, CondRHS, - LL, RL, CondCode); - Hi = DAG.getNode(ISD::SELECT_CC, dl, NewVT_Hi, CondLHS, CondRHS, - LH, RH, CondCode); - break; - } - case ISD::VSETCC: { - SDValue LL, LH, RL, RH; - SplitVectorOp(Node->getOperand(0), LL, LH); - SplitVectorOp(Node->getOperand(1), RL, RH); - Lo = DAG.getNode(ISD::VSETCC, dl, NewVT_Lo, LL, RL, Node->getOperand(2)); - Hi = DAG.getNode(ISD::VSETCC, dl, NewVT_Hi, LH, RH, Node->getOperand(2)); - break; - } - case ISD::ADD: - case ISD::SUB: - case ISD::MUL: - case ISD::FADD: - case ISD::FSUB: - case ISD::FMUL: - case ISD::SDIV: - case ISD::UDIV: - case ISD::FDIV: - case ISD::FPOW: - case ISD::AND: - case ISD::OR: - case ISD::XOR: - case ISD::UREM: - case ISD::SREM: - case ISD::FREM: - case ISD::SHL: - case ISD::SRA: - case ISD::SRL: { - SDValue LL, LH, RL, RH; - SplitVectorOp(Node->getOperand(0), LL, LH); - SplitVectorOp(Node->getOperand(1), RL, RH); - - Lo = DAG.getNode(Node->getOpcode(), dl, NewVT_Lo, LL, RL); - Hi = DAG.getNode(Node->getOpcode(), dl, NewVT_Hi, LH, RH); - break; - } - case ISD::FP_ROUND: - case ISD::FPOWI: { - SDValue L, H; - SplitVectorOp(Node->getOperand(0), L, H); - - Lo = DAG.getNode(Node->getOpcode(), dl, NewVT_Lo, L, Node->getOperand(1)); - Hi = DAG.getNode(Node->getOpcode(), dl, NewVT_Hi, H, Node->getOperand(1)); - break; - } - case ISD::CTTZ: - case ISD::CTLZ: - case ISD::CTPOP: - case ISD::FNEG: - case ISD::FABS: - case ISD::FSQRT: - case ISD::FSIN: - case ISD::FCOS: - case ISD::FLOG: - case ISD::FLOG2: - case ISD::FLOG10: - case ISD::FEXP: - case ISD::FEXP2: - case ISD::FP_TO_SINT: - case ISD::FP_TO_UINT: - case ISD::SINT_TO_FP: - case ISD::UINT_TO_FP: - case ISD::TRUNCATE: - case ISD::ANY_EXTEND: - case ISD::SIGN_EXTEND: - case ISD::ZERO_EXTEND: - case ISD::FP_EXTEND: { - SDValue L, H; - SplitVectorOp(Node->getOperand(0), L, H); - - Lo = DAG.getNode(Node->getOpcode(), dl, NewVT_Lo, L); - Hi = DAG.getNode(Node->getOpcode(), dl, NewVT_Hi, H); - break; - } - case ISD::CONVERT_RNDSAT: { - ISD::CvtCode CvtCode = cast(Node)->getCvtCode(); - SDValue L, H; - SplitVectorOp(Node->getOperand(0), L, H); - SDValue DTyOpL = DAG.getValueType(NewVT_Lo); - SDValue DTyOpH = DAG.getValueType(NewVT_Hi); - SDValue STyOpL = DAG.getValueType(L.getValueType()); - SDValue STyOpH = DAG.getValueType(H.getValueType()); - - SDValue RndOp = Node->getOperand(3); - SDValue SatOp = Node->getOperand(4); - - Lo = DAG.getConvertRndSat(NewVT_Lo, dl, L, DTyOpL, STyOpL, - RndOp, SatOp, CvtCode); - Hi = DAG.getConvertRndSat(NewVT_Hi, dl, H, DTyOpH, STyOpH, - RndOp, SatOp, CvtCode); - break; - } - case ISD::LOAD: { - LoadSDNode *LD = cast(Node); - SDValue Ch = LD->getChain(); - SDValue Ptr = LD->getBasePtr(); - ISD::LoadExtType ExtType = LD->getExtensionType(); - const Value *SV = LD->getSrcValue(); - int SVOffset = LD->getSrcValueOffset(); - MVT MemoryVT = LD->getMemoryVT(); - unsigned Alignment = LD->getAlignment(); - bool isVolatile = LD->isVolatile(); - - assert(LD->isUnindexed() && "Indexed vector loads are not supported yet!"); - SDValue Offset = DAG.getUNDEF(Ptr.getValueType()); - - MVT MemNewEltVT = MemoryVT.getVectorElementType(); - MVT MemNewVT_Lo = MVT::getVectorVT(MemNewEltVT, NewNumElts_Lo); - MVT MemNewVT_Hi = MVT::getVectorVT(MemNewEltVT, NewNumElts_Hi); - - Lo = DAG.getLoad(ISD::UNINDEXED, dl, ExtType, - NewVT_Lo, Ch, Ptr, Offset, - SV, SVOffset, MemNewVT_Lo, isVolatile, Alignment); - unsigned IncrementSize = NewNumElts_Lo * MemNewEltVT.getSizeInBits()/8; - Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr, - DAG.getIntPtrConstant(IncrementSize)); - SVOffset += IncrementSize; - Alignment = MinAlign(Alignment, IncrementSize); - Hi = DAG.getLoad(ISD::UNINDEXED, dl, ExtType, - NewVT_Hi, Ch, Ptr, Offset, - SV, SVOffset, MemNewVT_Hi, isVolatile, Alignment); - - // Build a factor node to remember that this load is independent of the - // other one. - SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo.getValue(1), - Hi.getValue(1)); - - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(TF)); - break; - } - case ISD::BIT_CONVERT: { - // We know the result is a vector. The input may be either a vector or a - // scalar value. - SDValue InOp = Node->getOperand(0); - if (!InOp.getValueType().isVector() || - InOp.getValueType().getVectorNumElements() == 1) { - // The input is a scalar or single-element vector. - // Lower to a store/load so that it can be split. - // FIXME: this could be improved probably. - unsigned LdAlign = TLI.getTargetData()-> - getPrefTypeAlignment(Op.getValueType().getTypeForMVT()); - SDValue Ptr = DAG.CreateStackTemporary(InOp.getValueType(), LdAlign); - int FI = cast(Ptr.getNode())->getIndex(); - - SDValue St = DAG.getStore(DAG.getEntryNode(), dl, - InOp, Ptr, - PseudoSourceValue::getFixedStack(FI), 0); - InOp = DAG.getLoad(Op.getValueType(), dl, St, Ptr, - PseudoSourceValue::getFixedStack(FI), 0); - } - // Split the vector and convert each of the pieces now. - SplitVectorOp(InOp, Lo, Hi); - Lo = DAG.getNode(ISD::BIT_CONVERT, dl, NewVT_Lo, Lo); - Hi = DAG.getNode(ISD::BIT_CONVERT, dl, NewVT_Hi, Hi); - break; - } - } - - // Remember in a map if the values will be reused later. - bool isNew = - SplitNodes.insert(std::make_pair(Op, std::make_pair(Lo, Hi))).second; - assert(isNew && "Value already split?!?"); - isNew = isNew; -} - - -/// ScalarizeVectorOp - Given an operand of single-element vector type -/// (e.g. v1f32), convert it into the equivalent operation that returns a -/// scalar (e.g. f32) value. -SDValue SelectionDAGLegalize::ScalarizeVectorOp(SDValue Op) { - assert(0 && "This should be dead!"); - assert(Op.getValueType().isVector() && "Bad ScalarizeVectorOp invocation!"); - SDNode *Node = Op.getNode(); - DebugLoc dl = Node->getDebugLoc(); - MVT NewVT = Op.getValueType().getVectorElementType(); - assert(Op.getValueType().getVectorNumElements() == 1); - - // See if we already scalarized it. - std::map::iterator I = ScalarizedNodes.find(Op); - if (I != ScalarizedNodes.end()) return I->second; - - SDValue Result; - switch (Node->getOpcode()) { - default: -#ifndef NDEBUG - Node->dump(&DAG); cerr << "\n"; -#endif - assert(0 && "Unknown vector operation in ScalarizeVectorOp!"); - case ISD::ADD: - case ISD::FADD: - case ISD::SUB: - case ISD::FSUB: - case ISD::MUL: - case ISD::FMUL: - case ISD::SDIV: - case ISD::UDIV: - case ISD::FDIV: - case ISD::SREM: - case ISD::UREM: - case ISD::FREM: - case ISD::FPOW: - case ISD::AND: - case ISD::OR: - case ISD::XOR: - Result = DAG.getNode(Node->getOpcode(), dl, - NewVT, - ScalarizeVectorOp(Node->getOperand(0)), - ScalarizeVectorOp(Node->getOperand(1))); - break; - case ISD::FNEG: - case ISD::FABS: - case ISD::FSQRT: - case ISD::FSIN: - case ISD::FCOS: - case ISD::FLOG: - case ISD::FLOG2: - case ISD::FLOG10: - case ISD::FEXP: - case ISD::FEXP2: - case ISD::FP_TO_SINT: - case ISD::FP_TO_UINT: - case ISD::SINT_TO_FP: - case ISD::UINT_TO_FP: - case ISD::SIGN_EXTEND: - case ISD::ZERO_EXTEND: - case ISD::ANY_EXTEND: - case ISD::TRUNCATE: - case ISD::FP_EXTEND: - Result = DAG.getNode(Node->getOpcode(), dl, - NewVT, - ScalarizeVectorOp(Node->getOperand(0))); - break; - case ISD::CONVERT_RNDSAT: { - SDValue Op0 = ScalarizeVectorOp(Node->getOperand(0)); - Result = DAG.getConvertRndSat(NewVT, dl, Op0, - DAG.getValueType(NewVT), - DAG.getValueType(Op0.getValueType()), - Node->getOperand(3), - Node->getOperand(4), - cast(Node)->getCvtCode()); - break; - } - case ISD::FPOWI: - case ISD::FP_ROUND: - Result = DAG.getNode(Node->getOpcode(), dl, - NewVT, - ScalarizeVectorOp(Node->getOperand(0)), - Node->getOperand(1)); - break; - case ISD::LOAD: { - LoadSDNode *LD = cast(Node); - SDValue Ch = LegalizeOp(LD->getChain()); // Legalize the chain. - SDValue Ptr = LegalizeOp(LD->getBasePtr()); // Legalize the pointer. - ISD::LoadExtType ExtType = LD->getExtensionType(); - const Value *SV = LD->getSrcValue(); - int SVOffset = LD->getSrcValueOffset(); - MVT MemoryVT = LD->getMemoryVT(); - unsigned Alignment = LD->getAlignment(); - bool isVolatile = LD->isVolatile(); - - assert(LD->isUnindexed() && "Indexed vector loads are not supported yet!"); - SDValue Offset = DAG.getUNDEF(Ptr.getValueType()); - - Result = DAG.getLoad(ISD::UNINDEXED, dl, ExtType, - NewVT, Ch, Ptr, Offset, SV, SVOffset, - MemoryVT.getVectorElementType(), - isVolatile, Alignment); - - // Remember that we legalized the chain. - AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1))); - break; - } - case ISD::BUILD_VECTOR: - Result = Node->getOperand(0); - break; - case ISD::INSERT_VECTOR_ELT: - // Returning the inserted scalar element. - Result = Node->getOperand(1); - break; - case ISD::CONCAT_VECTORS: - assert(Node->getOperand(0).getValueType() == NewVT && - "Concat of non-legal vectors not yet supported!"); - Result = Node->getOperand(0); - break; - case ISD::VECTOR_SHUFFLE: { - // Figure out if the scalar is the LHS or RHS and return it. - SDValue EltNum = Node->getOperand(2).getOperand(0); - if (cast(EltNum)->getZExtValue()) - Result = ScalarizeVectorOp(Node->getOperand(1)); - else - Result = ScalarizeVectorOp(Node->getOperand(0)); - break; - } - case ISD::EXTRACT_SUBVECTOR: - Result = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, NewVT, - Node->getOperand(0), Node->getOperand(1)); - break; - case ISD::BIT_CONVERT: { - SDValue Op0 = Op.getOperand(0); - if (Op0.getValueType().isVector() && - Op0.getValueType().getVectorNumElements() == 1) - Op0 = ScalarizeVectorOp(Op0); - Result = DAG.getNode(ISD::BIT_CONVERT, dl, NewVT, Op0); - break; - } - case ISD::SELECT: - Result = DAG.getNode(ISD::SELECT, dl, NewVT, Op.getOperand(0), - ScalarizeVectorOp(Op.getOperand(1)), - ScalarizeVectorOp(Op.getOperand(2))); - break; - case ISD::SELECT_CC: - Result = DAG.getNode(ISD::SELECT_CC, dl, NewVT, Node->getOperand(0), - Node->getOperand(1), - ScalarizeVectorOp(Op.getOperand(2)), - ScalarizeVectorOp(Op.getOperand(3)), - Node->getOperand(4)); - break; - case ISD::VSETCC: { - SDValue Op0 = ScalarizeVectorOp(Op.getOperand(0)); - SDValue Op1 = ScalarizeVectorOp(Op.getOperand(1)); - Result = DAG.getNode(ISD::SETCC, dl, - TLI.getSetCCResultType(Op0.getValueType()), - Op0, Op1, Op.getOperand(2)); - Result = DAG.getNode(ISD::SELECT, dl, NewVT, Result, - DAG.getConstant(-1ULL, NewVT), - DAG.getConstant(0ULL, NewVT)); - break; - } - } - - if (TLI.isTypeLegal(NewVT)) - Result = LegalizeOp(Result); - bool isNew = ScalarizedNodes.insert(std::make_pair(Op, Result)).second; - assert(isNew && "Value already scalarized?"); - isNew = isNew; - return Result; -} - - -SDValue SelectionDAGLegalize::WidenVectorOp(SDValue Op, MVT WidenVT) { - assert(0 && "This should be dead!"); - std::map::iterator I = WidenNodes.find(Op); - if (I != WidenNodes.end()) return I->second; - - MVT VT = Op.getValueType(); - assert(VT.isVector() && "Cannot widen non-vector type!"); - - SDValue Result; - SDNode *Node = Op.getNode(); - DebugLoc dl = Node->getDebugLoc(); - MVT EVT = VT.getVectorElementType(); - - unsigned NumElts = VT.getVectorNumElements(); - unsigned NewNumElts = WidenVT.getVectorNumElements(); - assert(NewNumElts > NumElts && "Cannot widen to smaller type!"); - assert(NewNumElts < 17); - - // When widen is called, it is assumed that it is more efficient to use a - // wide type. The default action is to widen to operation to a wider legal - // vector type and then do the operation if it is legal by calling LegalizeOp - // again. If there is no vector equivalent, we will unroll the operation, do - // it, and rebuild the vector. If most of the operations are vectorizible to - // the legal type, the resulting code will be more efficient. If this is not - // the case, the resulting code will preform badly as we end up generating - // code to pack/unpack the results. It is the function that calls widen - // that is responsible for seeing this doesn't happen. - switch (Node->getOpcode()) { - default: -#ifndef NDEBUG - Node->dump(&DAG); -#endif - assert(0 && "Unexpected operation in WidenVectorOp!"); - break; - case ISD::CopyFromReg: - assert(0 && "CopyFromReg doesn't need widening!"); - case ISD::Constant: - case ISD::ConstantFP: - // To build a vector of these elements, clients should call BuildVector - // and with each element instead of creating a node with a vector type - assert(0 && "Unexpected operation in WidenVectorOp!"); - case ISD::VAARG: - // Variable Arguments with vector types doesn't make any sense to me - assert(0 && "Unexpected operation in WidenVectorOp!"); - break; - case ISD::UNDEF: - Result = DAG.getUNDEF(WidenVT); - break; - case ISD::BUILD_VECTOR: { - // Build a vector with undefined for the new nodes - SDValueVector NewOps(Node->op_begin(), Node->op_end()); - for (unsigned i = NumElts; i < NewNumElts; ++i) { - NewOps.push_back(DAG.getUNDEF(EVT)); - } - Result = DAG.getNode(ISD::BUILD_VECTOR, dl, WidenVT, - &NewOps[0], NewOps.size()); - break; - } - case ISD::INSERT_VECTOR_ELT: { - SDValue Tmp1 = WidenVectorOp(Node->getOperand(0), WidenVT); - Result = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl, WidenVT, Tmp1, - Node->getOperand(1), Node->getOperand(2)); - break; - } - case ISD::VECTOR_SHUFFLE: { - SDValue Tmp1 = WidenVectorOp(Node->getOperand(0), WidenVT); - SDValue Tmp2 = WidenVectorOp(Node->getOperand(1), WidenVT); - ShuffleVectorSDNode *SVOp = cast(Node); - SmallVector NewMask; - for (unsigned i = 0; i < NumElts; ++i) { - int Idx = SVOp->getMaskElt(i); - if (Idx < (int)NumElts) - NewMask.push_back(Idx); - else - NewMask.push_back(Idx + NewNumElts - NumElts); - } - for (unsigned i = NumElts; i < NewNumElts; ++i) - NewMask.push_back(-1); - - Result = DAG.getVectorShuffle(WidenVT, dl, Tmp1, Tmp2, &NewMask[0]); - break; - } - case ISD::LOAD: { - // If the load widen returns true, we can use a single load for the - // vector. Otherwise, it is returning a token factor for multiple - // loads. - SDValue TFOp; - if (LoadWidenVectorOp(Result, TFOp, Op, WidenVT)) - AddLegalizedOperand(Op.getValue(1), LegalizeOp(TFOp.getValue(1))); - else - AddLegalizedOperand(Op.getValue(1), LegalizeOp(TFOp.getValue(0))); - break; - } - - case ISD::BIT_CONVERT: { - SDValue Tmp1 = Node->getOperand(0); - // Converts between two different types so we need to determine - // the correct widen type for the input operand. - MVT InVT = Tmp1.getValueType(); - unsigned WidenSize = WidenVT.getSizeInBits(); - if (InVT.isVector()) { - MVT InEltVT = InVT.getVectorElementType(); - unsigned InEltSize = InEltVT.getSizeInBits(); - assert(WidenSize % InEltSize == 0 && - "can not widen bit convert that are not multiple of element type"); - MVT NewInWidenVT = MVT::getVectorVT(InEltVT, WidenSize / InEltSize); - Tmp1 = WidenVectorOp(Tmp1, NewInWidenVT); - assert(Tmp1.getValueType().getSizeInBits() == WidenVT.getSizeInBits()); - Result = DAG.getNode(ISD::BIT_CONVERT, dl, WidenVT, Tmp1); - } else { - // If the result size is a multiple of the input size, widen the input - // and then convert. - unsigned InSize = InVT.getSizeInBits(); - assert(WidenSize % InSize == 0 && - "can not widen bit convert that are not multiple of element type"); - unsigned NewNumElts = WidenSize / InSize; - SmallVector Ops(NewNumElts); - SDValue UndefVal = DAG.getUNDEF(InVT); - Ops[0] = Tmp1; - for (unsigned i = 1; i < NewNumElts; ++i) - Ops[i] = UndefVal; - - MVT NewInVT = MVT::getVectorVT(InVT, NewNumElts); - Result = DAG.getNode(ISD::BUILD_VECTOR, dl, NewInVT, &Ops[0], NewNumElts); - Result = DAG.getNode(ISD::BIT_CONVERT, dl, WidenVT, Result); - } - break; - } - - case ISD::SINT_TO_FP: - case ISD::UINT_TO_FP: - case ISD::FP_TO_SINT: - case ISD::FP_TO_UINT: - case ISD::FP_ROUND: { - SDValue Tmp1 = Node->getOperand(0); - // Converts between two different types so we need to determine - // the correct widen type for the input operand. - MVT TVT = Tmp1.getValueType(); - assert(TVT.isVector() && "can not widen non vector type"); - MVT TEVT = TVT.getVectorElementType(); - MVT TWidenVT = MVT::getVectorVT(TEVT, NewNumElts); - Tmp1 = WidenVectorOp(Tmp1, TWidenVT); - assert(Tmp1.getValueType().getVectorNumElements() == NewNumElts); - Result = DAG.getNode(Node->getOpcode(), dl, WidenVT, Tmp1); - break; - } - - case ISD::FP_EXTEND: - assert(0 && "Case not implemented. Dynamically dead with 2 FP types!"); - case ISD::TRUNCATE: - case ISD::SIGN_EXTEND: - case ISD::ZERO_EXTEND: - case ISD::ANY_EXTEND: - case ISD::SIGN_EXTEND_INREG: - case ISD::FABS: - case ISD::FNEG: - case ISD::FSQRT: - case ISD::FSIN: - case ISD::FCOS: - case ISD::CTPOP: - case ISD::CTTZ: - case ISD::CTLZ: { - // Unary op widening - SDValue Tmp1; - Tmp1 = WidenVectorOp(Node->getOperand(0), WidenVT); - assert(Tmp1.getValueType() == WidenVT); - Result = DAG.getNode(Node->getOpcode(), dl, WidenVT, Tmp1); - break; - } - case ISD::CONVERT_RNDSAT: { - SDValue RndOp = Node->getOperand(3); - SDValue SatOp = Node->getOperand(4); - SDValue SrcOp = Node->getOperand(0); - - // Converts between two different types so we need to determine - // the correct widen type for the input operand. - MVT SVT = SrcOp.getValueType(); - assert(SVT.isVector() && "can not widen non vector type"); - MVT SEVT = SVT.getVectorElementType(); - MVT SWidenVT = MVT::getVectorVT(SEVT, NewNumElts); - - SrcOp = WidenVectorOp(SrcOp, SWidenVT); - assert(SrcOp.getValueType() == WidenVT); - SDValue DTyOp = DAG.getValueType(WidenVT); - SDValue STyOp = DAG.getValueType(SrcOp.getValueType()); - ISD::CvtCode CvtCode = cast(Node)->getCvtCode(); - - Result = DAG.getConvertRndSat(WidenVT, dl, SrcOp, DTyOp, STyOp, - RndOp, SatOp, CvtCode); - break; - } - case ISD::FPOW: - case ISD::FPOWI: - case ISD::ADD: - case ISD::SUB: - case ISD::MUL: - case ISD::MULHS: - case ISD::MULHU: - case ISD::AND: - case ISD::OR: - case ISD::XOR: - case ISD::FADD: - case ISD::FSUB: - case ISD::FMUL: - case ISD::SDIV: - case ISD::SREM: - case ISD::FDIV: - case ISD::FREM: - case ISD::FCOPYSIGN: - case ISD::UDIV: - case ISD::UREM: - case ISD::BSWAP: { - // Binary op widening - SDValue Tmp1 = WidenVectorOp(Node->getOperand(0), WidenVT); - SDValue Tmp2 = WidenVectorOp(Node->getOperand(1), WidenVT); - assert(Tmp1.getValueType() == WidenVT && Tmp2.getValueType() == WidenVT); - Result = DAG.getNode(Node->getOpcode(), dl, WidenVT, Tmp1, Tmp2); - break; - } - - case ISD::SHL: - case ISD::SRA: - case ISD::SRL: { - SDValue Tmp1 = WidenVectorOp(Node->getOperand(0), WidenVT); - assert(Tmp1.getValueType() == WidenVT); - SDValue ShOp = Node->getOperand(1); - MVT ShVT = ShOp.getValueType(); - MVT NewShVT = MVT::getVectorVT(ShVT.getVectorElementType(), - WidenVT.getVectorNumElements()); - ShOp = WidenVectorOp(ShOp, NewShVT); - assert(ShOp.getValueType() == NewShVT); - Result = DAG.getNode(Node->getOpcode(), dl, WidenVT, Tmp1, ShOp); - break; - } - - case ISD::EXTRACT_VECTOR_ELT: { - SDValue Tmp1 = WidenVectorOp(Node->getOperand(0), WidenVT); - assert(Tmp1.getValueType() == WidenVT); - Result = DAG.getNode(Node->getOpcode(), dl, EVT, Tmp1, Node->getOperand(1)); - break; - } - case ISD::CONCAT_VECTORS: { - // We concurrently support only widen on a multiple of the incoming vector. - // We could widen on a multiple of the incoming operand if necessary. - unsigned NumConcat = NewNumElts / NumElts; - assert(NewNumElts % NumElts == 0 && "Can widen only a multiple of vector"); - SDValue UndefVal = DAG.getUNDEF(VT); - SmallVector MOps; - MOps.push_back(Op); - for (unsigned i = 1; i != NumConcat; ++i) { - MOps.push_back(UndefVal); - } - Result = LegalizeOp(DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, - &MOps[0], MOps.size())); - break; - } - case ISD::EXTRACT_SUBVECTOR: { - SDValue Tmp1 = Node->getOperand(0); - SDValue Idx = Node->getOperand(1); - ConstantSDNode *CIdx = dyn_cast(Idx); - if (CIdx && CIdx->getZExtValue() == 0) { - // Since we are access the start of the vector, the incoming - // vector type might be the proper. - MVT Tmp1VT = Tmp1.getValueType(); - if (Tmp1VT == WidenVT) - return Tmp1; - else { - unsigned Tmp1VTNumElts = Tmp1VT.getVectorNumElements(); - if (Tmp1VTNumElts < NewNumElts) - Result = WidenVectorOp(Tmp1, WidenVT); - else - Result = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, WidenVT, Tmp1, Idx); - } - } else if (NewNumElts % NumElts == 0) { - // Widen the extracted subvector. - unsigned NumConcat = NewNumElts / NumElts; - SDValue UndefVal = DAG.getUNDEF(VT); - SmallVector MOps; - MOps.push_back(Op); - for (unsigned i = 1; i != NumConcat; ++i) { - MOps.push_back(UndefVal); - } - Result = LegalizeOp(DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, - &MOps[0], MOps.size())); - } else { - assert(0 && "can not widen extract subvector"); - // This could be implemented using insert and build vector but I would - // like to see when this happens. - } - break; - } - - case ISD::SELECT: { - // Determine new condition widen type and widen - SDValue Cond1 = Node->getOperand(0); - MVT CondVT = Cond1.getValueType(); - assert(CondVT.isVector() && "can not widen non vector type"); - MVT CondEVT = CondVT.getVectorElementType(); - MVT CondWidenVT = MVT::getVectorVT(CondEVT, NewNumElts); - Cond1 = WidenVectorOp(Cond1, CondWidenVT); - assert(Cond1.getValueType() == CondWidenVT && "Condition not widen"); - - SDValue Tmp1 = WidenVectorOp(Node->getOperand(1), WidenVT); - SDValue Tmp2 = WidenVectorOp(Node->getOperand(2), WidenVT); - assert(Tmp1.getValueType() == WidenVT && Tmp2.getValueType() == WidenVT); - Result = DAG.getNode(Node->getOpcode(), dl, WidenVT, Cond1, Tmp1, Tmp2); - break; - } - - case ISD::SELECT_CC: { - // Determine new condition widen type and widen - SDValue Cond1 = Node->getOperand(0); - SDValue Cond2 = Node->getOperand(1); - MVT CondVT = Cond1.getValueType(); - assert(CondVT.isVector() && "can not widen non vector type"); - assert(CondVT == Cond2.getValueType() && "mismatch lhs/rhs"); - MVT CondEVT = CondVT.getVectorElementType(); - MVT CondWidenVT = MVT::getVectorVT(CondEVT, NewNumElts); - Cond1 = WidenVectorOp(Cond1, CondWidenVT); - Cond2 = WidenVectorOp(Cond2, CondWidenVT); - assert(Cond1.getValueType() == CondWidenVT && - Cond2.getValueType() == CondWidenVT && "condition not widen"); - - SDValue Tmp1 = WidenVectorOp(Node->getOperand(2), WidenVT); - SDValue Tmp2 = WidenVectorOp(Node->getOperand(3), WidenVT); - assert(Tmp1.getValueType() == WidenVT && Tmp2.getValueType() == WidenVT && - "operands not widen"); - Result = DAG.getNode(Node->getOpcode(), dl, WidenVT, Cond1, Cond2, Tmp1, - Tmp2, Node->getOperand(4)); - break; - } - case ISD::VSETCC: { - // Determine widen for the operand - SDValue Tmp1 = Node->getOperand(0); - MVT TmpVT = Tmp1.getValueType(); - assert(TmpVT.isVector() && "can not widen non vector type"); - MVT TmpEVT = TmpVT.getVectorElementType(); - MVT TmpWidenVT = MVT::getVectorVT(TmpEVT, NewNumElts); - Tmp1 = WidenVectorOp(Tmp1, TmpWidenVT); - SDValue Tmp2 = WidenVectorOp(Node->getOperand(1), TmpWidenVT); - Result = DAG.getNode(Node->getOpcode(), dl, WidenVT, Tmp1, Tmp2, - Node->getOperand(2)); - break; - } - case ISD::ATOMIC_CMP_SWAP: - case ISD::ATOMIC_LOAD_ADD: - case ISD::ATOMIC_LOAD_SUB: - case ISD::ATOMIC_LOAD_AND: - case ISD::ATOMIC_LOAD_OR: - case ISD::ATOMIC_LOAD_XOR: - case ISD::ATOMIC_LOAD_NAND: - case ISD::ATOMIC_LOAD_MIN: - case ISD::ATOMIC_LOAD_MAX: - case ISD::ATOMIC_LOAD_UMIN: - case ISD::ATOMIC_LOAD_UMAX: - case ISD::ATOMIC_SWAP: { - // For now, we assume that using vectors for these operations don't make - // much sense so we just split it. We return an empty result - SDValue X, Y; - SplitVectorOp(Op, X, Y); - return Result; - break; - } - - } // end switch (Node->getOpcode()) - - assert(Result.getNode() && "Didn't set a result!"); - if (Result != Op) - Result = LegalizeOp(Result); - - AddWidenedOperand(Op, Result); - return Result; -} - -// Utility function to find a legal vector type and its associated element -// type from a preferred width and whose vector type must be the same size -// as the VVT. -// TLI: Target lowering used to determine legal types -// Width: Preferred width of element type -// VVT: Vector value type whose size we must match. -// Returns VecEVT and EVT - the vector type and its associated element type -static void FindWidenVecType(const TargetLowering &TLI, unsigned Width, MVT VVT, - MVT& EVT, MVT& VecEVT) { - // We start with the preferred width, make it a power of 2 and see if - // we can find a vector type of that width. If not, we reduce it by - // another power of 2. If we have widen the type, a vector of bytes should - // always be legal. - assert(TLI.isTypeLegal(VVT)); - unsigned EWidth = Width + 1; - do { - assert(EWidth > 0); - EWidth = (1 << Log2_32(EWidth-1)); - EVT = MVT::getIntegerVT(EWidth); - unsigned NumEVT = VVT.getSizeInBits()/EWidth; - VecEVT = MVT::getVectorVT(EVT, NumEVT); - } while (!TLI.isTypeLegal(VecEVT) || - VVT.getSizeInBits() != VecEVT.getSizeInBits()); -} - -SDValue SelectionDAGLegalize::genWidenVectorLoads(SDValueVector& LdChain, - SDValue Chain, - SDValue BasePtr, - const Value *SV, - int SVOffset, - unsigned Alignment, - bool isVolatile, - unsigned LdWidth, - MVT ResType, - DebugLoc dl) { - // We assume that we have good rules to handle loading power of two loads so - // we break down the operations to power of 2 loads. The strategy is to - // load the largest power of 2 that we can easily transform to a legal vector - // and then insert into that vector, and the cast the result into the legal - // vector that we want. This avoids unnecessary stack converts. - // TODO: If the Ldwidth is legal, alignment is the same as the LdWidth, and - // the load is nonvolatile, we an use a wider load for the value. - // Find a vector length we can load a large chunk - MVT EVT, VecEVT; - unsigned EVTWidth; - FindWidenVecType(TLI, LdWidth, ResType, EVT, VecEVT); - EVTWidth = EVT.getSizeInBits(); - - SDValue LdOp = DAG.getLoad(EVT, dl, Chain, BasePtr, SV, SVOffset, - isVolatile, Alignment); - SDValue VecOp = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, VecEVT, LdOp); - LdChain.push_back(LdOp.getValue(1)); - - // Check if we can load the element with one instruction - if (LdWidth == EVTWidth) { - return DAG.getNode(ISD::BIT_CONVERT, dl, ResType, VecOp); - } - - // The vector element order is endianness dependent. - unsigned Idx = 1; - LdWidth -= EVTWidth; - unsigned Offset = 0; - - while (LdWidth > 0) { - unsigned Increment = EVTWidth / 8; - Offset += Increment; - BasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, - DAG.getIntPtrConstant(Increment)); - - if (LdWidth < EVTWidth) { - // Our current type we are using is too large, use a smaller size by - // using a smaller power of 2 - unsigned oEVTWidth = EVTWidth; - FindWidenVecType(TLI, LdWidth, ResType, EVT, VecEVT); - EVTWidth = EVT.getSizeInBits(); - // Readjust position and vector position based on new load type - Idx = Idx * (oEVTWidth/EVTWidth); - VecOp = DAG.getNode(ISD::BIT_CONVERT, dl, VecEVT, VecOp); - } - - SDValue LdOp = DAG.getLoad(EVT, dl, Chain, BasePtr, SV, - SVOffset+Offset, isVolatile, - MinAlign(Alignment, Offset)); - LdChain.push_back(LdOp.getValue(1)); - VecOp = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl, VecEVT, VecOp, LdOp, - DAG.getIntPtrConstant(Idx++)); - - LdWidth -= EVTWidth; - } - - return DAG.getNode(ISD::BIT_CONVERT, dl, ResType, VecOp); -} - -bool SelectionDAGLegalize::LoadWidenVectorOp(SDValue& Result, - SDValue& TFOp, - SDValue Op, - MVT NVT) { - // TODO: Add support for ConcatVec and the ability to load many vector - // types (e.g., v4i8). This will not work when a vector register - // to memory mapping is strange (e.g., vector elements are not - // stored in some sequential order). - - // It must be true that the widen vector type is bigger than where - // we need to load from. - LoadSDNode *LD = cast(Op.getNode()); - MVT LdVT = LD->getMemoryVT(); - DebugLoc dl = LD->getDebugLoc(); - assert(LdVT.isVector() && NVT.isVector()); - assert(LdVT.getVectorElementType() == NVT.getVectorElementType()); - - // Load information - SDValue Chain = LD->getChain(); - SDValue BasePtr = LD->getBasePtr(); - int SVOffset = LD->getSrcValueOffset(); - unsigned Alignment = LD->getAlignment(); - bool isVolatile = LD->isVolatile(); - const Value *SV = LD->getSrcValue(); - unsigned int LdWidth = LdVT.getSizeInBits(); - - // Load value as a large register - SDValueVector LdChain; - Result = genWidenVectorLoads(LdChain, Chain, BasePtr, SV, SVOffset, - Alignment, isVolatile, LdWidth, NVT, dl); - - if (LdChain.size() == 1) { - TFOp = LdChain[0]; - return true; - } - else { - TFOp=DAG.getNode(ISD::TokenFactor, dl, MVT::Other, - &LdChain[0], LdChain.size()); - return false; - } -} - - -void SelectionDAGLegalize::genWidenVectorStores(SDValueVector& StChain, - SDValue Chain, - SDValue BasePtr, - const Value *SV, - int SVOffset, - unsigned Alignment, - bool isVolatile, - SDValue ValOp, - unsigned StWidth, - DebugLoc dl) { - // Breaks the stores into a series of power of 2 width stores. For any - // width, we convert the vector to the vector of element size that we - // want to store. This avoids requiring a stack convert. - - // Find a width of the element type we can store with - MVT VVT = ValOp.getValueType(); - MVT EVT, VecEVT; - unsigned EVTWidth; - FindWidenVecType(TLI, StWidth, VVT, EVT, VecEVT); - EVTWidth = EVT.getSizeInBits(); - - SDValue VecOp = DAG.getNode(ISD::BIT_CONVERT, dl, VecEVT, ValOp); - SDValue EOp = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, EVT, VecOp, - DAG.getIntPtrConstant(0)); - SDValue StOp = DAG.getStore(Chain, dl, EOp, BasePtr, SV, SVOffset, - isVolatile, Alignment); - StChain.push_back(StOp); - - // Check if we are done - if (StWidth == EVTWidth) { - return; - } - - unsigned Idx = 1; - StWidth -= EVTWidth; - unsigned Offset = 0; - - while (StWidth > 0) { - unsigned Increment = EVTWidth / 8; - Offset += Increment; - BasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, - DAG.getIntPtrConstant(Increment)); - - if (StWidth < EVTWidth) { - // Our current type we are using is too large, use a smaller size by - // using a smaller power of 2 - unsigned oEVTWidth = EVTWidth; - FindWidenVecType(TLI, StWidth, VVT, EVT, VecEVT); - EVTWidth = EVT.getSizeInBits(); - // Readjust position and vector position based on new load type - Idx = Idx * (oEVTWidth/EVTWidth); - VecOp = DAG.getNode(ISD::BIT_CONVERT, dl, VecEVT, VecOp); - } - - EOp = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, EVT, VecOp, - DAG.getIntPtrConstant(Idx++)); - StChain.push_back(DAG.getStore(Chain, dl, EOp, BasePtr, SV, - SVOffset + Offset, isVolatile, - MinAlign(Alignment, Offset))); - StWidth -= EVTWidth; - } -} - - -SDValue SelectionDAGLegalize::StoreWidenVectorOp(StoreSDNode *ST, - SDValue Chain, - SDValue BasePtr) { - // TODO: It might be cleaner if we can use SplitVector and have more legal - // vector types that can be stored into memory (e.g., v4xi8 can - // be stored as a word). This will not work when a vector register - // to memory mapping is strange (e.g., vector elements are not - // stored in some sequential order). - - MVT StVT = ST->getMemoryVT(); - SDValue ValOp = ST->getValue(); - DebugLoc dl = ST->getDebugLoc(); - - // Check if we have widen this node with another value - std::map::iterator I = WidenNodes.find(ValOp); - if (I != WidenNodes.end()) - ValOp = I->second; - - MVT VVT = ValOp.getValueType(); - - // It must be true that we the widen vector type is bigger than where - // we need to store. - assert(StVT.isVector() && VVT.isVector()); - assert(StVT.bitsLT(VVT)); - assert(StVT.getVectorElementType() == VVT.getVectorElementType()); - - // Store value - SDValueVector StChain; - genWidenVectorStores(StChain, Chain, BasePtr, ST->getSrcValue(), - ST->getSrcValueOffset(), ST->getAlignment(), - ST->isVolatile(), ValOp, StVT.getSizeInBits(), dl); - if (StChain.size() == 1) - return StChain[0]; - else - return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, - &StChain[0], StChain.size()); -} - - // SelectionDAG::Legalize - This is the entry point for the file. // void SelectionDAG::Legalize(bool TypesNeedLegalizing, From baldrick at free.fr Tue May 26 04:11:32 2009 From: baldrick at free.fr (Duncan Sands) Date: Tue, 26 May 2009 11:11:32 +0200 Subject: [llvm-commits] CVS: llvm-www/pubs/2009-05-21-Thesis-Barrett-3c.html 2009-05-21-Thesis-Barrett-3c.pdf In-Reply-To: <200905260105.n4Q15OKX010163@zion.cs.uiuc.edu> References: <200905260105.n4Q15OKX010163@zion.cs.uiuc.edu> Message-ID: <4A1BB244.4020605@free.fr> Hi Chris, > + The following report presents an investigation into designing and implementing com puter languages using a modern compiler construction tool-kit called the "Low Level Virtual Machine" (LLVM), in combination with a modern scripting language. The report covers in detail traditional approaches to compiler construction, parsing and virtual machine theory. Comparisons are made between traditional approaches and the modern approach offered by LLVM, via an experimental object oriented language called 3c, developed using LLVM, the Aperiot parser, Python and an incremental de velopment methodology. com puter -> computer de velopment -> development Ciao, Duncan. From jay.foad at gmail.com Tue May 26 08:54:00 2009 From: jay.foad at gmail.com (Jay Foad) Date: Tue, 26 May 2009 14:54:00 +0100 Subject: [llvm-commits] [LLVMdev] Removing std::vector from APIs Message-ID: 2009/5/14 Chris Lattner : > One minor thing is that?StructType::get(NULL, 0)?looks somewhat strange to > me. ?How about adding a zero-argument version of "get" that returns the > empty struct? ?That would allow code to use?StructType::get(). How about this? It adds: FunctionType *FunctionType::get(const Type *Result, bool isVarArg); StructType *StructType::get(bool isPacked = false); .. although the latter isn't used much because I've preferred to use Type::EmptyStructTy instead. It passes "make check", cfe's "make test", and llvm-gcc still bootstraps. Thanks, Jay. -------------- next part -------------- A non-text attachment was scrubbed... Name: patch.empty Type: application/octet-stream Size: 15818 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090526/1e789537/attachment.obj From luked at cs.rochester.edu Tue May 26 09:06:08 2009 From: luked at cs.rochester.edu (Luke Dalessandro) Date: Tue, 26 May 2009 10:06:08 -0400 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1B55CE.10207@mxc.ca> References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> <4A1B22D9.6000607@mxc.ca> <4A1B352D.9050208@mxc.ca> <4A1B55CE.10207@mxc.ca> Message-ID: <4A1BF750.4090705@cs.rochester.edu> Nick Lewycky wrote: > Eli Friedman wrote: >> On Mon, May 25, 2009 at 5:17 PM, Nick Lewycky wrote: >>> Eli Friedman wrote: >>>> On Mon, May 25, 2009 at 3:59 PM, Nick Lewycky wrote: [cut] >>>> Ooh, that's right. Actually, it gets nastier than that: suppose >>>> something like the following: >>>> >>>> static int gval1 = 1; >>>> int gval2 = 1; >>>> struct A { A() { if (gval1) { printf("%d\n", gval2); } }; >>>> void a() { static A x(); gval2 = 0;} >>>> void b() { a(); } >>>> void c() { gval1 = 0; a(); } >>>> >>>> Then suppose b() and c() are called at the same time on separate >>>> threads, and we've inlined/optimized everything; if the guard is >>>> removed from c(), we can end up printing out "0", which shouldn't be >>>> possible because setting gval2 to zero only happens after the >>>> constructor for A finishes. >>>> >>> Right. deadGuardElim checks for memory *reads* as well as writes and >>> unwinds in order to prevent this sort of thing from happening. >>> >> If a() gets inlined into c(), the load inside A() of gval1 can be >> eliminated; I'm not sure if we do that particular optimization at the >> moment, though. This example has data races on gval1 and gval2. The LLVM VM doesn't have a memory model as far as I know, which basically means that all sorts of crazy things are allowed to happen to this code. Printing out 0 is probably fine. Even in something like the Java Memory Model printing out 0 is fine, given the raciness of the code. The main concern is if the __cxa_guard_acquire and release pair are supposed to have locking semantics. The Intel ABI says that they are "probably" implemented with locks, but doesn't really pin down any ordering semantics for them. It seems mandatory that any real implementation has to enforce some sort of synchronization to be correct -- even if it's nonblocking. This probably requires that you insert a memory fence if you remove the guards, or know the actual implementation of the library calls. I don't have an example off-hand that triggers this behavior, but it's one of those traditional problems. The Java literature probably has some examples that are applicable. > > Boo. We'll continue to have problems so long as we try to eliminate one > pair at a time, we need to either prove them all dead for a given guard > variable or not. > You may be ok. You just need to make sure that you don't introduce a data race into an otherwise data-race-free program. Luke > Excellent review, by the way! > > Nick > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From eli.friedman at gmail.com Tue May 26 09:23:25 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Tue, 26 May 2009 07:23:25 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1BF750.4090705@cs.rochester.edu> References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> <4A1B22D9.6000607@mxc.ca> <4A1B352D.9050208@mxc.ca> <4A1B55CE.10207@mxc.ca> <4A1BF750.4090705@cs.rochester.edu> Message-ID: On Tue, May 26, 2009 at 7:06 AM, Luke Dalessandro wrote: > Nick Lewycky wrote: >> Eli Friedman wrote: >>> On Mon, May 25, 2009 at 5:17 PM, Nick Lewycky wrote: >>>> Eli Friedman wrote: >>>>> On Mon, May 25, 2009 at 3:59 PM, Nick Lewycky wrote: > > [cut] > >>>>> Ooh, that's right. ?Actually, it gets nastier than that: suppose >>>>> something like the following: >>>>> >>>>> static int gval1 = 1; >>>>> int gval2 = 1; >>>>> struct A { A() { if (gval1) { printf("%d\n", gval2); } }; >>>>> void a() { static A x(); gval2 = 0;} >>>>> void b() { a(); } >>>>> void c() { gval1 = 0; a(); } >>>>> >>>>> Then suppose b() and c() are called at the same time on separate >>>>> threads, and we've inlined/optimized everything; if the guard is >>>>> removed from c(), we can end up printing out "0", which shouldn't be >>>>> possible because setting gval2 to zero only happens after the >>>>> constructor for A finishes. >>>>> >>>> Right. deadGuardElim checks for memory *reads* as well as writes and >>>> unwinds in order to prevent this sort of thing from happening. >>>> >>> If a() gets inlined into c(), the load inside A() of gval1 can be >>> eliminated; I'm not sure if we do that particular optimization at the >>> moment, though. > > This example has data races on gval1 and gval2. The LLVM VM doesn't have > a memory model as far as I know, which basically means that all sorts of > crazy things are allowed to happen to this code. Printing out 0 is > probably fine. Even in something like the Java Memory Model printing out > 0 is fine, given the raciness of the code. There is no race on gval2: both threads only set gval2 after "static A x()" is fully constructed, and we don't care about the value at that point. The race of gval1 is irrelevant to the point; I left out synchronization for it to simplify the example. -Eli From luked at cs.rochester.edu Tue May 26 11:07:07 2009 From: luked at cs.rochester.edu (Luke Dalessandro) Date: Tue, 26 May 2009 12:07:07 -0400 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: References: <4A1A1FBE.5090902@mxc.ca> <4A1A39C6.8080302@mxc.ca> <4A1B22D9.6000607@mxc.ca> <4A1B352D.9050208@mxc.ca> <4A1B55CE.10207@mxc.ca> <4A1BF750.4090705@cs.rochester.edu> Message-ID: <4A1C13AB.5090007@cs.rochester.edu> Eli Friedman wrote: > On Tue, May 26, 2009 at 7:06 AM, Luke Dalessandro > wrote: >> Nick Lewycky wrote: >>> Eli Friedman wrote: >>>> On Mon, May 25, 2009 at 5:17 PM, Nick Lewycky wrote: >>>>> Eli Friedman wrote: >>>>>> On Mon, May 25, 2009 at 3:59 PM, Nick Lewycky wrote: >> [cut] >> >>>>>> Ooh, that's right. Actually, it gets nastier than that: suppose >>>>>> something like the following: >>>>>> >>>>>> static int gval1 = 1; >>>>>> int gval2 = 1; >>>>>> struct A { A() { if (gval1) { printf("%d\n", gval2); } }; >>>>>> void a() { static A x(); gval2 = 0;} >>>>>> void b() { a(); } >>>>>> void c() { gval1 = 0; a(); } >>>>>> >>>>>> Then suppose b() and c() are called at the same time on separate >>>>>> threads, and we've inlined/optimized everything; if the guard is >>>>>> removed from c(), we can end up printing out "0", which shouldn't be >>>>>> possible because setting gval2 to zero only happens after the >>>>>> constructor for A finishes. >>>>>> >>>>> Right. deadGuardElim checks for memory *reads* as well as writes and >>>>> unwinds in order to prevent this sort of thing from happening. >>>>> >>>> If a() gets inlined into c(), the load inside A() of gval1 can be >>>> eliminated; I'm not sure if we do that particular optimization at the >>>> moment, though. >> This example has data races on gval1 and gval2. The LLVM VM doesn't have >> a memory model as far as I know, which basically means that all sorts of >> crazy things are allowed to happen to this code. Printing out 0 is >> probably fine. Even in something like the Java Memory Model printing out >> 0 is fine, given the raciness of the code. > > There is no race on gval2: both threads only set gval2 after "static A > x()" is fully constructed, and we don't care about the value at that > point. The race of gval1 is irrelevant to the point; I left out > synchronization for it to simplify the example. Hi Eli, I'm sorry that I wasn't clear. I agree that if the cxa_guard routines are meant to have locking semantics, then there is no data race on gval2 (given a Java/C++0X-ish style synchronization model). What I was trying to point out was that, if the cxa guards don't have a memory model synchronization component, then the transformation is fine, and the unexpected result is fine. If the cxa guards to have a synchronization component, then it should be modeled as part of the guard call, i.e., the acquire call clobbers memory and serves as a compiler fence. Whatever the modeled memory behavior of gcc's __sync_lock_test_and_set is probably fine. This should suppress the optimization that eliminates the load inside of c() when the guarded constructor is inlined (or eliminates the load inside c() by hoisting the acquire over the store to gval1). I think this prevents guarded constructors that have side effects from becoming side effect free -- allowing the guard eliminator to run as coded. I'm still pretty sure that removing guard pairs is likely to require leaving behind a compiler+hardware memory fence though, which will prevent future optimizations (and the hardware) from doing things they shouldn't. Luke > > -Eli > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From eli.friedman at gmail.com Tue May 26 12:07:55 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Tue, 26 May 2009 10:07:55 -0700 Subject: [llvm-commits] patch: CXAGuardElimination pass. In-Reply-To: <4A1C13AB.5090007@cs.rochester.edu> References: <4A1A1FBE.5090902@mxc.ca> <4A1B22D9.6000607@mxc.ca> <4A1B352D.9050208@mxc.ca> <4A1B55CE.10207@mxc.ca> <4A1BF750.4090705@cs.rochester.edu> <4A1C13AB.5090007@cs.rochester.edu> Message-ID: On Tue, May 26, 2009 at 9:07 AM, Luke Dalessandro wrote: > I agree that if the cxa_guard routines are meant to have locking > semantics, then there is no data race on gval2 (given a Java/C++0X-ish > style synchronization model). > > What I was trying to point out was that, if the cxa guards don't have a > memory model synchronization component, then the transformation is fine, > and the unexpected result is fine. The fundamental thing that the guards guarantee is that the variable is initialized before any of the code after the initialization is executed. That by itself seems like it should be enough. > If the cxa guards to have a synchronization component, then it should be > modeled as part of the guard call, i.e., the acquire call clobbers > memory and serves as a compiler fence. Whatever the modeled memory > behavior of gcc's __sync_lock_test_and_set is probably fine. This should > suppress the optimization that eliminates the load inside of c() when > the guarded constructor is inlined (or eliminates the load inside c() by > hoisting the acquire over the store to gval1). I think this prevents > guarded constructors that have side effects from becoming side effect > free -- allowing the guard eliminator to run as coded. The optimization in question works as follows: gval1 is an internal variable whose address is never taken with a single store to the variable. The store dominates the load inside the inlined constructor. Therefore, the store's value can be propagated into the constructor. No amount of messing with the memory model changes that. > I'm still pretty sure that removing guard pairs is likely to require > leaving behind a compiler+hardware memory fence though, which will > prevent future optimizations (and the hardware) from doing things they > shouldn't. Hmm, possibly. -Eli From daniel at zuster.org Tue May 26 12:26:19 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Tue, 26 May 2009 17:26:19 -0000 Subject: [llvm-commits] [test-suite] r72421 - /test-suite/trunk/SingleSource/UnitTests/ObjC/parameter-passing.m Message-ID: <200905261726.n4QHQJuX026952@zion.cs.uiuc.edu> Author: ddunbar Date: Tue May 26 12:26:19 2009 New Revision: 72421 URL: http://llvm.org/viewvc/llvm-project?rev=72421&view=rev Log: Fix format code for printing long long Modified: test-suite/trunk/SingleSource/UnitTests/ObjC/parameter-passing.m Modified: test-suite/trunk/SingleSource/UnitTests/ObjC/parameter-passing.m URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/ObjC/parameter-passing.m?rev=72421&r1=72420&r2=72421&view=diff ============================================================================== --- test-suite/trunk/SingleSource/UnitTests/ObjC/parameter-passing.m (original) +++ test-suite/trunk/SingleSource/UnitTests/ObjC/parameter-passing.m Tue May 26 12:26:19 2009 @@ -92,14 +92,14 @@ -(void) unary_ll: (long long) a0 { D(__FUNCTION__); - printf("\ta0: %ld\n", a0); + printf("\ta0: %lld\n", a0); self.ll_ivar = a0; } -(long long) return_ll { D(__FUNCTION__); long long rv = self.ll_ivar; - printf("\t returning: %ld\n", rv); + printf("\t returning: %lld\n", rv); return rv; } @@ -220,7 +220,7 @@ } { long long rv = [a return_ll]; - printf("\tresult: %ld\n\n", rv); + printf("\tresult: %lld\n\n", rv); assert(rv == ll_test_var); } { From gohman at apple.com Tue May 26 12:41:16 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 26 May 2009 17:41:16 -0000 Subject: [llvm-commits] [llvm] r72422 - in /llvm/trunk: lib/Analysis/ScalarEvolutionExpander.cpp test/Transforms/IndVarSimplify/divide-pointer.ll Message-ID: <200905261741.n4QHfGlU027748@zion.cs.uiuc.edu> Author: djg Date: Tue May 26 12:41:16 2009 New Revision: 72422 URL: http://llvm.org/viewvc/llvm-project?rev=72422&view=rev Log: In cases where a pointer value is an operand of a multiplication or division operation, don't attempt to use the operation's value as the base of a getelementptr. This fixes PR4271. Added: llvm/trunk/test/Transforms/IndVarSimplify/divide-pointer.ll Modified: llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp?rev=72422&r1=72421&r2=72422&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp Tue May 26 12:41:16 2009 @@ -448,9 +448,14 @@ ExposePointerBase(Base, RestArray[0], SE); // If we found a pointer, expand the AddRec with a GEP. if (const PointerType *PTy = dyn_cast(Base->getType())) { - Value *StartV = expand(Base); - assert(StartV->getType() == PTy && "Pointer type mismatch for GEP!"); - return expandAddToGEP(RestArray, RestArray+1, PTy, Ty, StartV); + // Make sure the Base isn't something exotic, such as a multiplied + // or divided pointer value. In those cases, the result type isn't + // actually a pointer type. + if (!isa(Base) && !isa(Base)) { + Value *StartV = expand(Base); + assert(StartV->getType() == PTy && "Pointer type mismatch for GEP!"); + return expandAddToGEP(RestArray, RestArray+1, PTy, Ty, StartV); + } } } Added: llvm/trunk/test/Transforms/IndVarSimplify/divide-pointer.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/divide-pointer.ll?rev=72422&view=auto ============================================================================== --- llvm/trunk/test/Transforms/IndVarSimplify/divide-pointer.ll (added) +++ llvm/trunk/test/Transforms/IndVarSimplify/divide-pointer.ll Tue May 26 12:41:16 2009 @@ -0,0 +1,95 @@ +; RUN: llvm-as < %s | opt -indvars +; PR4271 + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" +target triple = "i386-apple-darwin10.0" + %struct.xyz = type <{ i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, [8 x i8], i64, i64, i32, i32, [4 x i32], i32, i32, i32, i32, i32, i32, [76 x i32], i32, [2 x %struct.uvw] }> + %struct.uvw = type <{ i64, i64 }> + +define i32 @foo(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { +entry: + br label %while.body.i + +while.body.i: ; preds = %while.body.i, %entry + br i1 undef, label %while.body.i, label %bcopy_internal.exit + +bcopy_internal.exit: ; preds = %while.body.i + %conv135 = ptrtoint %struct.xyz* %header to i32 ; [#uses=1] + %shr136 = lshr i32 %conv135, 12 ; [#uses=1] + br label %for.body + +for.body: ; preds = %for.body, %bcopy_internal.exit + %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; [#uses=1] + %inc = add i32 %ppnum.052, 1 ; [#uses=2] + %cmp = icmp ugt i32 %inc, undef ; [#uses=1] + br i1 %cmp, label %if.then199, label %for.body + +if.then199: ; preds = %if.then199, %for.body + br label %if.then199 +} + +define i32 @same_thing_but_signed(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { +entry: + br label %while.body.i + +while.body.i: ; preds = %while.body.i, %entry + br i1 undef, label %while.body.i, label %bcopy_internal.exit + +bcopy_internal.exit: ; preds = %while.body.i + %conv135 = ptrtoint %struct.xyz* %header to i32 ; [#uses=1] + %shr136 = ashr i32 %conv135, 12 ; [#uses=1] + br label %for.body + +for.body: ; preds = %for.body, %bcopy_internal.exit + %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; [#uses=1] + %inc = add i32 %ppnum.052, 1 ; [#uses=2] + %cmp = icmp ugt i32 %inc, undef ; [#uses=1] + br i1 %cmp, label %if.then199, label %for.body + +if.then199: ; preds = %if.then199, %for.body + br label %if.then199 +} + +define i32 @same_thing_but_multiplied(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { +entry: + br label %while.body.i + +while.body.i: ; preds = %while.body.i, %entry + br i1 undef, label %while.body.i, label %bcopy_internal.exit + +bcopy_internal.exit: ; preds = %while.body.i + %conv135 = ptrtoint %struct.xyz* %header to i32 ; [#uses=1] + %shr136 = shl i32 %conv135, 12 ; [#uses=1] + br label %for.body + +for.body: ; preds = %for.body, %bcopy_internal.exit + %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; [#uses=1] + %inc = add i32 %ppnum.052, 1 ; [#uses=2] + %cmp = icmp ugt i32 %inc, undef ; [#uses=1] + br i1 %cmp, label %if.then199, label %for.body + +if.then199: ; preds = %if.then199, %for.body + br label %if.then199 +} + +define i32 @same_thing_but_xored(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { +entry: + br label %while.body.i + +while.body.i: ; preds = %while.body.i, %entry + br i1 undef, label %while.body.i, label %bcopy_internal.exit + +bcopy_internal.exit: ; preds = %while.body.i + %conv135 = ptrtoint %struct.xyz* %header to i32 ; [#uses=1] + %shr136 = xor i32 %conv135, 12 ; [#uses=1] + br label %for.body + +for.body: ; preds = %for.body, %bcopy_internal.exit + %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; [#uses=1] + %inc = add i32 %ppnum.052, 1 ; [#uses=2] + %cmp = icmp ugt i32 %inc, undef ; [#uses=1] + br i1 %cmp, label %if.then199, label %for.body + +if.then199: ; preds = %if.then199, %for.body + br label %if.then199 +} From gohman at apple.com Tue May 26 12:42:33 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 26 May 2009 17:42:33 -0000 Subject: [llvm-commits] [llvm] r72423 - /llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h Message-ID: <200905261742.n4QHgXHN027828@zion.cs.uiuc.edu> Author: djg Date: Tue May 26 12:42:32 2009 New Revision: 72423 URL: http://llvm.org/viewvc/llvm-project?rev=72423&view=rev Log: Give SCEVNaryExpr a doxygen comment. Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h?rev=72423&r1=72422&r2=72423&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h Tue May 26 12:42:32 2009 @@ -194,6 +194,10 @@ }; + //===--------------------------------------------------------------------===// + /// SCEVNAryExpr - This node is a base class providing common + /// functionality for n'ary operators. + /// class SCEVNAryExpr : public SCEV { protected: std::vector Operands; From gohman at apple.com Tue May 26 12:44:05 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 26 May 2009 17:44:05 -0000 Subject: [llvm-commits] [llvm] r72424 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp Message-ID: <200905261744.n4QHi5TP027887@zion.cs.uiuc.edu> Author: djg Date: Tue May 26 12:44:05 2009 New Revision: 72424 URL: http://llvm.org/viewvc/llvm-project?rev=72424&view=rev Log: For the return type of SCEVUDivExpr, use the RHS' type instead of that of the LHS. It doesn't matter for correctness, but the LHS is more likely than the RHS to be a pointer type in exotic cases, and it's more tidy to have it return the integer type. Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=72424&r1=72423&r2=72424&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Tue May 26 12:44:05 2009 @@ -346,7 +346,12 @@ } const Type *SCEVUDivExpr::getType() const { - return LHS->getType(); + // In most cases the types of LHS and RHS will be the same, but in some + // crazy cases one or the other may be a pointer. ScalarEvolution doesn't + // depend on the type for correctness, but handling types carefully can + // avoid extra casts in the SCEVExpander. The LHS is more likely to be + // a pointer type than the RHS, so use the RHS' type here. + return RHS->getType(); } // SCEVAddRecExprs - Only allow the creation of one SCEVAddRecExpr for any From jyasskin at google.com Tue May 26 13:14:53 2009 From: jyasskin at google.com (Jeffrey Yasskin) Date: Tue, 26 May 2009 11:14:53 -0700 Subject: [llvm-commits] Avoid O(#registers*#basicblocks) memory use in LiveVariables In-Reply-To: <363EF47E-1FBE-4A8B-873C-B6B667B26388@apple.com> References: <8FEB6CFA-7992-46CD-BE02-789B1344DF90@apple.com> <363EF47E-1FBE-4A8B-873C-B6B667B26388@apple.com> Message-ID: On Mon, May 25, 2009 at 7:30 PM, Evan Cheng wrote: > > On May 22, 2009, at 9:07 PM, me22 wrote: > >> 2009/5/22 Evan Cheng : >>> >>> I can see the potential for both of those issues. Perhaps you can >>> specialize SparseBitVector with a smaller element size to reduce >>> memory usage? As for compile time cost, can you measure it by return >>> through the llvm test suite? >>> >> >> I'd be wary of decreasing the element size any more. >> >> I wrote up a quick test (attached) that suggests that on 64-bit linux >> only a third of the node is actually holding data right now. (The >> overhead from sparsity and linked list pointers is the other >> two-thirds.) ?And on whatever platform codepad.org runs (I think VC++ >> Win32), only a quarter of the memory is actually holding bits, and >> ElementSize could actually be increased to 160 without changing the >> amount of memory that new actually allocates per node. ?32-bit linux >> seems to have the best ratio, with half of it useful. >> >> I don't know the pattern of sparsity in LiveVariables, but I'd >> actually argue for trying increasing it. >> >> Also, you might try using unsigned int for the BitWord in the >> SparseBitVectorElement (instead of unsigned long), as on 64-bit it >> would keep you from wasting the padding after the ElementIndex. ?It >> should just involve changing the typedef, but could also slow things >> down a bit since Elements would no longer be a power of two. ?No idea >> whether that'd be noticable over the pointer-following overhead, >> though. >> >> Or I suppose, depending on the way the numbering it implemented, it >> might be even better to have some kind of range container instead... > > Thanks for doing the analysis. I think it all point to just leaving > ElementSize along is probably fine. Thanks! I'll submit the AliveBlocks part now then, since you've removed UsedBlocks. Jeffrey From gohman at apple.com Tue May 26 13:16:38 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 26 May 2009 11:16:38 -0700 Subject: [llvm-commits] [llvm] r72325 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp In-Reply-To: <2E4DA060-7225-419D-AB83-0E5FF6FAA7DE@apple.com> References: <200905231235.n4NCZgvT018589@zion.cs.uiuc.edu> <2E4DA060-7225-419D-AB83-0E5FF6FAA7DE@apple.com> Message-ID: <2E9711FA-3B6A-482E-B8BA-FFCC56BE93FB@apple.com> On May 25, 2009, at 4:12 PM, Chris Lattner wrote: >> >> >> +// This file implements the SelectionDAG::LegalizeVectors method. >> >> +// >> >> +// The vector legalizer looks for vector operations which might >> >> need to be >> >> +// unrolled and legalizes them. >> > > s/unroll/scalarize/g? This should never do any "splitting" of > vectors, right? No; unrolling is different than scalarizing, in Legalize jargon. Scalarizing is turning a single-element vector with an illegal type into a scalar. Unrolling is turning a (potentially) multiple-element vector with a legal type into a flock of scalars in order to perform an operation on them which is not legal on the vector type. Feel free to suggest a better name if you can think of one that doesn't involve the words "split", "scalarize", or "expand". :-) Dan From jyasskin at google.com Tue May 26 13:27:15 2009 From: jyasskin at google.com (Jeffrey Yasskin) Date: Tue, 26 May 2009 18:27:15 -0000 Subject: [llvm-commits] [llvm] r72426 - in /llvm/trunk: include/llvm/CodeGen/LiveVariables.h lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/LiveVariables.cpp lib/CodeGen/PHIElimination.cpp Message-ID: <200905261827.n4QIRGr7029686@zion.cs.uiuc.edu> Author: jyasskin Date: Tue May 26 13:27:15 2009 New Revision: 72426 URL: http://llvm.org/viewvc/llvm-project?rev=72426&view=rev Log: LiveVariables::VarInfo contains an AliveBlocks BitVector, which has as many entries as there are basic blocks in the function. LiveVariables::getVarInfo creates a VarInfo struct for every register in the function, leading to quadratic space use. This patch changes the BitVector to a SparseBitVector, which doesn't help the worst-case memory use but does reduce the actual use in very long functions with short-lived variables. Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp llvm/trunk/lib/CodeGen/LiveVariables.cpp llvm/trunk/lib/CodeGen/PHIElimination.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveVariables.h?rev=72426&r1=72425&r2=72426&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveVariables.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveVariables.h Tue May 26 13:27:15 2009 @@ -33,6 +33,7 @@ #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/SparseBitVector.h" namespace llvm { @@ -75,7 +76,7 @@ /// through. This is a bit set which uses the basic block number as an /// index. /// - BitVector AliveBlocks; + SparseBitVector<> AliveBlocks; /// NumUses - Number of uses of this register across the entire function. /// Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=72426&r1=72425&r2=72426&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Tue May 26 13:27:15 2009 @@ -422,7 +422,7 @@ // If the kill happens after the definition, we have an intra-block // live range. if (killIdx > defIndex) { - assert(vi.AliveBlocks.none() && + assert(vi.AliveBlocks.empty() && "Shouldn't be alive across any blocks!"); LiveRange LR(defIndex, killIdx, ValNo); interval.addRange(LR); @@ -443,10 +443,10 @@ // Iterate over all of the blocks that the variable is completely // live in, adding [insrtIndex(begin), instrIndex(end)+4) to the // live interval. - for (int i = vi.AliveBlocks.find_first(); i != -1; - i = vi.AliveBlocks.find_next(i)) { - LiveRange LR(getMBBStartIdx(i), - getMBBEndIdx(i)+1, // MBB ends at -1. + for (SparseBitVector<>::iterator I = vi.AliveBlocks.begin(), + E = vi.AliveBlocks.end(); I != E; ++I) { + LiveRange LR(getMBBStartIdx(*I), + getMBBEndIdx(*I)+1, // MBB ends at -1. ValNo); interval.addRange(LR); DOUT << " +" << LR; Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveVariables.cpp?rev=72426&r1=72425&r2=72426&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveVariables.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveVariables.cpp Tue May 26 13:27:15 2009 @@ -52,8 +52,9 @@ void LiveVariables::VarInfo::dump() const { cerr << " Alive in blocks: "; - for (int i = AliveBlocks.find_first(); i != -1; i = AliveBlocks.find_next(i)) - cerr << i << ", "; + for (SparseBitVector<>::iterator I = AliveBlocks.begin(), + E = AliveBlocks.end(); I != E; ++I) + cerr << *I << ", "; cerr << "\n Killed by:"; if (Kills.empty()) cerr << " No instructions.\n"; @@ -75,9 +76,7 @@ else VirtRegInfo.resize(2*VirtRegInfo.size()); } - VarInfo &VI = VirtRegInfo[RegIdx]; - VI.AliveBlocks.resize(MF->getNumBlockIDs()); - return VI; + return VirtRegInfo[RegIdx]; } void LiveVariables::MarkVirtRegAliveInBlock(VarInfo& VRInfo, @@ -96,11 +95,11 @@ if (MBB == DefBlock) return; // Terminate recursion - if (VRInfo.AliveBlocks[BBNum]) + if (VRInfo.AliveBlocks.test(BBNum)) return; // We already know the block is live // Mark the variable known alive in this bb - VRInfo.AliveBlocks[BBNum] = true; + VRInfo.AliveBlocks.set(BBNum); for (MachineBasicBlock::const_pred_reverse_iterator PI = MBB->pred_rbegin(), E = MBB->pred_rend(); PI != E; ++PI) @@ -163,7 +162,7 @@ // Add a new kill entry for this basic block. If this virtual register is // already marked as alive in this basic block, that means it is alive in at // least one of the successor blocks, it's not a kill. - if (!VRInfo.AliveBlocks[BBNum]) + if (!VRInfo.AliveBlocks.test(BBNum)) VRInfo.Kills.push_back(MI); // Update all dominating blocks to mark them as "known live". @@ -175,7 +174,7 @@ void LiveVariables::HandleVirtRegDef(unsigned Reg, MachineInstr *MI) { VarInfo &VRInfo = getVarInfo(Reg); - if (VRInfo.AliveBlocks.none()) + if (VRInfo.AliveBlocks.empty()) // If vr is not alive in any block, then defaults to dead. VRInfo.Kills.push_back(MI); } Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PHIElimination.cpp?rev=72426&r1=72425&r2=72426&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/PHIElimination.cpp Tue May 26 13:27:15 2009 @@ -334,8 +334,7 @@ // Is it alive in this successor? unsigned SuccIdx = SuccMBB->getNumber(); - if (SuccIdx < InRegVI.AliveBlocks.size() && - InRegVI.AliveBlocks[SuccIdx]) { + if (InRegVI.AliveBlocks.test(SuccIdx)) { ValueIsLive = true; break; } @@ -407,8 +406,7 @@ // This vreg no longer lives all of the way through opBlock. unsigned opBlockNum = opBlock.getNumber(); - if (opBlockNum < InRegVI.AliveBlocks.size()) - InRegVI.AliveBlocks[opBlockNum] = false; + InRegVI.AliveBlocks.reset(opBlockNum); } } From daniel at zuster.org Tue May 26 13:32:35 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Tue, 26 May 2009 18:32:35 -0000 Subject: [llvm-commits] [test-suite] r72427 - /test-suite/trunk/Makefile.programs Message-ID: <200905261832.n4QIWZue029900@zion.cs.uiuc.edu> Author: ddunbar Date: Tue May 26 13:32:34 2009 New Revision: 72427 URL: http://llvm.org/viewvc/llvm-project?rev=72427&view=rev Log: Unbreak nightlytest JIT results. - EXTRA_LLIFLAGS needs to always be present in {LLI,JIT}_OPTS, since the nightlytest report Makefile expects to be able to rebind it later for forcing statistics output. Modified: test-suite/trunk/Makefile.programs Modified: test-suite/trunk/Makefile.programs URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/Makefile.programs?rev=72427&r1=72426&r2=72427&view=diff ============================================================================== --- test-suite/trunk/Makefile.programs (original) +++ test-suite/trunk/Makefile.programs Tue May 26 13:32:34 2009 @@ -433,6 +433,8 @@ # Rules to execute the program # +# Note, these must be lazily expanded by make (for EXTRA_LLIFLAGS to work, it is +# redefined in other Makefiles). LLI_OPTS = -force-interpreter=true --disable-core-files JIT_OPTS = -force-interpreter=false --disable-core-files @@ -447,10 +449,14 @@ LLI_OPTS += $(TARGET_LLIFLAGS) JIT_OPTS += $(TARGET_LLIFLAGS) endif -ifdef EXTRA_LLIFLAGS + +# EXTRA_LLIFLAGS is used by the nighly tester to add arugments to invocations of +# the JIT and LLI in order to get timing info and statistics. +ifndef EXTRA_LLIFLAGS +EXTRA_LLIFLAGS = +endif LLI_OPTS += $(EXTRA_LLIFLAGS) JIT_OPTS += $(EXTRA_LLIFLAGS) -endif # If the program requires exception handling support, enable (potentially # expensive) support for it. From edwintorok at gmail.com Tue May 26 14:11:47 2009 From: edwintorok at gmail.com (Torok Edwin) Date: Tue, 26 May 2009 19:11:47 -0000 Subject: [llvm-commits] [llvm] r72430 - /llvm/trunk/Makefile.rules Message-ID: <200905261911.n4QJBlP8031406@zion.cs.uiuc.edu> Author: edwin Date: Tue May 26 14:11:47 2009 New Revision: 72430 URL: http://llvm.org/viewvc/llvm-project?rev=72430&view=rev Log: For the new ar --plugin libLLVMgold.so to work we need libLTO linked with pthreads, otherwise ar complains of unresolved references to pthread_mutex_*. LTO doesn't actually use pthreads, but ManagedStatic does. Fix this by linking in LIBS (that contains pthreads) for LTO and gold. For now this links in more libs than needed (libffi for example), we can figure out later how to link in those libs per-tool later. Modified: llvm/trunk/Makefile.rules Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=72430&r1=72429&r2=72430&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Tue May 26 14:11:47 2009 @@ -948,7 +948,7 @@ $(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \ $(LIBRARYNAME)$(SHLIBEXT) $(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO) \ - $(ProjLibsOptions) $(LLVMLibsOptions) + $(ProjLibsOptions) $(LLVMLibsOptions) $(LIBS) else $(LibName.SO): $(ObjectsO) $(LibDir)/.dir $(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT) From eli.friedman at gmail.com Tue May 26 14:18:56 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Tue, 26 May 2009 19:18:56 -0000 Subject: [llvm-commits] [llvm] r72431 - in /llvm/trunk/lib/Target: CellSPU/SPUISelLowering.cpp X86/X86ISelLowering.cpp Message-ID: <200905261918.n4QJIu2w031694@zion.cs.uiuc.edu> Author: efriedma Date: Tue May 26 14:18:56 2009 New Revision: 72431 URL: http://llvm.org/viewvc/llvm-project?rev=72431&view=rev Log: Don't abuse the quirky behavior of LegalizeDAG for XINT_TO_FP and FP_TO_XINT. Necessary for some cleanups I'm working on. Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp?rev=72431&r1=72430&r2=72431&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp Tue May 26 14:18:56 2009 @@ -2304,7 +2304,7 @@ return ExpandLibCall(LC, Op, DAG, false, Dummy, TLI); } - return SDValue(); + return Op; } //! Lower ISD::SINT_TO_FP, ISD::UINT_TO_FP for i32 @@ -2330,7 +2330,7 @@ return ExpandLibCall(LC, Op, DAG, false, Dummy, TLI); } - return SDValue(); + return Op; } //! Lower ISD::SETCC Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=72431&r1=72430&r2=72431&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue May 26 14:18:56 2009 @@ -4595,10 +4595,10 @@ // These are really Legal; caller falls through into that case. if (SrcVT == MVT::i32 && isScalarFPTypeInSSEReg(Op.getValueType())) - return SDValue(); + return Op; if (SrcVT == MVT::i64 && Op.getValueType() != MVT::f80 && Subtarget->is64Bit()) - return SDValue(); + return Op; DebugLoc dl = Op.getDebugLoc(); unsigned Size = SrcVT.getSizeInBits()/8; @@ -4795,7 +4795,7 @@ if (SrcVT == MVT::i64) { // We only handle SSE2 f64 target here; caller can handle the rest. if (Op.getValueType() != MVT::f64 || !X86ScalarSSEf64) - return SDValue(); + return Op; return LowerUINT_TO_FP_i64(Op, DAG); } else if (SrcVT == MVT::i32 && X86ScalarSSEf64) { @@ -4881,7 +4881,7 @@ SDValue X86TargetLowering::LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG) { std::pair Vals = FP_TO_INTHelper(Op, DAG, true); SDValue FIST = Vals.first, StackSlot = Vals.second; - if (FIST.getNode() == 0) return SDValue(); + if (FIST.getNode() == 0) return Op; // Load the result. return DAG.getLoad(Op.getValueType(), Op.getDebugLoc(), From stefanus.dutoit at rapidmind.com Tue May 26 16:04:52 2009 From: stefanus.dutoit at rapidmind.com (Stefanus Du Toit) Date: Tue, 26 May 2009 21:04:52 -0000 Subject: [llvm-commits] [llvm] r72434 - in /llvm/trunk/lib/Target/X86: X86.td X86Subtarget.cpp X86Subtarget.h Message-ID: <200905262105.n4QL53fn003892@zion.cs.uiuc.edu> Author: sdt Date: Tue May 26 16:04:35 2009 New Revision: 72434 URL: http://llvm.org/viewvc/llvm-project?rev=72434&view=rev Log: Update CPU capabilities for AMD machines - added processors k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, and barcelona with appropriate sse3/4a levels - added FeatureSSE4A for amdfam10 processors in X86Subtarget: - added hasSSE4A - updated AutoDetectSubtargetFeatures to detect SSE4A - updated GetCurrentX86CPU to detect family 15 with sse3 as k8-sse3 and family 10h as amdfam10 New processor names match those used by gcc. Patch by Paul Redmond! Modified: llvm/trunk/lib/Target/X86/X86.td llvm/trunk/lib/Target/X86/X86Subtarget.cpp llvm/trunk/lib/Target/X86/X86Subtarget.h Modified: llvm/trunk/lib/Target/X86/X86.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.td?rev=72434&r1=72433&r2=72434&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86.td (original) +++ llvm/trunk/lib/Target/X86/X86.td Tue May 26 16:04:35 2009 @@ -52,6 +52,8 @@ "Support 64-bit instructions">; def FeatureSlowBTMem : SubtargetFeature<"slow-bt-mem", "IsBTMemSlow", "true", "Bit testing of memory is slow">; +def FeatureSSE4A : SubtargetFeature<"sse4a", "HasSSE4A", "true", + "Support SSE 4a instructions">; //===----------------------------------------------------------------------===// // X86 processors supported. @@ -97,6 +99,16 @@ FeatureSlowBTMem]>; def : Proc<"athlon-fx", [FeatureSSE2, Feature3DNowA, Feature64Bit, FeatureSlowBTMem]>; +def : Proc<"k8-sse3", [FeatureSSE3, Feature3DNowA, Feature64Bit, + FeatureSlowBTMem]>; +def : Proc<"opteron-sse3", [FeatureSSE3, Feature3DNowA, Feature64Bit, + FeatureSlowBTMem]>; +def : Proc<"athlon64-sse3", [FeatureSSE3, Feature3DNowA, Feature64Bit, + FeatureSlowBTMem]>; +def : Proc<"amdfam10", [FeatureSSE3, FeatureSSE4A, + Feature3DNowA, Feature64Bit, FeatureSlowBTMem]>; +def : Proc<"barcelona", [FeatureSSE3, FeatureSSE4A, + Feature3DNowA, Feature64Bit, FeatureSlowBTMem]>; def : Proc<"winchip-c6", [FeatureMMX]>; def : Proc<"winchip2", [FeatureMMX, Feature3DNow]>; Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=72434&r1=72433&r2=72434&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original) +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Tue May 26 16:04:35 2009 @@ -216,6 +216,7 @@ X86::GetCpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX); HasX86_64 = (EDX >> 29) & 0x1; + HasSSE4A = IsAMD && ((ECX >> 6) & 0x1); } } @@ -229,6 +230,7 @@ X86::GetCpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX); bool Em64T = (EDX >> 29) & 0x1; + bool HasSSE3 = (ECX & 0x1); union { unsigned u[3]; @@ -311,10 +313,20 @@ default: return "athlon"; } case 15: + if (HasSSE3) { + switch (Model) { + default: return "k8-sse3"; + } + } else { + switch (Model) { + case 1: return "opteron"; + case 5: return "athlon-fx"; // also opteron + default: return "athlon64"; + } + } + case 16: switch (Model) { - case 1: return "opteron"; - case 5: return "athlon-fx"; // also opteron - default: return "athlon64"; + default: return "amdfam10"; } default: return "generic"; Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=72434&r1=72433&r2=72434&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original) +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Tue May 26 16:04:35 2009 @@ -67,6 +67,9 @@ /// IsBTMemSlow - True if BT (bit test) of memory instructions are slow. bool IsBTMemSlow; + /// HasSSE4A - True if the processor supports SSE4A instructions. + bool HasSSE4A; + /// DarwinVers - Nonzero if this is a darwin platform: the numeric /// version of the platform, e.g. 8 = 10.4 (Tiger), 9 = 10.5 (Leopard), etc. unsigned char DarwinVers; // Is any darwin-x86 platform. @@ -127,6 +130,7 @@ bool hasSSSE3() const { return X86SSELevel >= SSSE3; } bool hasSSE41() const { return X86SSELevel >= SSE41; } bool hasSSE42() const { return X86SSELevel >= SSE42; } + bool hasSSE4A() const { return HasSSE4A; } bool has3DNow() const { return X863DNowLevel >= ThreeDNow; } bool has3DNowA() const { return X863DNowLevel >= ThreeDNowA; } From edwintorok at gmail.com Tue May 26 16:14:59 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Wed, 27 May 2009 00:14:59 +0300 Subject: [llvm-commits] [llvm] r72329 - /llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp In-Reply-To: <5E69C061-20B9-4F73-90C9-F89585D06B79@apple.com> References: <200905231624.n4NGO6o0027749@zion.cs.uiuc.edu> <5E69C061-20B9-4F73-90C9-F89585D06B79@apple.com> Message-ID: <4A1C5BD3.70600@gmail.com> On 2009-05-26 01:44, Chris Lattner wrote: > On May 23, 2009, at 9:24 AM, Torok Edwin wrote: > > >> Author: edwin >> Date: Sat May 23 11:23:59 2009 >> New Revision: 72329 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=72329&view=rev >> Log: >> stat64/open64/lseek64 for the interpreter >> > > stat64 was already listed. Maybe the \1 isn't being stripped correctly? > Yes, that could be the problem. I'll look into this tomorrow if I don't forget. Best regards, --Edwin From dalej at apple.com Tue May 26 16:25:07 2009 From: dalej at apple.com (Dale Johannesen) Date: Tue, 26 May 2009 21:25:07 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r72435 - in /llvm-gcc-4.2/trunk/gcc: llvm-abi.h llvm-convert.cpp llvm-types.cpp Message-ID: <200905262125.n4QLP9jt005027@zion.cs.uiuc.edu> Author: johannes Date: Tue May 26 16:25:01 2009 New Revision: 72435 URL: http://llvm.org/viewvc/llvm-project?rev=72435&view=rev Log: Change the names of a couple functions to be more accurate. No functional change. Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi.h?rev=72435&r1=72434&r2=72435&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-abi.h (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-abi.h Tue May 26 16:25:01 2009 @@ -66,17 +66,17 @@ /// returns an aggregate value using multiple return values. void HandleAggregateResultAsAggregate(const Type *AggrTy) {} - /// HandleAggregateShadowArgument - This callback is invoked if the function + /// HandleAggregateShadowResult - This callback is invoked if the function /// returns an aggregate value by using a "shadow" first parameter, which is /// a pointer to the aggregate, of type PtrArgTy. If RetPtr is set to true, /// the pointer argument itself is returned from the function. - void HandleAggregateShadowArgument(const PointerType *PtrArgTy, bool RetPtr){} + void HandleAggregateShadowResult(const PointerType *PtrArgTy, bool RetPtr){} - /// HandleScalarShadowArgument - This callback is invoked if the function + /// HandleScalarShadowResult - This callback is invoked if the function /// returns a scalar value by using a "shadow" first parameter, which is a /// pointer to the scalar, of type PtrArgTy. If RetPtr is set to true, /// the pointer argument itself is returned from the function. - void HandleScalarShadowArgument(const PointerType *PtrArgTy, bool RetPtr) {} + void HandleScalarShadowResult(const PointerType *PtrArgTy, bool RetPtr) {} /// HandleScalarArgument - This is the primary callback that specifies an @@ -382,7 +382,7 @@ if (ScalarType) C.HandleAggregateResultAsScalar(ConvertType(ScalarType)); else if (LLVM_SHOULD_RETURN_VECTOR_AS_SHADOW(type, isBuiltin)) - C.HandleScalarShadowArgument(PointerType::getUnqual(Ty), false); + C.HandleScalarShadowResult(PointerType::getUnqual(Ty), false); else C.HandleScalarResult(Ty); } else if (Ty->isSingleValueType() || Ty == Type::VoidTy) { @@ -414,7 +414,7 @@ // FIXME: should return the hidden first argument for some targets // (e.g. ELF i386). - C.HandleAggregateShadowArgument(PointerType::getUnqual(Ty), false); + C.HandleAggregateShadowResult(PointerType::getUnqual(Ty), false); } } Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=72435&r1=72434&r2=72435&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue May 26 16:25:01 2009 @@ -263,7 +263,7 @@ LocStack.clear(); } - void HandleAggregateShadowArgument(const PointerType *PtrArgTy, + void HandleAggregateShadowResult(const PointerType *PtrArgTy, bool RetPtr) { // If the function returns a structure by value, we transform the function // to take a pointer to the result as the first argument of the function @@ -297,7 +297,7 @@ ++AI; } - void HandleScalarShadowArgument(const PointerType *PtrArgTy, bool RetPtr) { + void HandleScalarShadowResult(const PointerType *PtrArgTy, bool RetPtr) { assert(AI != Builder.GetInsertBlock()->getParent()->arg_end() && "No explicit return value?"); AI->setName("scalar.result"); @@ -2451,11 +2451,11 @@ isAggrRet = true; } - /// HandleAggrega