summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGilles Dubochet <gilles.dubochet@epfl.ch>2009-11-24 19:27:10 +0000
committerGilles Dubochet <gilles.dubochet@epfl.ch>2009-11-24 19:27:10 +0000
commitd9e3dde6d6d18b9a93e7566447cc3ee342f033d5 (patch)
tree13084c6cd10ca3d673d6eca2af3af8d96a96155f /src
parent583e431b07fae9c3fbeb075e40d7729958df6499 (diff)
downloadscala-d9e3dde6d6d18b9a93e7566447cc3ee342f033d5.tar.gz
scala-d9e3dde6d6d18b9a93e7566447cc3ee342f033d5.tar.bz2
scala-d9e3dde6d6d18b9a93e7566447cc3ee342f033d5.zip
Scaladoc 2.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/ant/Scaladoc.scala99
-rw-r--r--src/compiler/scala/tools/nsc/ScalaDoc.scala102
-rw-r--r--src/compiler/scala/tools/nsc/doc/DefaultDocDriver.scala307
-rw-r--r--src/compiler/scala/tools/nsc/doc/DocDriver.scala21
-rw-r--r--src/compiler/scala/tools/nsc/doc/DocUtil.scala104
-rw-r--r--src/compiler/scala/tools/nsc/doc/ModelAdditions.scala412
-rw-r--r--src/compiler/scala/tools/nsc/doc/ModelExtractor.scala453
-rw-r--r--src/compiler/scala/tools/nsc/doc/ModelFrames.scala396
-rw-r--r--src/compiler/scala/tools/nsc/doc/ModelToXML.scala368
-rw-r--r--src/compiler/scala/tools/nsc/doc/Processor.scala56
-rw-r--r--src/compiler/scala/tools/nsc/doc/Settings.scala19
-rw-r--r--src/compiler/scala/tools/nsc/doc/SourcelessComments.scala379
-rw-r--r--src/compiler/scala/tools/nsc/doc/TODO.txt19
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala150
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/SiteFactory.scala79
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/page/Index.scala77
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/page/Source.scala129
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/page/Template.scala214
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/index.html76
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/class.pngbin0 -> 519 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/class_big.pngbin0 -> 2995 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/index.css91
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/index.js44
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.js19
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/object.pngbin0 -> 518 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/object_big.pngbin0 -> 3318 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/old.css206
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/old.js126
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/package.pngbin0 -> 488 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/package_big.pngbin0 -> 3183 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css228
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js46
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/trait.pngbin0 -> 504 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/trait_big.pngbin0 -> 2863 bytes
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/type_tags.ai5914
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/versions.txt1
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/template.html228
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/Entity.scala141
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/EntityFactory.scala434
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/TypeEntity.scala25
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/comment/Body.scala37
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/comment/Comment.scala58
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala525
-rw-r--r--src/compiler/scala/tools/nsc/doc/script.js112
-rw-r--r--src/compiler/scala/tools/nsc/doc/style.css148
45 files changed, 9363 insertions, 2480 deletions
diff --git a/src/compiler/scala/tools/ant/Scaladoc.scala b/src/compiler/scala/tools/ant/Scaladoc.scala
index 8a85393293..622f9da19f 100644
--- a/src/compiler/scala/tools/ant/Scaladoc.scala
+++ b/src/compiler/scala/tools/ant/Scaladoc.scala
@@ -17,8 +17,8 @@ import org.apache.tools.ant.taskdefs.MatchingTask
import org.apache.tools.ant.types.{Path, Reference}
import org.apache.tools.ant.util.{FileUtils, GlobPatternMapper}
-import scala.tools.nsc.{Global, Settings}
-import scala.tools.nsc.doc.DefaultDocDriver
+import scala.tools.nsc.Global
+import scala.tools.nsc.doc.Settings
import scala.tools.nsc.reporters.{Reporter, ConsoleReporter}
/** <p>
@@ -40,9 +40,7 @@ import scala.tools.nsc.reporters.{Reporter, ConsoleReporter}
* <li>extdirs,</li>
* <li>extdirsref,</li>
* <li>encoding,</li>
- * <li>windowtitle,</li>
* <li>doctitle,</li>
- * <li>stylesheetfile,</li>
* <li>header,</li>
* <li>footer,</li>
* <li>top,</li>
@@ -103,21 +101,9 @@ class Scaladoc extends MatchingTask {
/** The character encoding of the files to compile. */
private var encoding: Option[String] = None
- /** The window title of the generated HTML documentation. */
- private var windowtitle: Option[String] = None
-
/** The document title of the generated HTML documentation. */
private var doctitle: Option[String] = None
- /** The user-specified stylesheet file. */
- private var stylesheetfile: Option[String] = None
-
- /** The user-specified header/footer and top/bottom texts. */
- private var pageheader: Option[String] = None
- private var pagefooter: Option[String] = None
- private var pagetop : Option[String] = None
- private var pagebottom: Option[String] = None
-
/** Instruct the compiler to use additional parameters */
private var addParams: String = ""
@@ -275,14 +261,6 @@ class Scaladoc extends MatchingTask {
encoding = Some(input)
}
- /** Sets the <code>windowtitle</code> attribute.
- *
- * @param input The value of <code>windowtitle</code>.
- */
- def setWindowtitle(input: String) {
- windowtitle = Some(input)
- }
-
/** Sets the <code>doctitle</code> attribute.
*
* @param input The value of <code>doctitle</code>.
@@ -291,46 +269,6 @@ class Scaladoc extends MatchingTask {
doctitle = Some(input)
}
- /** Sets the <code>stylesheetfile</code> attribute.
- *
- * @param input The value of <code>stylesheetfile</code>.
- */
- def setStylesheetfile(input: String) {
- stylesheetfile = Some(input)
- }
-
- /** Sets the <code>header</code> attribute.
- *
- * @param input The value of <code>header</code>.
- */
- def setHeader(input: String) {
- pageheader = Some(input)
- }
-
- /** Sets the <code>footer</code> attribute.
- *
- * @param input The value of <code>footer</code>.
- */
- def setFooter(input: String) {
- pagefooter = Some(input)
- }
-
- /** Sets the <code>top</code> attribute.
- *
- * @param input The value of <code>top</code>.
- */
- def setTop(input: String) {
- pagetop = Some(input)
- }
-
- /** Sets the <code>bottom</code> attribute.
- *
- * @param input The value of <code>bottom</code>.
- */
- def setBottom(input: String) {
- pagebottom = Some(input)
- }
-
/** Set the <code>addparams</code> info attribute.
*
* @param input The value for <code>addparams</code>.
@@ -492,7 +430,7 @@ class Scaladoc extends MatchingTask {
\*============================================================================*/
/** Initializes settings and source files */
- protected def initialize: Pair[scala.tools.nsc.doc.Settings, List[File]] = {
+ protected def initialize: Pair[Settings, List[File]] = {
// Tests if all mandatory attributes are set and valid.
if (origin.isEmpty) error("Attribute 'srcdir' is not set.")
if (getOrigin.isEmpty) error("Attribute 'srcdir' is not set.")
@@ -542,7 +480,7 @@ class Scaladoc extends MatchingTask {
// Builds-up the compilation settings for Scalac with the existing Ant
// parameters.
- val docSettings = new scala.tools.nsc.doc.Settings(error)
+ val docSettings = new Settings(error)
docSettings.outdir.value = asString(destination.get)
if (!classpath.isEmpty)
docSettings.classpath.value = asString(getClasspath)
@@ -554,13 +492,7 @@ class Scaladoc extends MatchingTask {
docSettings.bootclasspath.value = asString(getBootclasspath)
if (!extdirs.isEmpty) docSettings.extdirs.value = asString(getExtdirs)
if (!encoding.isEmpty) docSettings.encoding.value = encoding.get
- if (!windowtitle.isEmpty) docSettings.windowtitle.value = windowtitle.get
if (!doctitle.isEmpty) docSettings.doctitle.value = decodeEscapes(doctitle.get)
- if (!stylesheetfile.isEmpty) docSettings.stylesheetfile.value = stylesheetfile.get
- if (!pageheader.isEmpty) docSettings.pageheader.value = decodeEscapes(pageheader.get)
- if (!pagefooter.isEmpty) docSettings.pagefooter.value = decodeEscapes(pagefooter.get)
- if (!pagetop.isEmpty) docSettings.pagetop.value = decodeEscapes(pagetop.get)
- if (!pagebottom.isEmpty) docSettings.pagebottom.value = decodeEscapes(pagebottom.get)
docSettings.deprecation.value = deprecation
docSettings.unchecked.value = unchecked
log("Scaladoc params = '" + addParams + "'", Project.MSG_DEBUG)
@@ -583,26 +515,11 @@ class Scaladoc extends MatchingTask {
/** Performs the compilation. */
override def execute() = {
- val Pair(commandSettings, sourceFiles) = initialize
- val reporter = new ConsoleReporter(commandSettings)
-
- // Compiles the actual code
- val compiler = new Global(commandSettings, reporter) {
- override protected def computeInternalPhases() {
- phasesSet += syntaxAnalyzer
- phasesSet += analyzer.namerFactory
- phasesSet += analyzer.typerFactory
- }
- override def onlyPresentation = true
- }
+ val Pair(docSettings, sourceFiles) = initialize
+ val reporter = new ConsoleReporter(docSettings)
try {
- val run = new compiler.Run
- run.compile(sourceFiles.map (_.toString))
- object generator extends DefaultDocDriver {
- lazy val global: compiler.type = compiler
- lazy val settings = commandSettings
- }
- generator.process(run.units)
+ val docProcessor = new scala.tools.nsc.doc.Processor(reporter, docSettings)
+ docProcessor.document(sourceFiles.map (_.toString))
if (reporter.ERROR.count > 0)
error(
"Document failed with " +
diff --git a/src/compiler/scala/tools/nsc/ScalaDoc.scala b/src/compiler/scala/tools/nsc/ScalaDoc.scala
index 6f8c258cc2..fcaced5b41 100644
--- a/src/compiler/scala/tools/nsc/ScalaDoc.scala
+++ b/src/compiler/scala/tools/nsc/ScalaDoc.scala
@@ -9,7 +9,6 @@ package scala.tools.nsc
import java.io.File
-import scala.tools.nsc.doc.DefaultDocDriver
import scala.tools.nsc.reporters.{Reporter, ConsoleReporter}
import scala.tools.nsc.util.FakePos //{Position}
@@ -19,78 +18,69 @@ import scala.tools.nsc.util.FakePos //{Position}
*/
object ScalaDoc {
- val versionMsg = "Scala documentation generator " +
+ val versionMsg: String =
+ "Scaladoc " +
Properties.versionString + " -- " +
Properties.copyrightString
var reporter: ConsoleReporter = _
- def error(msg: String) {
- reporter.error(/*new Position */FakePos("scalac"),
- msg + "\n scalac -help gives more information")
+ def error(msg: String): Unit = {
+ reporter.error(FakePos("scalac"), msg + "\n scalac -help gives more information")
}
- def process(args: Array[String]) {
- val docSettings : doc.Settings = new doc.Settings(error)
+ def process(args: Array[String]): Unit = {
+
+ val docSettings: doc.Settings =
+ new doc.Settings(error)
+
reporter = new ConsoleReporter(docSettings)
- val command = new CompilerCommand(args.toList, docSettings, error, false)
- if (command.settings.version.value)
- reporter.info(null, versionMsg, true)
- else {
- if (command.settings.target.value == "msil") {
- val libpath = System.getProperty("msil.libpath")
- if (libpath != null)
- command.settings.assemrefs.value =
- command.settings.assemrefs.value + File.pathSeparator + libpath
+
+ val command =
+ new CompilerCommand(args.toList, docSettings, error, false)
+
+ if (!reporter.hasErrors) { // No need to continue if reading the command generated errors
+
+ if (docSettings.version.value)
+ reporter.info(null, versionMsg, true)
+ else if (docSettings.help.value) {
+ reporter.info(null, command.usageMsg, true)
}
- try {
- object compiler extends Global(command.settings, reporter) {
- override protected def computeInternalPhases() {
- phasesSet += syntaxAnalyzer
- phasesSet += analyzer.namerFactory
- phasesSet += analyzer.typerFactory
- }
- override def onlyPresentation = true
- }
- if (reporter.hasErrors) {
- reporter.flush()
- return
- }
+ else if (docSettings.Xhelp.value)
+ reporter.info(null, command.xusageMsg, true)
+ else if (docSettings.Yhelp.value)
+ reporter.info(null, command.yusageMsg, true)
+ else if (docSettings.showPlugins.value)
+ reporter.warning(null, "Plugins are not available when using Scaladoc")
+ else if (docSettings.showPhases.value)
+ reporter.warning(null, "Phases are restricted when using Scaladoc")
+ else try {
- if (command.settings.help.value || command.settings.Xhelp.value || command.settings.Yhelp.value) {
- if (command.settings.help.value) {
- reporter.info(null, command.usageMsg, true)
- reporter.info(null, compiler.pluginOptionsHelp, true)
- }
- if (command.settings.Xhelp.value)
- reporter.info(null, command.xusageMsg, true)
- if (command.settings.Yhelp.value)
- reporter.info(null, command.yusageMsg, true)
- } else if (command.settings.showPlugins.value)
- reporter.info(null, compiler.pluginDescriptions, true)
- else if (command.settings.showPhases.value)
- reporter.info(null, compiler.phaseDescriptions, true)
- else {
- val run = new compiler.Run()
- run compile command.files
- val generator = new DefaultDocDriver {
- lazy val global: compiler.type = compiler
- lazy val settings = docSettings
- }
- generator.process(run.units)
- reporter.printSummary()
+ if (docSettings.target.value == "msil") {
+ val libpath = System.getProperty("msil.libpath")
+ if (libpath != null)
+ docSettings.assemrefs.value = docSettings.assemrefs.value + File.pathSeparator + libpath
}
- } catch {
+
+ val docProcessor = new scala.tools.nsc.doc.Processor(reporter, docSettings)
+ docProcessor.document(command.files)
+
+ }
+ catch {
case ex @ FatalError(msg) =>
- if (command.settings.debug.value)
- ex.printStackTrace();
- reporter.error(null, "fatal error: " + msg)
+ if (docSettings.debug.value) ex.printStackTrace();
+ reporter.error(null, "fatal error: " + msg)
+ }
+ finally {
+ reporter.printSummary()
}
}
+
}
- def main(args: Array[String]) {
+ def main(args: Array[String]): Unit = {
process(args)
exit(if (reporter.hasErrors) 1 else 0)
}
+
}
diff --git a/src/compiler/scala/tools/nsc/doc/DefaultDocDriver.scala b/src/compiler/scala/tools/nsc/doc/DefaultDocDriver.scala
deleted file mode 100644
index 8a1261a2f6..0000000000
--- a/src/compiler/scala/tools/nsc/doc/DefaultDocDriver.scala
+++ /dev/null
@@ -1,307 +0,0 @@
-/* NSC -- new Scala compiler
- * Copyright 2007-2009 LAMP/EPFL
- * @author Sean McDirmid
- */
-// $Id$
-
-package scala.tools.nsc
-package doc
-
-import scala.collection.mutable
-import java.util.zip.ZipFile
-
-import symtab.Flags._
-import scala.xml._
-
-/**
- * @author Sean McDirmid
- */
-abstract class DefaultDocDriver extends DocDriver with ModelFrames with ModelToXML {
- import global._
- import definitions.{AnyClass, AnyRefClass}
-
- lazy val additions = new mutable.LinkedHashSet[Symbol]
- lazy val additions0 = new ModelAdditions(global) {
- override def addition(sym: global.Symbol) = {
- super.addition(sym)
- sym match {
- case sym : global.ClassSymbol => additions += sym.asInstanceOf[Symbol]
- case sym : global.ModuleSymbol => additions += sym.asInstanceOf[Symbol]
- case sym : global.TypeSymbol => additions += sym.asInstanceOf[Symbol]
- case _ =>
- }
- }
- def init {}
- }
-
- /** Add all top-level entities in ModelAdditions to allClasses */
- def addAdditionsToClasses() {
- additions0.init
- for (sym <- additions) {
- val packSym = sym.enclosingPackage
- if (packSym != NoSymbol) {
- val pack = Package(packSym)
- if (!(allClasses contains pack)) {
- // don't emit an addition unless its package
- // is already being scaladoced
- } else {
- val addition: Option[ClassOrObject] =
- if (sym.isClass)
- Some(new TopLevelClass(sym))
- else if (sym.isModule)
- Some(new TopLevelObject(sym))
- else if (sym == definitions.AnyRefClass) {
- // AnyRef is the only top-level type alias, so handle
- // it specially instead of introducing general support for
- // top-level aliases
- Some(new TopLevelClass(sym))
- }
- else
- None
-
- addition match {
- case None =>
- //println("skipping: " + sym) //DEBUG
- case Some(addition) =>
- allClasses(pack) += addition
- }
- }
- } else {
- //println("no package found for: "+sym) //DEBUG
- }
- }
- }
-
- def process(units: Iterator[CompilationUnit]) {
-
- assert(global.definitions != null)
-
- def g(pkg: Package, clazz: ClassOrObject) {
- if (isAccessible(clazz.sym)) {
- allClasses(pkg) += clazz
- clazz.decls.map(_._2).foreach {
- case clazz : ClassOrObject => g(pkg, clazz)
- case _ =>
- }
- }
- }
- def f(pkg: Package, tree: Tree) {
- if (tree != EmptyTree && tree.hasSymbol) {
- val sym = tree.symbol
- if (sym != NoSymbol && !sym.hasFlag(symtab.Flags.PRIVATE)) tree match {
- case tree : PackageDef =>
- val pkg1 = new Package(sym.asInstanceOf[ModuleSymbol])
- tree.stats.foreach(stat => f(pkg1, stat))
- case tree : ClassDef =>
- assert(pkg != null)
- g(pkg, new TopLevelClass(sym.asInstanceOf[ClassSymbol]))
- case tree : ModuleDef =>
- assert(pkg != null)
- g(pkg, new TopLevelObject(sym.asInstanceOf[ModuleSymbol]))
- case _ =>
- }
- }
- }
- units.foreach(unit => f(null, unit.body))
- addAdditionsToClasses()
-
- for (p <- allClasses; d <- p._2) {
- symbols += d.sym
- for (pp <- d.sym.tpe.parents) subClasses(pp.typeSymbol) += d
- }
- copyResources
- lazy val packages0 = sort(allClasses.keySet)
- new AllPackagesFrame with Frame { def packages = packages0 }
- new PackagesContentFrame with Frame { def packages = packages0 }
- new NavigationFrame with Frame { }
- new ListClassFrame with Frame {
- def classes = for (p <- allClasses; d <- p._2) yield d
- object organized extends mutable.LinkedHashMap[(List[String],Boolean),List[ClassOrObject]] {
- override def default(key : (List[String],Boolean)) = Nil;
- classes.foreach(cls => {
- val path = cls.path.map(_.name);
- this((path,cls.isInstanceOf[Clazz])) = cls :: this((path,cls.isInstanceOf[Clazz]));
- });
- }
-
- def title = "List of all classes and objects"
- def path = "all-classes"
- def navLabel = null // "root-page"
- // override protected def navSuffix = ".html";
- override def optional(cls: ClassOrObject): NodeSeq = {
- val path = cls.path.map(_.name)
- val key = (cls.path.map(_.name), cls.isInstanceOf[Clazz])
- assert(!organized(key).isEmpty);
-
- ((if (!organized(key).tail.isEmpty) Text(" (" +{
- //Console.println("CONFLICT: " + path + " " + organized(key));
- val str = cls.path(0).sym.owner.fullNameString('.');
- val idx = str.lastIndexOf('.');
- if (idx == -1) str;
- else str.substring(idx + 1);
- }+ ")");
- else NodeSeq.Empty) ++ super.optional(cls))//(NodeSeq.builderFactory)
- }
-
- }
- for ((pkg0, classes0) <- allClasses) {
- new ListClassFrame with Frame {
- def title =
- "List of classes and objects in package " + pkg0.fullName('.')
- def classes = classes0
- def path = pkgPath(pkg0.sym) + NAME_SUFFIX_PACKAGE
- def navLabel = pkg0.fullName('.')
- }
- new PackageContentFrame with Frame {
- def classes = classes0
- def pkg = pkg0
- }
- for (clazz0 <- classes0) {
- new ClassContentFrame with Frame {
- def clazz = clazz0
- def title =
- clazz0.kind + " " + clazz0.name + " in " + (clazz0.sym.owner.fullNameString('.'));
- }
- }
- }
- new RootFrame with Frame
- }
- override def longList(entity: ClassOrObject, category: Category)(implicit from: Frame) : NodeSeq = category match {
- case Classes | Objects => NodeSeq.Empty
- case _ => super.longList(entity, category)
- }
-
- trait Frame extends super.Frame {
- def longHeader(entity : Entity) = DefaultDocDriver.this.longHeader(entity)(this)
- def shortHeader(entity : Entity) = DefaultDocDriver.this.shortHeader(entity)(this)
- }
-
- import DocUtil._
- override def classBody(entity: ClassOrObject)(implicit from: Frame): NodeSeq =
- (((subClasses.get(entity.sym) match {
- case Some(symbols) =>
- (<dl>
- <dt style="margin:10px 0 0 20px;"><b>Direct Known Subclasses:</b></dt>
- <dd>{symbols.mkXML("",", ","")(cls => {
- aref(urlFor(cls.sym), cls.path.map(_.name).mkString("",".",""));
- })}</dd>
- </dl><hr/>);
- case None =>
- NodeSeq.Empty
- }): NodeSeq)++super.classBody(entity))//(NodeSeq.builderFactory)
-
- protected def urlFor(sym: Symbol)(implicit frame: Frame) = frame.urlFor(sym)
-
- override protected def decodeTag(tag: String): String = tag match {
- case "exception" => "Throws"
- case "ex" => "Examples"
- case "param" => "Parameters"
- case "pre" => "Precondition"
- case "return" => "Returns"
- case "note" => "Notes"
- case "see" => "See Also"
- case tag => super.decodeTag(tag)
- }
-
- override protected def decodeOption(tag: String, option: String): NodeSeq = tag match {
- case "throws" if additions0.exceptions.contains(option) =>
- val (sym, s) = additions0.exceptions(option)
- val path = "../" //todo: fix path
- val href = path + sym.fullNameString('/') +
- (if (sym.isModule || sym.isModuleClass) NAME_SUFFIX_OBJECT else "") +
- "#" + s
- (<a href={href}>{option}</a>) ++ {Text(" - ")};
- case _ =>
- super.decodeOption(tag,option)
- }
-
- object roots extends mutable.LinkedHashMap[String,String];
- roots("classes") = "http://java.sun.com/j2se/1.5.0/docs/api";
- roots("rt") = roots("classes");
- private val SCALA_API_ROOT = "http://www.scala-lang.org/docu/files/api/";
- roots("scala-library") = SCALA_API_ROOT;
-
- private def keyFor(file: ZipFile): String = {
- var name = file.getName
- var idx = name.lastIndexOf(java.io.File.pathSeparator)
- if (idx == -1) idx = name.lastIndexOf('/')
- if (idx != -1) name = name.substring(idx + 1)
- if (name endsWith ".jar") name.substring(0, name.length - (".jar").length)
- else null
- }
-
- // <code>{Text(string + " - ")}</code>;
- override def hasLink0(sym: Symbol): Boolean = {
- if (sym == NoSymbol) return false;
- if (sym == AnyRefClass) {
- // AnyRefClass is a type alias, so the following logic
- // does not work. AnyClass should have a link in
- // the same cases as AnyRefClass, so test it instead.
- return hasLink(AnyClass)
- }
- if (super.hasLink0(sym) && symbols.contains(sym))
- return true;
- if (SyntheticClasses contains sym)
- return true;
- if (sym.toplevelClass == NoSymbol) return false;
- val clazz = sym.toplevelClass.asInstanceOf[ClassSymbol];
- import scala.tools.nsc.io._;
- clazz.classFile match {
- case file : ZipArchive#FileEntry =>
- val key = keyFor(file.archive);
- if (key != null && roots.contains(key)) return true;
- case null =>
- case _ =>
- }
- false
- }
-
- def aref(href: String, label: String)(implicit frame: Frame) =
- frame.aref(href, "_self", label)
-
- protected def anchor(entity: Symbol)(implicit frame: Frame): NodeSeq =
- (<a name={Text(frame.docName(entity))}></a>)
-
- object symbols extends mutable.LinkedHashSet[Symbol]
-
- object allClasses extends mutable.LinkedHashMap[Package, mutable.LinkedHashSet[ClassOrObject]] {
- override def default(pkg: Package): mutable.LinkedHashSet[ClassOrObject] = {
- object ret extends mutable.LinkedHashSet[ClassOrObject]
- this(pkg) = ret
- ret
- }
- }
-
- object subClasses extends mutable.LinkedHashMap[Symbol, mutable.LinkedHashSet[ClassOrObject]] {
- override def default(key: Symbol) = {
- val ret = new mutable.LinkedHashSet[ClassOrObject]
- this(key) = ret
- ret
- }
- }
-
- override def rootFor(sym: Symbol): String = {
- assert(sym != NoSymbol)
- if (sym == definitions.AnyRefClass) {
- // AnyRefClass is a type alias, so the following logic
- // does not work. AnyClass should have the same root,
- // so use it instead.
- return rootFor(definitions.AnyClass)
- }
- if (sym.toplevelClass == NoSymbol) return super.rootFor(sym)
- if (symbols.contains(sym.toplevelClass)) return super.rootFor(sym)
- if (SyntheticClasses contains sym)
- return SCALA_API_ROOT
- val clazz = sym.toplevelClass.asInstanceOf[ClassSymbol]
- import scala.tools.nsc.io._;
- clazz.classFile match {
- case file : ZipArchive#FileEntry =>
- val key = keyFor(file.archive)
- if (key != null && roots.contains(key)) {
- return roots(key) + '/'
- }
- case _ =>
- }
- super.rootFor(sym)
- }
-}
diff --git a/src/compiler/scala/tools/nsc/doc/DocDriver.scala b/src/compiler/scala/tools/nsc/doc/DocDriver.scala
deleted file mode 100644
index 3593775e35..0000000000
--- a/src/compiler/scala/tools/nsc/doc/DocDriver.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-/* NSC -- new Scala compiler
- * Copyright 2007-2009 LAMP/EPFL
- * @author Sean McDirmid
- */
-// $Id$
-
-package scala.tools.nsc
-package doc
-
-/**
- * This is an abstract class for documentation plugins.
- *
- * @author Geoffrey Washburn
- */
-abstract class DocDriver {
- val global: Global
- import global._
- def settings: doc.Settings
-
- def process(units: Iterator[CompilationUnit]): Unit
-}
diff --git a/src/compiler/scala/tools/nsc/doc/DocUtil.scala b/src/compiler/scala/tools/nsc/doc/DocUtil.scala
deleted file mode 100644
index c01d9566f8..0000000000
--- a/src/compiler/scala/tools/nsc/doc/DocUtil.scala
+++ /dev/null
@@ -1,104 +0,0 @@
-/* NSC -- new Scala compiler
- * Copyright 2005-2009 LAMP/EPFL
- * @author Sean McDirmid
- */
-// $Id$
-
-package scala.tools.nsc
-package doc
-
-import java.io.StringReader
-import org.xml.sax.InputSource
-
-import scala.collection.immutable.{ListMap, TreeSet}
-import scala.xml._
-
-object DocUtil
-{
- def load(str: String): NodeSeq =
- if ((str == null) || (str.length == 0))
- NodeSeq.Empty
- else {
- val xmlSrc =
- if (str.matches("^(<!--.*-->)*<[^>]+>.*<[^>]+>(<!--.*-->)*$")) str
- else "<div>" + str + "</div>"
- XML.load(new StringReader(xmlSrc))
- }
-
- def br(nodes: NodeSeq): NodeSeq = nodes ++ (<br/>)
- def hr(nodes: NodeSeq): NodeSeq = nodes ++ (<hr/>)
-
- trait UrlContext {
- def relative: String
-
- def aref(href0: String, target: String, text: String): NodeSeq = {
- if (href0 == null) return Text(text);
-
- val href = {
- if (href0.startsWith("http:") || href0.startsWith("file:")) "";
- else relative
- } + Utility.escape(href0)
- if ((target ne null) && target.indexOf('<') != -1) throw new Error(target)
-
- val t0 = Text(text)
- if (target ne null)
- (<a href={href} target={target}>{t0}</a>);
- else
- (<a href={href}>{t0}</a>);
- }
-
- // can't use platform default here or the generated XML may end up all MacRoman
- val encoding = Properties.sourceEncoding
- val generator = System.getProperty("doc.generator", "scaladoc (" + Properties.versionString + ")")
- val header =
- (<meta http-equiv="content-type" content={"text/html; charset=" + encoding}/>
- <meta name="generator" content={generator}/>
- <link rel="stylesheet" type="text/css" href={ relative + "style.css"}/>
- <script type="text/javascript" src={relative + "script.js"}></script>);
-
- def body0(hasBody: Boolean, nodes: NodeSeq): NodeSeq =
- if (!hasBody) nodes else (<body onload="init()">{nodes}</body>);
-
- val dtype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
-
- def page(title: String, body: NodeSeq, hasBody: Boolean): NodeSeq =
- (<html>
- <head><title>{Text(if (title eq null) "null title" else title)}</title>
- {header}
- </head>
- {body0(hasBody, body)}
- </html>)
- } // UrlContext
-
- def div0(title: String): NodeSeq =
- (<div class="doctitle-larger">{Text(title)}</div>);
-
- def merge[T](ts0: TreeSet[T], ts1: TreeSet[T]): TreeSet[T] = ts0 ++ ts1
-
- def merge[T,S](ts0: ListMap[T,TreeSet[S]], ts1: ListMap[T,TreeSet[S]]): ListMap[T,TreeSet[S]] = {
- (ts1 foldLeft ts0) { case (xs, (k, v)) =>
- if (xs contains k) xs.updated(k, xs(k) ++ v)
- else xs.updated(k, v)
- }
- }
-
- implicit def coerceIterable[T](list : Iterable[T]) = NodeWrapper(list.iterator)
- implicit def coerceIterator[T](list : Iterator[T]) = NodeWrapper(list)
-
- case class NodeWrapper[T](list: Iterator[T]) {
- def interleave(xs: Seq[NodeSeq], sep: NodeSeq): NodeSeq =
- if (xs.isEmpty) NodeSeq.Empty
- else if (xs.size == 1) xs.head
- else xs.head ++ sep ++ interleave(xs.tail, sep)
-
- def mkXML(begin: NodeSeq, separator: NodeSeq, end: NodeSeq)(f: T => NodeSeq): NodeSeq =
- begin ++ interleave(list.toSeq map f, separator) ++ end
-
- def mkXML(begin: String, separator: String, end: String)(f: T => NodeSeq): NodeSeq =
- this.mkXML(Text(begin), Text(separator), Text(end))(f)
-
- def surround(open: String, close: String)(f: T => NodeSeq) =
- if (list.hasNext) mkXML(open, ", ", close)(f)
- else NodeSeq.Empty
- }
-}
diff --git a/src/compiler/scala/tools/nsc/doc/ModelAdditions.scala b/src/compiler/scala/tools/nsc/doc/ModelAdditions.scala
deleted file mode 100644
index e3186fd3fe..0000000000
--- a/src/compiler/scala/tools/nsc/doc/ModelAdditions.scala
+++ /dev/null
@@ -1,412 +0,0 @@
-/* NSC -- new Scala compiler
- * Copyright 2007-2009 LAMP/EPFL
- * @author Sean McDirmid
- */
-// $Id$
-
-package scala.tools.nsc
-package doc
-
-/**
- * @author Stephane Micheloud, Sean McDirmid, Geoffrey Washburn
- * @version 1.0
- */
-class ModelAdditions(val global: Global) {
- import global._
- import definitions._
- def addition(sym: global.Symbol) {}
-
- addition(NothingClass);
- comments(NothingClass) = """
- <p>
- Class <code>Nothing</code> is - together with class <a href="Null.html">
- <code>Null</code></a> - at the bottom of the
- <a href="http://scala-lang.org" target="_top">Scala</a> type
- hierarchy.
- </p>
- <p>
- Type <code>Nothing</code> is a subtype of every other type
- (including <a href="Null.html"><code>Null</code></a>); there
- exist <em>no instances</em> of this type. Even though type
- <code>Nothing</code> is empty, it is nevertheless useful as a
- type parameter. For instance, the <a href="http://scala-lang.org"
- target="_top">Scala</a> library defines a value
- <a href="Nil$object.html"><code>Nil</code></a> of type
- <code><a href="List.html">List</a>[Nothing]</code>. Because lists
- are covariant in <a href="http://scala-lang.org" target="_top">Scala</a>,
- this makes <a href="Nil$object.html"><code>Nil</code></a> an
- instance of <code><a href="List.html">List</a>[T]</code>, for
- any element type <code>T</code>.
- </p>"""
-
- addition(NullClass);
- comments(NullClass) = """
- <p>
- Class <code>Null</code> is - together with class <a href="Nothing.html">
- <code>Nothing</code> - at the bottom of the
- <a href="http://scala-lang.org" target="_top">Scala</a> type
- hierarchy.
- </p>
- <p>
- Type <code>Null</code> is a subtype of all reference types; its
- only instance is the <code>null</code> reference.
- Since <code>Null</code> is not a subtype of value types,
- <code>null</code> is not a member of any such type. For instance,
- it is not possible to assign <code>null</code> to a variable of
- type <a href="Int.html"><code>Int</code></a>.
- </p>"""
-
- /*******************************************************************/
- /* Documentation for Any */
-
- addition(AnyClass);
- comments(AnyClass) = """
- <p>
- Class <code>Any</code> is the root of the <a
- href="http://scala-lang.org/"
- target="_top">Scala</a> class hierarchy. Every class in a
- <a href="http://scala-lang.org/" target="_top">Scala</a> execution
- environment inherits directly or indirectly from this class.
- Class <code>Any</code> has two direct subclasses:
- <a href="AnyRef.html"><code>AnyRef</code></a> and
- <a href="AnyVal.html"><code>AnyVal</code></a>.
- </p>"""
-
- addition(Any_equals);
- comments(Any_equals) = """
- This method is used to compare the receiver object (<code>this</code>)
- with the argument object (<code>arg0</code>) for equivalence.
-
- <p>
- The default implementations of this method is an <a
- href="http://en.wikipedia.org/wiki/Equivalence_relation">equivalence
- relation</a>:
- <ul>
- <li>It is reflexive: for any instance <code>x</code> of type <code>Any</code>,
- <code>x.equals(x)</code> should return <code>true</code>.</li>
- <li>It is symmetric: for any instances <code>x</code> and <code>y</code> of type
- <code>Any</code>, <code>x.equals(y)</code> should return <code>true</code> if and only
- if <code>y.equals(x)</code> returns <code>true</code>.</li>
- <li>It is transitive: for any instances
- <code>x</code>, <code>y</code>, and <code>z</code> of type <code>AnyRef</code>
- if <code>x.equals(y)</code> returns <code>true</code> and
- <code>y.equals(z)</code> returns
- <code>true</code>, then <code>x.equals(z)</code> should return <code>true</code>.</li>
- </ul>
- </p>
-
- <p>
- If you override this method, you should verify that
- your implementation remains an equivalence relation.
- Additionally, when overriding this method it is often necessary to
- override <code>hashCode</code> to ensure that objects that are
- "equal" (<code>o1.equals(o2)</code> returns <code>true</code>)
- hash to the same <a href="Int.html"><code>Int</code></a>
- (<code>o1.hashCode.equals(o2.hashCode)</code>).
-
- @param arg0 the object to compare against this object for equality.
- @return <code>true</code> if the receiver object is equivalent to the argument; <code>false</code> otherwise.
- </p>
- """
-
- addition(Any_==);
- comments(Any_==) = """
- <code>o == arg0</code> is the same as <code>o.equals(arg0)</code>.
- <p>
- @param arg0 the object to compare against this object for equality.
- @return <code>true</code> if the receiver object is equivalent to the argument; <code>false</code> otherwise.
- </p>
- """
-
- addition(Any_!=);
- comments(Any_!=) = """
- <code>o != arg0</code> is the same as <code>!(o == (arg0))</code>.
- <p>
- @param arg0 the object to compare against this object for dis-equality.
- @return <code>false</code> if the receiver object is equivalent to the argument; <code>true</code> otherwise.
- </p>
- """
-
- addition(Any_toString);
- comments(Any_toString) = """
- Returns a string representation of the object.
- <p>
- The default representation is platform dependent.
-
- @return a string representation of the object.
- </p>
- """
-
- addition(Any_asInstanceOf);
- comments(Any_asInstanceOf) = """
- This method is used to cast the receiver object to be of type <code>T0</code>.
-
- <p>Note that the success of a cast at runtime is modulo Scala's
- erasure semantics. Therefore the expression
- <code>1.asInstanceOf[String]</code> will throw a
- <code>ClassCastException</code> at runtime, while the expression
- <code>List(1).asInstanceOf[List[String]]</code> will not. In the
- latter example, because the type argument is erased as part of
- compilation it is not possible to check whether the contents of
- the list are of the requested typed.
-
- @throws ClassCastException if the receiver object is not an
- instance of erasure of type <code>T0</code>.
- @return the receiver object.
- </p> """
-
- addition(Any_isInstanceOf);
- comments(Any_isInstanceOf) = """
- This method is used to test whether the dynamic type of the receiver object is <code>T0</code>.
-
- <p>Note that the test result of the test is modulo Scala's erasure
- semantics. Therefore the expression
- <code>1.isInstanceOf[String]</code> will return
- <code>false</code>, while the expression
- <code>List(1).isInstanceOf[List[String]]</code> will return
- <code>true</code>. In the latter example, because the type
- argument is erased as part of compilation it is not possible to
- check whether the contents of the list are of the requested typed.
-
- @return <code>true</code> if the receiver object is an
- instance of erasure of type <code>T0</code>; <code>false</code> otherwise.
- """
-
- addition(Any_hashCode);
- comments(Any_hashCode) = """
- Returns a hash code value for the object.
-
- <p>
- The default hashing algorithm is platform dependent.
-
- Note that it is allowed for two objects to have identical hash
- codes (<code>o1.hashCode.equals(o2.hashCode)</code>) yet not be
- equal (<code>o1.equals(o2)</code> returns <code>false</code>). A
- degenerate implementation could always return <code>0</code>.
- However, it is required that if two objects are equal
- (<code>o1.equals(o2)</code> returns <code>true</code>) that they
- have identical hash codes
- (<code>o1.hashCode.equals(o2.hashCode)</code>). Therefore, when
- overriding this method, be sure to verify that the behavior is
- consistent with the <code>equals</code> method.
- </p>
-
- <p>
- @return the hash code value for the object.
- </p> """
-
- /*******************************************************************/
- /* Documentation for AnyRef */
-
- addition(AnyRefClass);
- comments(AnyRefClass) = """
- <p>
- Class <code>AnyRef</code> is the root class of all
- <em>reference types</em>.
- </p>"""
-
- addition(Object_==);
- comments(Object_==) = """
- <code>o == arg0</code> is the same as <code>if (o eq null) arg0 eq null else o.equals(arg0)</code>.
- <p>
- @param arg0 the object to compare against this object for equality.
- @return <code>true</code> if the receiver object is equivalent to the argument; <code>false</code> otherwise.
- </p>
- """
-
- addition(Object_ne);
- comments(Object_ne) = """
- <code>o.ne(arg0)</code> is the same as <code>!(o.eq(arg0))</code>.
- <p>
- @param arg0 the object to compare against this object for reference dis-equality.
- @return <code>false</code> if the argument is not a reference to the receiver object; <code>true</code> otherwise.
- </p>
- """
-
-
- addition(Object_finalize);
- comments(Object_finalize) = """
- This method is called by the garbage collector on the receiver object when garbage
- collection determines that there are no more references to the object.
- <p>
- The details of when and if the <code>finalize</code> method are
- invoked, as well as the interaction between <code>finalize</code>
- and non-local returns and exceptions, are all platform dependent.
- </p>
- """
-
- addition(Object_clone);
- comments(Object_clone) = """
- This method creates and returns a copy of the receiver object.
-
- <p>
- The default implementation of the <code>clone</code> method is platform dependent.
-
- @return a copy of the receiver object.
- </p>
- """
-
- addition(Object_getClass);
- comments(Object_getClass) = """
- Returns a representation that corresponds to the dynamic class of the receiver object.
-
- <p>
- The nature of the representation is platform dependent.
-
- @return a representation that corresponds to the dynamic class of the receiver object.
- </p>
- """
-
- addition(Object_notify);
- comments(Object_notify) = """
- Wakes up a single thread that is waiting on the receiver object's monitor.
- """
-
- addition(Object_notifyAll);
- comments(Object_notifyAll) = """
- Wakes up all threads that are waiting on the receiver object's monitor.
- """
-
- addition(Object_eq);
- comments(Object_eq) = """
- This method is used to test whether the argument (<code>arg0</code>) is a reference to the
- receiver object (<code>this</code>).
-
- <p>
- The <code>eq</code> method implements an
- <a href="http://en.wikipedia.org/wiki/Equivalence_relation">equivalence relation</a> on non-null instances of
- <code>AnyRef</code>:
- <ul>
- <li>It is reflexive: for any non-null instance <code>x</code> of type <code>AnyRef</code>,
- <code>x.eq(x)</code> returns <code>true</code>.</li>
- <li>It is symmetric: for any non-null instances <code>x</code> and <code>y</code> of type
- <code>AnyRef</code>, <code>x.eq(y)</code> returns <code>true</code> if and only
- if <code>y.eq(x)</code> returns <code>true</code>.</li>
- <li>It is transitive: for any non-null instances
- <code>x</code>, <code>y</code>, and <code>z</code> of type <code>AnyRef</code>
- if <code>x.eq(y)</code> returns <code>true</code> and
- <code>y.eq(z)</code> returns
- <code>true</code>, then <code>x.eq(z)</code> returns <code>true</code>.</li>
- </ul>
- Additionally, the <code>eq</code> method has three other properties.
- <ul>
- <li>It is consistent: for any non-null instances <code>x</code> and <code>y</code> of type <code>AnyRef</code>,
- multiple invocations of <code>x.eq(y)</code> consistently returns <code>true</code>
- or consistently returns <code>false</code>.</li>
- <li>For any non-null instance <code>x</code> of type <code>AnyRef</code>,
- <code>x.eq(null)</code> and <code>null.eq(x)</code> returns <code>false</code>.</li>
- <li><code>null.eq(null)</code> returns <code>true</code>.</li>
- </ul>
- </p>
-
- <p> When overriding the <code>equals</code> or
- <code>hashCode</code> methods, it is important to ensure that
- their behavior is consistent with reference equality. Therefore,
- if two objects are references to each other (<code>o1 eq
- o2</code>), they should be equal to each other (<code>o1 ==
- o2</code>) and they should hash to the same value
- (<code>o1.hashCode == o2.hashCode</code>).</p>
-
- @param arg0 the object to compare against this object for reference equality.
- @return <code>true</code> if the argument is a reference to the receiver object; <code>false</code> otherwise.
- </p>
- """
-
- /*******************************************************************/
-
- addition(AnyValClass);
- comments(AnyValClass) = """
- <p>
- Class <code>AnyVal</code> is the root class of all
- <em>value types</em>.
- </p>
- <p>
- <code>AnyVal</code> has a fixed number subclasses, which
- describe values which are not implemented as objects in the
- underlying host system.
- </p>
- <p>
- Classes <a href="Double.html"><code>Double</code></a>,
- <a href="Float.html"><code>Float</code></a>,
- <a href="Long.html"><code>Long</code></a>,
- <a href="Int.html"><code>Int</code></a>,
- <a href="Char.html"><code>Char</code></a>,
- <a href="Short.html"><code>Short</code></a>, and
- <a href="Byte.html"><code>Byte</code></a> are together called
- <em>numeric value types</em>.
- Classes <a href="Byte.html"><code>Byte</code></a>,
- <a href="Short.html"><code>Short</code></a>, or
- <a href="Char.html"><code>Char</code></a>
- are called <em>subrange types</em>. Subrange types, as well as
- <a href="Int.html"><code>Int</code></a> and
- <a href="Long.html"><code>Long</code></a> are called
- <em>integer types</em>, whereas
- <a href="Float.html"><code>Float</code></a> and
- <a href="Double.html"><code>Double</code></a> are called
- <em>floating point types</em>.
- </p>"""
-
- addition(BooleanClass)
- comments(BooleanClass) = """
- <p>
- Class <code>Boolean</code> has only two values: <code>true</code>
- and <code>false</code>.
- </p>"""
-
- def numericValDescr(sym: Symbol) = {
- val maxValue = "MAX_" + sym.name.toString().toUpperCase()
- val minValue = "MIN_" + sym.name.toString().toUpperCase()
- addition(sym)
- comments(sym) = """
- <p>
- Class <code>""" + sym.name + """</code> belongs to the value
- classes whose instances are not represented as objects by the
- underlying host system. There is an implicit conversion from
- instances of <code>""" + sym.name + """</code> to instances of
- <a href="runtime/Rich""" + sym.name + """.html"><code>runtime.Rich""" + sym.name + """</code></a> which
- provides useful non-primitive operations. All value classes inherit
- from class <a href="AnyVal.html"><code>AnyVal</code></a>.
- </p>
- <p>
- Values <code>""" + maxValue + """</code> and <code>""" + minValue + """</code>
- are in defined in object <a href="Math$object.html">scala.Math</a>.
- </p>"""
- }
- (ByteClass :: CharClass :: DoubleClass :: LongClass ::
- FloatClass :: IntClass :: ShortClass :: Nil).foreach(numericValDescr);
-
- addition(UnitClass);
- comments(UnitClass) = """
- <p>
- Class <code>Unit</code> has only one value: <code>()</code>.
- </p>"""
-
- addition(UnitClass);
-/*
- def boxedValDescr(what: String) = {
- val sym = definitions.getClass("java.lang." + what)
- addition(sym)
- comments(sym) = """
- <p>
- Class <code>""" + sym.name + """</code> implements the
- boxing/unboxing from/to value types.
- </p>
- <p>
- Boxing and unboxing enable value types to be treated as objects;
- they provide a unified view of the type system wherein a value
- of any type can ultimately be treated as an object.
- </p>"""
- };
- //("Float" :: "Long" :: "Number" :: "Integer" :: Nil).foreach(boxedValDescr);
-*/
- object exceptions extends collection.JavaConversions.JMapWrapper[String,(Symbol,String)](
- new java.util.TreeMap()) {
- def f(name: String) {
- this("Predef." + name) = (definitions.PredefModule, name)
- }
- f("IndexOutOfBoundsException")
- f("NoSuchElementException")
- f("NullPointerException")
- f("UnsupportedOperationException")
- }
-}
diff --git a/src/compiler/scala/tools/nsc/doc/ModelExtractor.scala b/src/compiler/scala/tools/nsc/doc/ModelExtractor.scala
deleted file mode 100644
index 94793dda2e..0000000000
--- a/src/compiler/scala/tools/nsc/doc/ModelExtractor.scala
+++ /dev/null
@@ -1,453 +0,0 @@
-/* NSC -- new Scala compiler
- * Copyright 2007-2009 LAMP/EPFL
- * @author Sean McDirmid
- */
-// $Id$
-
-package scala.tools.nsc
-package doc
-
-import scala.collection.mutable
-import compat.Platform.{EOL => LINE_SEPARATOR}
-
-
-/** This class attempts to reverse engineer source code intent from compiler
- * symbol objects.
- *
- * @author Sean McDirmid
- */
-trait ModelExtractor {
- val global: Global
- import global._
- def settings: doc.Settings
-
- def assert(b: Boolean) {
- if (!b) throw new Error
- }
-
- def assert(b: Boolean, message: Any) {
- if (!b) throw new Error(message.toString)
- }
-
- case class Tag(tag: String, option: String, body: String)
-
- case class Comment(body: String, attributes: List[Tag]) {
- def decodeAttributes = {
- val map = new mutable.LinkedHashMap[String, List[(String, String)]] {
- override def default(key: String) = Nil
- }
- attributes.foreach(a => {
- map(a.tag) = map(a.tag) ::: List((a.option, a.body))
- });
- map
- }
- }
- protected def decode(sym: Symbol) =
- if (sym == definitions.ScalaObjectClass || sym == definitions.ObjectClass)
- definitions.AnyRefClass
- else sym match {
- case sym: ModuleClassSymbol => sym.sourceModule
- case sym => sym
- }
-
- protected def decodeComment(comment0: String): Comment = {
- val comment = { // discard outmost comment delimiters if present
- val begin = if (comment0 startsWith "/**") 3 else 0
- val end = comment0.length - (if (comment0 endsWith "*/") 2 else 0)
- comment0.substring(begin, end)
- }
- val tok = new java.util.StringTokenizer(comment, LINE_SEPARATOR)
- val buf = new StringBuilder
- type AttrDescr = (String, String, StringBuilder)
- val attributes = new collection.mutable.ListBuffer[AttrDescr]
- var attr: AttrDescr = null
- while (tok.hasMoreTokens) {
- val s = tok.nextToken.replaceFirst("\\p{Space}?\\*", "")
- val mat1 = pat1.matcher(s)
- if (mat1.matches) {
- attr = (mat1.group(1), null, new StringBuilder(mat1.group(2)))
- //if (kind != CONSTRUCTOR)
- attributes += attr
- } else {
- val mat2 = pat2.matcher(s)
- if (mat2.matches) {
- attr = (mat2.group(1), mat2.group(2), new StringBuilder(mat2.group(3)))
- //if (kind != CLASS)
- attributes += attr
- } else if (attr ne null)
- attr._3.append(s + LINE_SEPARATOR)
- else
- buf.append(s + LINE_SEPARATOR)
- }
- }
- Comment(buf.toString, attributes.toList.map({x => Tag(x._1,x._2,x._3.toString)}))
- }
-
- sealed abstract class Entity(val sym: Symbol) {
- private[ModelExtractor] def sym0 = sym
-
- override def toString = sym.toString
- def comment: Option[String] = global.comments.get(sym)
- // comments decoded, now what?
- def attributes = sym.annotations
- def decodeComment: Option[Comment] = {
- val comment0 = this.comment
- if (comment0.isEmpty) None
- else Some(ModelExtractor.this.decodeComment(comment0.get.trim))
- }
- protected def accessQualified(core: String, qual: String) = core match {
- case "public" => "" // assert(qual == null); "";
- case core => core + (if (qual == null) "" else "[" + qual + "]")
- }
-
- def flagsString = {
- import symtab.Flags
- //val isLocal = sym.hasFlag(Flags.LOCAL)
- val x =
- if (sym hasFlag Flags.PRIVATE) "private"
- else if (sym hasFlag Flags.PROTECTED) "protected"
- else "public"
- var string = accessQualified(x,
- if (sym hasFlag Flags.LOCAL) "this"
- else if (sym.privateWithin != null && sym.privateWithin != NoSymbol)
- sym.privateWithin.nameString
- else null
- )
- def f(flag: Int, str: String) {
- if (sym hasFlag flag) string = string + " " + str
- }
- f(Flags.IMPLICIT, "implicit")
- f(Flags.SEALED, "sealed")
- f(Flags.OVERRIDE, "override")
- f(Flags.CASE, "case")
- if (!sym.isTrait) f(Flags.ABSTRACT, "abstract")
- if (!sym.isModule) f(Flags.FINAL, "final")
- if (!sym.isTrait) f(Flags.DEFERRED, "abstract")
- string.trim
- }
- def listName = name
- def name = sym.nameString
- def fullName(sep: Char) = sym.fullNameString(sep)
- def kind: String
- def header { }
- def typeParams: List[TypeParam] = Nil
- def valueParams: List[List[ValueParam]] = Nil
- def resultType: Option[Type] = None
- def parents: Iterable[Type] = Nil
- def lo: Option[Type] = sym.info match {
- case TypeBounds(lo, hi) if decode(lo.typeSymbol) != definitions.NothingClass => Some(lo)
- case _ => None
- }
- def hi: Option[Type] = sym.info match {
- case TypeBounds(lo, hi) if decode(hi.typeSymbol) != definitions.AnyClass => Some(hi)
- case _ => None
- }
- def variance = {
- import symtab.Flags._
- if (sym hasFlag COVARIANT) "+"
- else if (sym hasFlag CONTRAVARIANT) "-"
- else ""
- }
- def overridden: Iterable[Symbol] = Nil
- }
-
- class ValueParam(sym: Symbol) extends Entity(sym) {
- override def resultType = Some(sym.tpe)
- //def kind = if (sym.isPublic) "val" else "";
- def kind = ""
- }
-
- class ConstructorParam(sym: Symbol) extends ValueParam(sym) {
- override protected def accessQualified(core: String, qual: String) = core match {
- case "public" => "val"
- case "protected" => super.accessQualified(core,qual) + " val"
- case "private" if qual == "this" => ""
- case core => super.accessQualified(core, qual)
- }
- }
-
- def ValueParam(sym: Symbol) = new ValueParam(sym)
- class TypeParam(sym: Symbol) extends Entity(sym) {
- def kind = ""
- }
- def TypeParam(sym: Symbol) = new TypeParam(sym)
-
- trait Clazz extends ClassOrObject {
- private def csym = sym.asInstanceOf[TypeSymbol]
- override def typeParams = csym.typeParams.map(TypeParam)
- override def valueParams = {
- if (constructorArgs.isEmpty) Nil
- else constructorArgs.valuesIterator.toList :: Nil
- }
- def isTrait = csym.isTrait
- override def kind = if (sym.isTrait) "trait" else "class"
- }
-
- trait Object extends ClassOrObject {
- override def kind = "object"
- }
-
- case class Package(override val sym: Symbol) extends Entity(sym) {
- override def kind = "package"
- override def name = fullName('.')
- }
-
- trait TopLevel extends ClassOrObject
- class TopLevelClass (sym: Symbol) extends Entity(sym) with TopLevel with Clazz
- class TopLevelObject(sym: Symbol) extends Entity(sym) with TopLevel with Object {
- override def attributes = sym.moduleClass.annotations
- }
-
- def compare(pathA: List[ClassOrObject], pathB: List[ClassOrObject]): Int = {
- var pA = pathA
- var pB = pathB
- while (true) {
- if (pA.isEmpty) return -1
- if (pB.isEmpty) return +1
- val diff = pA.head.name compare pB.head.name
- if (diff != 0) return diff
- pA = pA.tail
- pB = pB.tail
- }
- 0
- }
-
- def isAccessible(sym: Symbol): Boolean = {
- import symtab.Flags._
- settings.memberaccess.value match {
- case "private" => sym.isPublic || (sym hasFlag PROTECTED) || (sym hasFlag PRIVATE)
- case "protected" => sym.isPublic || (sym hasFlag PROTECTED)
- case "public" => sym.isPublic
- case _ => false
- }
- }
-
- trait ClassOrObject extends Entity {
- def path: List[ClassOrObject] = this :: Nil
- override def listName = path map (_.name) mkString "."
-
- object freshParents extends mutable.LinkedHashSet[Type] {
- this ++= sym.tpe.parents
- this.toList foreach (this --= _.parents)
- }
- object constructorArgs extends mutable.LinkedHashMap[Symbol, ValueParam] {
- import symtab.Flags._
- sym.constrParamAccessors.filter(arg => ! (arg hasFlag SYNTHETIC)).foreach(arg => {
- val str = flagsToString(arg.flags)
- assert((arg hasFlag PRIVATE) && (arg hasFlag LOCAL), arg)
- val argName = arg.name.toString.trim
- val actual = sym.tpe.decls.iterator.find(e => {
- val eName = e.name.toString.trim;
- argName == eName && {
- val str = flagsToString(e.flags);
- !e.hasFlag(LOCAL);
- }
- });
- val param = actual getOrElse arg
- this(param) = new ConstructorParam(param)
- });
- }
- object decls extends mutable.LinkedHashMap[Symbol, Member] {
- sym.tpe.decls.iterator.foreach(e => {
- if (!constructorArgs.contains(e)) {
- val m = Member(e)
- if (!m.isEmpty && !this.contains(e)) this.put(e, m.get)
- }
- });
- }
- def members0(f: Symbol => Boolean) = decls.filterKeys(f).valuesIterator.toList
- def members(c: Category): Iterable[Member] = members0(c.f)
- object inherited extends mutable.LinkedHashMap[Symbol, List[Member]]() {
- override def default(tpe: Symbol) = Nil
- for (m <- sym.tpe.members if !sym.tpe.decls.iterator.contains(m) &&
- (Values.f(m) || Methods.f(m))) {
- val o = m.overridingSymbol(sym)
- if (o == NoSymbol) {
- val parent = decode(m.enclClass)
- val mo = Member(m)
- if (!mo.isEmpty) {
- this(parent) = mo.get :: this(parent)
- }
- }
- }
- }
- override def parents = freshParents
- abstract class Member(sym: Symbol) extends Entity(sym) {
- private def overriding = sym.allOverriddenSymbols
- override def comment = super.comment match {
- case ret @ Some(comment) =>
- ret
- case None =>
- val o = overriding.find(comments.contains)
- o.map(comments.apply)
- }
- }
- abstract class ValDef(sym: Symbol) extends Member(sym) {
- override def resultType = Some(resultType0)
- protected def resultType0: Type
- override def overridden: Iterable[Symbol] = {
- var ret: mutable.LinkedHashSet[Symbol] = null
- for (parent <- ClassOrObject.this.parents) {
- val sym0 = sym.overriddenSymbol(parent.typeSymbol)
- if (sym0 != NoSymbol) {
- if (ret == null) ret = new mutable.LinkedHashSet[Symbol];
- ret += sym0
- }
- }
- if (ret == null) Nil else ret
- }
- }
- case class Def(override val sym : TermSymbol) extends ValDef(sym) {
- override def resultType0 = sym.tpe.finalResultType
- override def typeParams = sym.tpe.typeParams.map(TypeParam)
- override def valueParams = methodArgumentNames.get(sym) match {
- case Some(argss) if argss.length > 1 || (!argss.isEmpty && !argss(0).isEmpty) =>
- argss map (_.map(ValueParam))
- case _ =>
- var i = 0
- val ret = for (tpe <- sym.tpe.paramTypes) yield {
- val ret = sym.newValueParameter(sym.pos, newTermName("arg" + i));
- ret setInfo tpe
- i += 1
- ValueParam(ret)
- }
- if (ret.isEmpty) Nil
- else ret :: Nil
- }
- override def kind = "def"
- }
- case class Val(override val sym: TermSymbol) extends ValDef(sym) {
- import symtab.Flags._
- def resultType0: Type = sym.tpe
- override def kind: String =
- if (sym hasFlag ACCESSOR) {
- val setterName = nme.getterToSetter(sym.name)
- val setter = sym.owner.info.decl(setterName)
- val lazyMod = if (sym hasFlag LAZY) "lazy " else ""
- lazyMod + (if (setter == NoSymbol) "val" else "var")
- } else {
- assert(sym hasFlag JAVA)
- if (sym hasFlag FINAL) "val" else "var"
- }
- }
-
- case class AbstractType(override val sym: Symbol) extends Member(sym) {
- override def kind = "type"
- }
-
- abstract class NestedClassOrObject(override val sym: Symbol) extends Member(sym) with ClassOrObject {
- override def path: List[ClassOrObject] = ClassOrObject.this.path ::: super.path
- }
-
- case class NestedClass(override val sym: ClassSymbol) extends NestedClassOrObject(sym) with Clazz
-
- case class NestedObject(override val sym: ModuleSymbol) extends NestedClassOrObject(sym) with Object {
- override def attributes = sym.moduleClass.annotations
- }
-
- def isVisible(sym: Symbol): Boolean = {
- import symtab.Flags._
- if (sym.isLocalClass) return false
- if (sym.isLocal) return false
- if (sym.isPrivateLocal) return false
- // the next line used to return !inIDE - now it returns true. The underlying
- // logic being applied here is somewhat mysterious (if PRIVATE return isVisible == true?)
- // but changing it causes the docgenerator.scala test case to break, so I leave as-is.
- if (sym hasFlag PRIVATE) return true
- if (sym hasFlag SYNTHETIC) return false
- if (sym hasFlag BRIDGE) return false
- if ((sym.nameString indexOf "$") != -1) return false
- if ((sym hasFlag CASE) && sym.isMethod) return false
- true
- }
-
- def Member(sym: Symbol): Option[Member] = {
- import global._
- import symtab.Flags
- if (!isVisible(sym))
- None
- else if (!isAccessible(sym))
- None
- else if (sym hasFlag Flags.ACCESSOR) {
- if (sym.isSetter) return None;
- assert(sym.isGetter);
- Some[Member](new Val(sym.asInstanceOf[TermSymbol]))
- }
- else if (sym.isValue && !sym.isMethod && !sym.isModule) {
- if (!sym.hasFlag(Flags.JAVA)) {
- Console.println("SYM: " + sym + " " + sym.fullNameString('.'))
- Console.println("FLA: " + Flags.flagsToString(sym.flags))
- }
- assert(sym hasFlag Flags.JAVA)
- Some[Member](new Val(sym.asInstanceOf[TermSymbol]))
- }
- else if (sym.isValue && !sym.isModule) {
- val str = Flags.flagsToString(sym.flags)
- assert(sym.isMethod)
- Some[Member](new Def(sym.asInstanceOf[TermSymbol]))
- }
- else if (sym.isAliasType || sym.isAbstractType)
- Some(new AbstractType(sym))
- else if (sym.isClass)
- Some(new NestedClass(sym.asInstanceOf[ClassSymbol]))
- else if (sym.isModule)
- Some(new NestedObject(sym.asInstanceOf[ModuleSymbol]))
- else
- None
- }
-
- }
- case class Category(label: String)(g: Symbol => Boolean) {
- val f = g
- def plural = label + "s"
- }
- val Constructors = new Category("Additional Constructor")(e => e.isConstructor && !e.isPrimaryConstructor) {
- // override def plural = "Additional Constructors";
- }
- val Objects = Category("Object")(_.isModule);
- val Classes = new Category("Class")(sym => sym.isClass || (sym == definitions.AnyRefClass)) {
- override def plural = "Classes"
- }
- val Values = new Category("Value")(e => e.isValue && e.hasFlag(symtab.Flags.ACCESSOR)) {
- override def plural = "Values and Variables"
- }
- val Methods = Category("Method")(e => e.isValue && e.isMethod && !e.isConstructor && !e.hasFlag(symtab.Flags.ACCESSOR));
- val Types = Category("Type")(e => e.isAliasType || e.isAbstractType);
-
- val categories = Constructors :: Types :: Values :: Methods :: Classes :: Objects :: Nil;
-
-
- import java.util.regex.Pattern
- // patterns for standard tags with 1 and 2 arguments
- private val pat1 = Pattern.compile(
- "[ \t]*@(author|deprecated|owner|pre|return|see|since|todo|version|ex|note)[ \t]*(.*)")
- private val pat2 = Pattern.compile(
- "[ \t]*@(exception|param|throws)[ \t]+(\\p{Graph}*)[ \t]*(.*)")
-
- def sort[E <: Entity](entities: Iterable[E]): Iterable[E] = {
- val set = new collection.immutable.TreeSet[E]()(new Ordering[E] {
- def compare(eA : E, eB: E): Int = {
- if (eA eq eB) return 0;
- (eA, eB) match {
- case (eA: ClassOrObject, eB: ClassOrObject) =>
- val diff = ModelExtractor.this.compare(eA.path, eB.path)
- if (diff!= 0) return diff
- case _ =>
- }
- if (eA.getClass != eB.getClass) {
- val diff = eA.getClass.getName.compare(eB.getClass.getName)
- assert(diff != 0)
- return diff
- }
- if (!eA.sym0.isPackage) {
- val diff = eA.sym0.nameString compare eB.sym0.nameString
- if (diff != 0) return diff
- }
- val diff0 = eA.sym0.fullNameString compare eB.sym0.fullNameString
- assert(diff0 != 0)
- diff0
- }
- })
- set ++ entities
- }
-}
diff --git a/src/compiler/scala/tools/nsc/doc/ModelFrames.scala b/src/compiler/scala/tools/nsc/doc/ModelFrames.scala
deleted file mode 100644
index 970a179cc8..0000000000
--- a/src/compiler/scala/tools/nsc/doc/ModelFrames.scala
+++ /dev/null
@@ -1,396 +0,0 @@
-/* NSC -- new Scala compiler
- * Copyright 2005-2009 LAMP/EPFL
- * @author Sean McDirmid
- */
-// $Id$
-
-package scala.tools.nsc
-package doc
-
-import java.io.{File, FileWriter}
-import scala.util.NameTransformer
-import scala.collection.mutable
-import scala.compat.Platform.{EOL => LINE_SEPARATOR}
-import scala.xml.{NodeSeq, Text, Unparsed, Utility}
-
-/** This class provides HTML document framing functionality.
- *
- * @author Sean McDirmid, Stephane Micheloud
- */
-trait ModelFrames extends ModelExtractor {
- import DocUtil._
- def settings: doc.Settings
- import global.definitions.{AnyClass, AnyRefClass}
-
- val SyntheticClasses = new scala.collection.mutable.HashSet[global.Symbol];
- {
- import global.definitions._
- global.definitions.init
- SyntheticClasses ++= List(
- NothingClass, NullClass, AnyClass, AnyRefClass, AnyValClass,
- //value classes
- BooleanClass, ByteClass, CharClass, IntClass, LongClass, ShortClass,
- FloatClass, DoubleClass, UnitClass)
- }
-
- val outdir = settings.outdir.value
- val windowTitle = settings.windowtitle.value
- val docTitle = load(settings.doctitle.value)
-
- val stylesheetSetting = settings.stylesheetfile
-
- def pageHeader = load(settings.pageheader.value)
- def pageFooter = load(settings.pagefooter.value)
- def pageTop = load(settings.pagetop.value)
- def pageBottom = load(settings.pagebottom.value)
-
- def contentFrame = "contentFrame"
- def classesFrame = "classesFrame"
- def modulesFrame = "modulesFrame"
-
- protected val FILE_EXTENSION_HTML = ".html"
- protected val NAME_SUFFIX_OBJECT = "$object"
- protected val NAME_SUFFIX_PACKAGE = "$package"
-
- def rootTitle = (<div class="page-title">{docTitle}</div>);
- def rootDesc =
- (<p>{load("This document is the API specification for " + windowTitle)}</p>);
-
- final def hasLink(sym: global.Symbol): Boolean =
- if (sym == global.NoSymbol) false
- else if (hasLink0(sym)) true
- else hasLink(decode(sym.owner))
-
- def hasLink0(sym: global.Symbol): Boolean = true
-
- abstract class Frame extends UrlContext {
- { // just save.
- save(page(title, body, hasBody));
- }
- def path: String // relative to outdir
- def relative: String = {
- if (path eq null) return "foo"
- assert(path ne null)
- var idx = 0
- var ct = new StringBuilder
- while (idx != -1) {
- idx = path.indexOf('/', idx)
- //System.err.println(path + " idx=" + idx)
- ct.append(if (idx != -1) "../" else "")
- idx += (if (idx == -1) 0 else 1)
- }
- ct.toString
- }
- def save(nodes: NodeSeq) = {
- val path = this.path
- if (path.startsWith("http://")) throw new Error("frame: " + this)
- val path0 = outdir + File.separator + path + FILE_EXTENSION_HTML
- //if (settings.debug.value) inform("Writing XML nodes to " + path0)
- val file = new File(path0)
- val parent = file.getParentFile()
- if (!parent.exists()) parent.mkdirs()
- val writer = new FileWriter(file)
- val str = dtype + LINE_SEPARATOR + nodes.toString()
- writer.write(str, 0, str.length())
- writer.close()
- }
- protected def body: NodeSeq
- protected def title: String
- protected def hasBody = true
-
- //def urlFor(entity: Entity, target: String): NodeSeq
- def urlFor(entity: Entity): String = {
- val ret = this.urlFor(entity.sym)
- assert(ret != null);
- ret
- }
- def link(entity: Entity, target: String) = aref(urlFor(entity), target, entity.name)
- protected def shortHeader(entity: Entity): NodeSeq
- protected def longHeader(entity: Entity): NodeSeq
- import global._
- import symtab.Flags
-
- def urlFor(sym: Symbol): String = sym match {
- case psym : ModuleSymbol if psym.isPackage =>
- urlFor0(sym, sym) + FILE_EXTENSION_HTML
- case sym if !hasLink(sym) =>
- null
- case sym if sym == AnyRefClass =>
- urlFor0(sym, sym) + FILE_EXTENSION_HTML
- case msym: ModuleSymbol =>
- urlFor0(sym, sym) + FILE_EXTENSION_HTML
- case csym: ClassSymbol =>
- urlFor0(sym, sym) + FILE_EXTENSION_HTML
- case _ =>
- val cnt = urlFor(decode(sym.owner))
- if (cnt == null) null else cnt + "#" + docName(sym)
- }
-
- def docName(sym: Symbol): String = {
- def javaParams(paramTypes: List[Type]): String = {
- def javaName(pt: Type): String = {
- val s = pt.toString
- val matVal = patVal.matcher(s)
- if (matVal.matches) matVal.group(1).toLowerCase
- else s.replaceAll("\\$", ".")
- }
- paramTypes.map(pt => javaName(pt)).mkString("(", ",", ")")
- }
- def scalaParams(paramTypes: List[Type]): String = {
- def scalaName(pt: Type): String = pt.toString.replaceAll(" ", "")
- paramTypes.map(pt => scalaName(pt)).mkString("(", ",", ")")
- }
- java.net.URLEncoder.encode(sym.nameString +
- (sym.tpe match {
- case MethodType(params, _) =>
- val paramTypes = params map (_.tpe)
- if (sym hasFlag Flags.JAVA) javaParams(paramTypes)
- else scalaParams(paramTypes)
- case PolyType(_, MethodType(params, _)) =>
- val paramTypes = params map (_.tpe)
- if (sym hasFlag Flags.JAVA) javaParams(paramTypes)
- else scalaParams(paramTypes)
- case _ => ""
- }), encoding)
- }
-
- def urlFor0(sym: Symbol, orig: Symbol): String =
- (if (sym == NoSymbol) "XXX"
- else if (sym.owner.isPackageClass) rootFor(sym) + pkgPath(sym)
- else urlFor0(decode(sym.owner), orig) + "." + NameTransformer.encode(Utility.escape(sym.nameString))
- ) +
- (sym match {
- case msym: ModuleSymbol =>
- if (msym hasFlag Flags.PACKAGE) NAME_SUFFIX_PACKAGE
- else NAME_SUFFIX_OBJECT
- case csym: ClassSymbol if csym.isModuleClass =>
- if (csym hasFlag Flags.PACKAGE) NAME_SUFFIX_PACKAGE
- else NAME_SUFFIX_OBJECT
- case _ =>
- ""
- })
- }
- def pkgPath(sym : global.Symbol) = sym.fullNameString('/') match {
- case "<empty>" => "_empty_"
- case path => path
- }
-
- protected def rootFor(sym: global.Symbol) = ""
-
- abstract class AllPackagesFrame extends Frame {
- override lazy val path = "modules"
- override lazy val title = "List of all packages"
- def packages: Iterable[Package]
- override def body: NodeSeq =
- (<div>
- <div class="doctitle-larger">{windowTitle}</div>
- <a href="all-classes.html" target={classesFrame} onclick="resetKind();">{"All objects and classes"}</a>
- </div>
- <div class="kinds">Packages</div>
- <ul class="list">{sort(packages).mkXML("","\n","")(pkg => {
- (<li><a href={urlFor(pkg)} target={classesFrame} onclick="resetKind();">
- {pkg.fullName('.')}</a></li>)
- })}
- </ul>);
- }
- abstract class PackagesContentFrame extends Frame {
- lazy val path = "root-content"
- lazy val title = "All Packages"
- def packages : Iterable[Package]
- //def modules: TreeMap[String, ModuleClassSymbol]
- def body: NodeSeq =
- {rootTitle} ++ {rootDesc} ++ (<hr/>) ++
- (<table cellpadding="3" class="member" summary="">
- <tr><td colspan="2" class="title">Package Summary</td></tr>
- {sort(packages).mkXML("","\n","")(pkg => (<tr><td class="signature">
- <code>package
- {aref(pkgPath(pkg.sym) + "$content.html", "_self", pkg.fullName('.'))}
- </code>
- </td></tr>))}
- </table>);
- }
-
- val classFrameKinds = Classes :: Objects :: Nil;
- abstract class ListClassFrame extends Frame {
- def classes: Iterable[ClassOrObject]
- def navLabel: String
- private def navPath = {
- val p = path;
- (if (p endsWith NAME_SUFFIX_PACKAGE)
- p.substring(0, p.length() - NAME_SUFFIX_PACKAGE.length());
- else p) + navSuffix;
- }
- protected def navSuffix = "$content.html"
-
- def body: NodeSeq = {
- val nav = if (navLabel == null) NodeSeq.Empty else
- (<table class="navigation" summary="">
- <tr><td valign="top" class="navigation-links">
- {aref(navPath, contentFrame, navLabel)}
- </td></tr>
- </table>);
- val ids = new mutable.LinkedHashSet[String]
- def idFor(kind: Category, t: Entity)(seq : NodeSeq): NodeSeq = {
- val ch = t.listName.charAt(0);
- val id = kind.plural + "_" + ch;
- if (ids contains id) (<li>{seq}</li>);
- else {
- ids += id;
- (<li id={id}>{seq}</li>)
- };
- }
- val body = (<div>{classFrameKinds.mkXML("","\n","")(kind => {
- val classes = sort(this.classes.filter(e => kind.f(e.sym)));
- if (classes.isEmpty) NodeSeq.Empty; else
- (<div id={kind.plural} class="kinds">{Text(kind.plural)}</div>
- <ul class="list">
- {classes.mkXML("","\n","")(cls => {
- idFor(kind, cls)(
- aref(urlFor(cls), contentFrame, cls.listName) ++ optional(cls)
- );
- })}
- </ul>);
- })}</div>);
- nav ++ body
- }
- def optional(cls: ClassOrObject): NodeSeq = NodeSeq.Empty
- }
-
- abstract class PackageContentFrame extends Frame {
- override def path = pkgPath(pkg.sym) + "$content"
- override def title = "All classes and objects in " + pkg.fullName('.')
- protected def pkg: Package
- protected def classes: Iterable[ClassOrObject]
- def body: NodeSeq =
- {rootTitle} ++ {rootDesc} ++ {classFrameKinds.mkXML("","\n","")(kind => {
- val classes = sort(this.classes.filter(e => kind.f(e.sym) && e.isInstanceOf[TopLevel]));
- if (classes.isEmpty) NodeSeq.Empty else
- (<table cellpadding="3" class="member" summary="">
- <tr><td colspan="2" class="title">{kind.label} Summary</td></tr>
- {classes.mkXML("","\n","")(shortHeader)}
- </table>)
- })};
- }
-
- abstract class ClassContentFrame extends Frame {
- def clazz: ClassOrObject
- def body: NodeSeq =
- (<xml:group>
- {pageHeader}{navigation}{pageTop}
- {header0}{longHeader(clazz)}
- {pageBottom}{navigation}{pageFooter}
- </xml:group>);
- final def path = urlFor0(clazz.sym, clazz.sym)
- private def navigation: NodeSeq =
- (<table class="navigation" summary="">
- <tr>
- <td valign="top" class="navigation-links">
- <!-- <table><tr></tr></table> -->
- </td>
- <td align="right" valign="top" style="white-space:nowrap;" rowspan="2">
- <div class="doctitle-larger">{windowTitle}</div>
- </td>
- </tr>
- <tr><td></td></tr>
- </table>);
- private def header0: NodeSeq = {
- val owner = decode(clazz.sym.owner)
- (<xml:group>
- <div class="entity">
- {aref(urlFor(owner), "_self", owner.fullNameString('.'))}
- <br/>
- <span class="entity">{Text(clazz.kind)} {Text(clazz.name)}</span>
- </div><hr/>
- <div class="source">
- {
- if (SyntheticClasses contains clazz.sym)
- Text("[Source: none]")
- else {
- val name = owner.fullNameString('/') + (if (owner.isPackage) "/" + clazz.name else "")
- Text("[source: ") ++
- (<a class={name} href=""><code>{name + ".scala"}</code></a>) ++
- Text("]")
- }
- }
- </div><hr/>
- </xml:group>)
- }
- }
-
- val index =
- (<frameset cols="25%, 75%">
- <frameset rows="50%, 28, 50%">
- <frame src="modules.html" name={modulesFrame}></frame>
- <frame src="nav-classes.html" name="navigationFrame"></frame>
- <frame src="all-classes.html" name={classesFrame}></frame>
- </frameset>
- <frame src="root-content.html" name={contentFrame}></frame>
- </frameset>);
-
- val root = (<b></b>);
-
- abstract class RootFrame extends Frame {
- def title = windowTitle
- def body = index
- def path = "index"
- override def hasBody = false
- }
-
- val indexChars = 'A' :: 'B' :: 'C' :: 'D' :: 'E' :: 'G' :: 'I' :: 'L' :: 'M' :: 'P' :: 'R' :: 'T' :: 'V' :: 'X' :: Nil;
-
- abstract class NavigationFrame extends Frame {
- def title="navigation"
- def path="nav-classes"
- override def body0(hasBody: Boolean, nodes: NodeSeq): NodeSeq =
- if (!hasBody) nodes
- else (<body style="margin:1px 0 0 1px; padding:1px 0 0 1px;">{nodes}</body>);
- def body =
- (<form>
- <select id="kinds" onchange="gotoKind()">
- <option value="#Classes" selected="selected">Classes</option>
- <option value="#Objects">Objects</option>
- </select>
- <span id="alphabet" style="font-family:Courier;word-spacing:-8px;">{
- indexChars.mkXML("","\n","")(c => {
- (<a href={Unparsed("javascript:gotoName(\'" + c + "\')")}>{c}</a>)
- });
- }
- </span>
- </form>)
- }
-
- def copyResources = {
- import java.io._
- val loader = this.getClass().getClassLoader()
- def basename(path: String): String = {
- val pos = path lastIndexOf System.getProperty("file.separator", "/")
- if (pos != -1) path.substring(pos + 1) else path
- }
- def copyResource(name: String, isFile: Boolean) = try {
- val (in, outfile) =
- if (isFile)
- (new FileInputStream(name), basename(name))
- else {
- // The name of a resource is a '/'-separated path name that identifies the resource.
- (loader.getResourceAsStream("scala/tools/nsc/doc/" + name), name)
- }
- val out = new FileOutputStream(new File(outdir + File.separator + outfile))
- val buf = new Array[Byte](1024)
- var len = 0
- while (len != -1) {
- out.write(buf, 0, len)
- len = in.read(buf)
- }
- in.close()
- out.close()
- } catch {
- case _ =>
- System.err.println("Resource file '" + name + "' not found")
- }
- copyResource(stylesheetSetting.value, !stylesheetSetting.isDefault)
- copyResource("script.js", false)
- }
-
- private val patVal = java.util.regex.Pattern.compile(
- "scala\\.(Byte|Boolean|Char|Double|Float|Int|Long|Short)")
-}
diff --git a/src/compiler/scala/tools/nsc/doc/ModelToXML.scala b/src/compiler/scala/tools/nsc/doc/ModelToXML.scala
deleted file mode 100644
index 19d67ab2fd..0000000000
--- a/src/compiler/scala/tools/nsc/doc/ModelToXML.scala
+++ /dev/null
@@ -1,368 +0,0 @@
-/* NSC -- new Scala compiler
- * Copyright 2007-2009 LAMP/EPFL
- * @author Sean McDirmid
- */
-// $Id$
-
-package scala.tools.nsc
-package doc
-
-import scala.xml._
-
-/** This class has functionality to format source code models as XML blocks.
- *
- * @author Sean McDirmid, Stephane Micheloud
- */
-trait ModelToXML extends ModelExtractor {
- import global._
- import definitions.AnyRefClass
- import DocUtil._
- // decode entity into XML.
- type Frame
-
- protected def urlFor(sym: Symbol)(implicit frame: Frame): String
- protected def anchor(sym: Symbol)(implicit frame: Frame): NodeSeq
-
- def aref(href: String, label: String)(implicit frame: Frame): NodeSeq
-/*
- def link(entity: Symbol)(implicit frame: Frame): NodeSeq = {
- val url = urlFor(entity)
- // nothing to do but be verbose.
- if (url == null)
- Text(entity.owner.fullNameString('.') + '.' + entity.nameString)
- else
- aref(url, entity.nameString)
- }
-*/
- def link(entity: Symbol, label: String)(implicit frame: Frame): NodeSeq = {
- val url = urlFor(entity)
- if (url == null) { // external link (handled by script.js)
- val (href, attr) =
- if (entity.isClass || (entity==AnyRefClass))
- ("", entity.owner.fullNameString('/') + '/' + entity.nameString)
- else
- ("#" + entity.nameString, entity.owner.fullNameString('/'))
- val name = entity.owner.fullNameString('.') + '.' + entity.nameString
- <a href={Utility.escape(href)} class={attr} target="contentFrame">{name}</a>;
- }
- else
- aref(url, label)
- }
-
- def link(entity: Symbol)(implicit frame: Frame): NodeSeq =
- link(entity, entity.nameString)
-
- def link(tpe: Type)(implicit frame: Frame): NodeSeq = {
- if (!tpe.typeArgs.isEmpty) {
- if (definitions.isFunctionType(tpe)) {
- val (args,r) = tpe.normalize.typeArgs.splitAt(tpe.normalize.typeArgs.length - 1);
- args.mkXML("(", ", ", ")")(link) ++ Text(" => ") ++ link(r.head);
- } else if (definitions.isRepeatedParamType(tpe)) {
- assert(tpe.typeArgs.length == 1)
- link(tpe.typeArgs(0)) ++ Text("*")
- } else if (tpe.typeSymbol == definitions.ByNameParamClass) {
- assert(tpe.typeArgs.length == 1)
- Text("=> ") ++ link(tpe.typeArgs(0))
- } else if (tpe.typeSymbol.name.toString.startsWith("Tuple") &&
- tpe.typeSymbol.owner.name == nme.scala_.toTypeName) {
- tpe.typeArgs.mkXML("(", ", ", ")")(link)
- } else
- link(decode(tpe.typeSymbol)) ++ tpe.typeArgs.surround("[", "]")(link)
- } else tpe match {
- case PolyType(tparams,result) =>
- link(result) ++ tparams.surround("[", "]")(link)
- case RefinedType(parents,_) =>
- val parents1 =
- if ((parents.length > 1) &&
- (parents.head.typeSymbol eq definitions.ObjectClass)) parents.tail;
- else parents;
- parents1.mkXML(Text(""), <code> with </code>, Text(""))(link);
- case _ =>
- if (tpe.typeSymbol == NoSymbol) {
- throw new Error(tpe + " has no type class " + tpe.getClass)
- }
- link(decode(tpe.typeSymbol))
- }
- }
-
- private def printIf[T](what: Option[T], before: String, after: String)(f: T => NodeSeq): NodeSeq =
- if (what.isEmpty) Text("")
- else Text(before) ++ f(what.get) ++ Text(after)
-
- def bodyFor(entity: Entity)(implicit frame: Frame): NodeSeq = try {
- var seq = {entity.typeParams.surround("[", "]")(e => {
- Text(e.variance) ++ <em>{e.name}</em> ++
- {printIf(e.hi, " <: ", "")(link)} ++
- {printIf(e.lo, " >: ", "")(link)}
- })} ++ printIf(entity.hi, " <: ", "")(link) ++
- printIf(entity.lo, " >: ", "")(link);
- {entity.valueParams.foreach(xs => {
- seq = seq ++ xs.mkXML("(", ", ", ")")(arg =>
- {
- val str = arg.flagsString.trim
- if (str.length == 0) NodeSeq.Empty
- else <code>{Text(str)} </code>
- } ++
- <em>{arg.name}</em> ++ (try {
-
- Text(" : ") ++ link(arg.resultType.get)
- } catch {
- case e : Throwable => System.err.println("ARG " + arg + " in " + entity); throw e
- })
- );
- seq
- })};
- seq ++ {printIf(entity.resultType, " : ", "")(tpe => link(tpe))}
- } catch {
- case e => System.err.println("generating for " + entity); throw e
- }
-
- def extendsFor(entity: Entity)(implicit frame: Frame): NodeSeq = {
- if (entity.parents.isEmpty) NodeSeq.Empty
- else <code> extends </code>++
- entity.parents.mkXML(Text(""), <code> with </code>, Text(""))(link);
- }
-
- def parse(str: String): NodeSeq = {
- new SpecialNode {
- def label = "#PCDATA"
- def buildString(sb: StringBuilder): StringBuilder = {
- sb.append(str.trim)
- sb
- }
- }
- }
-
- def longHeader(entity: Entity)(implicit frame: Frame): NodeSeq = Group({
- anchor(entity.sym) ++ <dl>
- <dt>
- {attrsFor(entity)}
- <code>{Text(entity.flagsString)}</code>
- <code>{Text(entity.kind)}</code>
- <em>{entity.sym.nameString}</em>{bodyFor(entity)}
- </dt>
- <dd>{extendsFor(entity)}</dd>
- </dl>;
- } ++ {
- val cmnt = entity.decodeComment
- if (cmnt.isEmpty) NodeSeq.Empty
- else longComment(entity, cmnt.get)
- } ++ (entity match {
- case entity: ClassOrObject => classBody(entity)
- case _ => NodeSeq.Empty
- }) ++ {
- val overridden = entity.overridden
- if (overridden.isEmpty)
- NodeSeq.Empty
- else {
- <dl>
- <dt style="margin:10px 0 0 20px;">
- <b>Overrides</b>
- </dt>
- <dd>
- { overridden.mkXML("",", ", "")(sym => link(decode(sym.owner)) ++ Text(".") ++ link(sym))
- }
- </dd>
- </dl>
- }
- } ++ <hr/>);
-
- def longComment(entity: Entity, cmnt: Comment)(implicit frame: Frame): NodeSeq = {
- val attrs = <dl>{
- var seq: NodeSeq = NodeSeq.Empty
- cmnt.decodeAttributes.foreach{
- case (tag, xs) =>
- seq = seq ++ <dt style="margin:10px 0 0 20px;">
- <b>{decodeTag(tag)}</b></dt> ++ {xs.flatMap{
- case (option,body) => <dd>{
- if (option == null) NodeSeq.Empty;
- else decodeOption(tag, option);
- }{ tag match {
- case "see" => resolveSee(entity.sym, body.trim)
- case _ => parse(body)
- }}</dd>
- }}
- };
- seq
- }</dl>;
- <xml:group>
- <dl><dd>{parse(cmnt.body)}</dd></dl>
- {attrs}
- </xml:group>
- }
-
- /**
- * Try to be smart about @see elements. If the body looks like a link, turn it into
- * a link. If it can be resolved in the symbol table, turn it into a link to the referenced
- * entity.
- */
- private def resolveSee(owner: Symbol, body: String)(implicit frame: Frame): NodeSeq = {
- /** find a class either in the root package, in the current class or in the current package. */
- def findClass(clsName: String): Symbol = {
- try { definitions.getClass(clsName) } catch {
- case f: FatalError =>
- try { definitions.getMember(owner, clsName.toTypeName) } catch {
- case f: FatalError =>
- definitions.getMember(owner.enclosingPackage, clsName.toTypeName)
- }
- }
- }
-
- if (body.startsWith("http://")
- || body.startsWith("https://")
- || body.startsWith("www")) {
- // a link
- body.split(" ") match {
- case Seq(href, txt, rest @ _*) =>
- <a href={href}>{txt}{rest}</a>
- case _ =>
- <a href={body}>{body}</a>
- }
- } else try {
- // treat it like a class or member reference
- body.split("#") match {
- case Seq(clazz, member) =>
- val clazzSym = if (clazz.length == 0) owner.enclClass else findClass(clazz)
- link(definitions.getMember(clazzSym, member), body)
- case Seq(clazz, _*) =>
- link(findClass(clazz), body)
- case _ =>
- parse(body)
- }
- } catch {
- case f: FatalError =>
- log("Error resolving @see: " + f.toString)
- parse(body)
- }
- }
-
- def classBody(entity: ClassOrObject)(implicit from: Frame): NodeSeq =
- <xml:group>
- {categories.mkXML("","\n","")(c => shortList(entity, c)) : NodeSeq}
- {categories.mkXML("","\n","")(c => longList(entity, c)) : NodeSeq}
- </xml:group>;
-
- def longList(entity: ClassOrObject, category: Category)(implicit from: Frame): NodeSeq = {
- val xs = entity.members(category)
- if (!xs.iterator.hasNext)
- NodeSeq.Empty
- else Group(
- <table cellpadding="3" class="member-detail" summary="">
- <tr><td class="title">{Text(category.label)} Details</td></tr>
- </table>
- <div>{xs.mkXML("","\n","")(m => longHeader(m))}</div>)
- }
-
- def shortList(entity: ClassOrObject, category: Category)(implicit from: Frame): NodeSeq = {
- val xs = entity.members(category)
- var seq: NodeSeq = NodeSeq.Empty
- if (xs.iterator.hasNext) {
- // alphabetic
- val set = new scala.collection.immutable.TreeSet[entity.Member]()(new Ordering[entity.Member] {
- def compare(mA : entity.Member, mB: entity.Member): Int =
- if (mA eq mB) 0
- else {
- val diff = mA.name compare mB.name
- if (diff != 0) diff
- else {
- val diff0 = mA.hashCode - mB.hashCode
- assert(diff0 != 0, mA.name)
- diff0
- }
- }
- })++xs
- seq = seq ++ <table cellpadding="3" class="member" summary="">
- <tr><td colspan="2" class="title">{Text(category.label + " Summary")}</td></tr>
- {set.mkXML("","\n","")(mmbr => shortHeader(mmbr))}
- </table>
- }
- // list inherited members...if any.
- for ((tpe,members) <- entity.inherited) {
- val members0 = members.filter(m => category.f(m.sym));
- if (!members0.isEmpty) seq = seq ++ <table cellpadding="3" class="inherited" summary="">
- <tr><td colspan="2" class="title">
- {Text(category.plural + " inherited from ") ++ link(tpe)}
- </td></tr>
- <tr><td colspan="2" class="signature">
- {members0.mkXML((""), (", "), (""))(m => {
- link(decode(m.sym)) ++
- (if (m.sym.hasFlag(symtab.Flags.ABSTRACT) || m.sym.hasFlag(symtab.Flags.DEFERRED)) {
- Text(" (abstract)");
- } else NodeSeq.Empty);
- })}
- </td></tr>
- </table>
- }
- seq;
- }
-
- protected def decodeOption(tag: String, string: String): NodeSeq =
- <code>{Text(string + " - ")}</code>;
-
- protected def decodeTag(tag: String): String = tag.capitalize
-
- def shortHeader(entity: Entity)(implicit from: Frame): NodeSeq =
- <tr>
- <td valign="top" class="modifiers">
- <code>{Text(entity.flagsString)} {Text(entity.kind)}</code>
- </td>
- <td class="signature">
- <em>{link(decode(entity.sym))}</em>
- {bodyFor(entity) ++ extendsFor(entity)}
- {
- entity.resultType match {
- case Some(PolyType(_, ConstantType(v))) => Text(" = " + v.escapedStringValue)
- case _ => NodeSeq.Empty
- }
- }
- {
- val cmnt = entity.decodeComment
- if (cmnt.isEmpty) NodeSeq.Empty
- else shortComment(cmnt.get)
- }
- </td>
- </tr>
-
- import java.util.regex.Pattern
- // pattern detecting first line of comment (see ticket #224)
- private val pat = Pattern.compile("[ \t]*(/\\*)[ \t]*")
-
- /** Ticket #224
- * Write the first sentence as a short summary of the method, as scaladoc
- * automatically places it in the method summary table (and index).
- * (see http://java.sun.com/j2se/javadoc/writingdoccomments/)
- */
- def shortComment(cmnt: Comment): NodeSeq = {
- val lines = cmnt.body split "<p>"
- val first =
- if (lines.length < 2)
- lines(0)
- else {
- val line0 = lines(0)
- val mat = pat matcher line0
- if (mat.matches()) line0 + lines(1)
- else line0
- }
- <div>{parse(first/*cmnt.body*/)}</div>
- }
-
- def attrsFor(entity: Entity)(implicit from: Frame): NodeSeq = {
- def attrFor(attr: AnnotationInfo): Node = {
- val buf = new StringBuilder
- val AnnotationInfo(tpe, args, nvPairs) = attr
- val name = link(decode(tpe.typeSymbol))
- if (!args.isEmpty)
- buf.append(args.mkString("(", ",", ")"))
- if (!nvPairs.isEmpty)
- for (((name, value), index) <- nvPairs.zipWithIndex) {
- if (index > 0)
- buf.append(", ")
- buf.append(name).append(" = ").append(value)
- }
- Group(name ++ Text(buf.toString))
- }
- def toGroup(x: AnnotationInfo): Node = Group(Text("@") ++ attrFor(x) ++ <br/>)
- if (entity.sym.hasFlag(symtab.Flags.CASE)) NodeSeq.Empty
- else NodeSeq fromSeq (entity.attributes map toGroup)
- }
-}
diff --git a/src/compiler/scala/tools/nsc/doc/Processor.scala b/src/compiler/scala/tools/nsc/doc/Processor.scala
new file mode 100644
index 0000000000..8e08010f2c
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/Processor.scala
@@ -0,0 +1,56 @@
+/* NSC -- new Scala compiler -- Copyright 2007-2009 LAMP/EPFL */
+
+// $Id$
+
+package scala.tools.nsc
+package doc
+
+import reporters.Reporter
+
+/** A documentation processor controls the process of generating Scala documentation, which is as follows.
+ *
+ * * A simplified compiler instance (with only the front-end phases enabled) is created, and additional
+ * ''sourceless'' comments are registered.
+ * * Documentable files are compiled, thereby filling the compiler's symbol table.
+ * * A documentation model is extracted from the post-compilation compiler's symbol table.
+ * * A generator is used to transform the model into the correct final format (HTML).
+ *
+ * A processor contains a single compiler instantiated from the processor's settings. Each call to the `run` method
+ * uses the same compiler instance with the same symbol table. In particular, this implies that the scaladoc site
+ * obtained from a call to `run` will contain documentation about files compiled during previous calls to the same
+ * processor's `run` method.
+ *
+ * @param reporter The reporter to which both documentation and compilation errors will be reported.
+ * @param settings The settings to be used by the documenter and compiler for generating documentation.
+ *
+ * @author Gilles Dubochet */
+class Processor(val reporter: Reporter, val settings: doc.Settings) { processor =>
+
+ /** The unique compiler instance used by this processor and constructed from its `settings`. */
+ object compiler extends Global(settings, reporter) {
+ override protected def computeInternalPhases() {
+ phasesSet += syntaxAnalyzer
+ phasesSet += analyzer.namerFactory
+ phasesSet += analyzer.typerFactory
+ phasesSet += superAccessors
+ phasesSet += pickler
+ phasesSet += refchecks
+ }
+ override def onlyPresentation = true
+ lazy val addSourceless = {
+ val sless = new SourcelessComments { val global = compiler }
+ comments ++= sless.comments
+ }
+ }
+
+ /** Creates a scaladoc site for all symbols defined in this call's `files`, as well as those defined in `files` of
+ * previous calls to the same processor.
+ * @param files The list of paths (relative to the compiler's source path, or absolute) of files to document. */
+ def document(files: List[String]): Unit = {
+ (new compiler.Run()) compile files
+ compiler.addSourceless
+ if (!reporter.hasErrors)
+ (new html.SiteFactory(reporter, settings)) generate (new model.EntityFactory(compiler, settings)).makeModel
+ }
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/Settings.scala b/src/compiler/scala/tools/nsc/doc/Settings.scala
index 1c878f1022..2a76285f51 100644
--- a/src/compiler/scala/tools/nsc/doc/Settings.scala
+++ b/src/compiler/scala/tools/nsc/doc/Settings.scala
@@ -11,19 +11,14 @@ import java.io.File
import java.lang.System
class Settings(error: String => Unit) extends scala.tools.nsc.Settings(error) {
+
/** scaladoc specific options */
- val memberaccess = ChoiceSetting ("-access", "Show only public, protected/public (default) or all classes and members",
- List("public", "protected", "private"), "protected")
- val pagebottom = StringSetting ("-bottom", "pagebottom", "Include bottom text for each page", "")
- val doccharset = StringSetting ("-charset", "doccharset", "Charset for cross-platform viewing of generated documentation.", "")
- val doctitle = StringSetting ("-doctitle", "doctitle", "Include title for the overview page", "Scala 2<br/>API Specification")
- val pagefooter = StringSetting ("-footer", "pagefooter", "Include footer text for each page", "")
- val pageheader = StringSetting ("-header", "pageheader", "Include header text for each page", "")
- val linksource = BooleanSetting ("-linksource", "Generate source in HTML")
- val nocomment = BooleanSetting ("-nocomment", "Suppress description and tags, generate only declarations.")
- val stylesheetfile = StringSetting ("-stylesheetfile", "stylesheetfile", "File to change style of the generated documentation", "style.css")
- val pagetop = StringSetting ("-top", "pagetop", "Include top text for each page", "")
- val windowtitle = StringSetting ("-windowtitle", "windowtitle", "Specify window title of generated HTML documentation", "Scala 2")
+ val docformat = ChoiceSetting ("-doc-format", "Selects to which format documentation is rendered", List("html"), "html")
+ val doctitle = StringSetting ("-doc-title", "doc-title", "Include title for the overview page", "Scala 2 API")
+
+ // working around issue described in r18708.
+ suppressVTWarn.value = true
+
// working around issue described in r18708.
suppressVTWarn.value = true
diff --git a/src/compiler/scala/tools/nsc/doc/SourcelessComments.scala b/src/compiler/scala/tools/nsc/doc/SourcelessComments.scala
new file mode 100644
index 0000000000..0341882d5c
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/SourcelessComments.scala
@@ -0,0 +1,379 @@
+/* NSC -- new Scala compiler -- Copyright 2007-2009 LAMP/EPFL */
+
+package scala.tools.nsc
+package doc
+
+import scala.collection._
+
+/**
+ * This class contains comments to all symbols which pre-exist in Scala, such as Any, Nothing, ...
+ * It also contains a HashSet of the given symbols
+ * The comments are to be added to a HashMap called comments, which resides in the Global.scala file
+ * @author Manohar Jonnalagedda, Stephane Micheloud, Sean McDirmid, Geoffrey Washburn
+ * @version 1.0
+ */
+abstract class SourcelessComments {
+
+ val global: Global
+
+ import global._
+ import definitions._
+
+ lazy val comments = {
+
+ val comment = mutable.HashMap.empty[Symbol, String]
+
+ comment(NothingClass) = """
+ /** <p>
+ * Class <code>Nothing</code> is - together with class <a href="Null.html">
+ * <code>Null</code></a> - at the bottom of the
+ * <a href="http://scala-lang.org" target="_top">Scala</a> type
+ * hierarchy.
+ * </p>
+ * <p>
+ * Type <code>Nothing</code> is a subtype of every other type
+ * (including <a href="Null.html"><code>Null</code></a>); there
+ * exist <em>no instances</em> of this type. Even though type
+ * <code>Nothing</code> is empty, it is nevertheless useful as a
+ * type parameter. For instance, the <a href="http://scala-lang.org"
+ * target="_top">Scala</a> library defines a value
+ * <a href="Nil$object.html"><code>Nil</code></a> of type
+ * <code><a href="List.html">List</a>[Nothing]</code>. Because lists
+ * are covariant in <a href="http://scala-lang.org" target="_top">Scala</a>,
+ * this makes <a href="Nil$object.html"><code>Nil</code></a> an
+ * instance of <code><a href="List.html">List</a>[T]</code>, for
+ * any element type <code>T</code>.
+ * </p> */
+ """
+
+ comment(NullClass) = """
+ /** <p>
+ * Class <code>Null</code> is - together with class <a href="Nothing.html">
+ * <code>Nothing</code> - at the bottom of the
+ * <a href="http://scala-lang.org" target="_top">Scala</a> type
+ * hierarchy.
+ * </p>
+ * <p>
+ * Type <code>Null</code> is a subtype of all reference types; its
+ * only instance is the <code>null</code> reference.
+ * Since <code>Null</code> is not a subtype of value types,
+ * <code>null</code> is not a member of any such type. For instance,
+ * it is not possible to assign <code>null</code> to a variable of
+ * type <a href="Int.html"><code>Int</code></a>.
+ * </p> */
+ """
+
+ /*******************************************************************/
+ /* Documentation for Any */
+
+ comment(AnyClass) = """
+ /** <p>
+ * Class <code>Any</code> is the root of the <a
+ * href="http://scala-lang.org/"
+ * target="_top">Scala</a> class hierarchy. Every class in a
+ * <a href="http://scala-lang.org/" target="_top">Scala</a> execution
+ * environment inherits directly or indirectly from this class.
+ * Class <code>Any</code> has two direct subclasses:
+ * <a href="AnyRef.html"><code>AnyRef</code></a> and
+ * <a href="AnyVal.html"><code>AnyVal</code></a>.
+ * </p> */
+ """
+
+ comment(Any_equals) = """
+ /** This method is used to compare the receiver object (<code>this</code>)
+ * with the argument object (<code>arg0</code>) for equivalence.
+ *
+ * <p>
+ * The default implementations of this method is an <a
+ * href="http://en.wikipedia.org/wiki/Equivalence_relation">equivalence
+ * relation</a>:
+ * <ul>
+ * <li>It is reflexive: for any instance <code>x</code> of type <code>Any</code>,
+ * <code>x.equals(x)</code> should return <code>true</code>.</li>
+ * <li>It is symmetric: for any instances <code>x</code> and <code>y</code> of type
+ * <code>Any</code>, <code>x.equals(y)</code> should return <code>true</code> if and only
+ * if <code>y.equals(x)</code> returns <code>true</code>.</li>
+ * <li>It is transitive: for any instances
+ * <code>x</code>, <code>y</code>, and <code>z</code> of type <code>AnyRef</code>
+ * if <code>x.equals(y)</code> returns <code>true</code> and
+ * <code>y.equals(z)</code> returns
+ * <code>true</code>, then <code>x.equals(z)</code> should return <code>true</code>.</li>
+ *</ul>
+ *</p>
+ *
+ * <p>
+ * If you override this method, you should verify that
+ * your implementation remains an equivalence relation.
+ * Additionally, when overriding this method it is often necessary to
+ * override <code>hashCode</code> to ensure that objects that are
+ * "equal" (<code>o1.equals(o2)</code> returns <code>true</code>)
+ * hash to the same <a href="Int.html"><code>Int</code></a>
+ * (<code>o1.hashCode.equals(o2.hashCode)</code>).
+ *
+ * @param arg0 the object to compare against this object for equality.
+ * @return <code>true</code> if the receiver object is equivalent to the argument; <code>false</code> otherwise.
+ * </p> */
+ """
+
+ comment(Any_==) = """
+ /** `o == arg0` is the same as `o.equals(arg0)`.
+ * <p>
+ * @param arg0 the object to compare against this object for equality.
+ * @return `true` if the receiver object is equivalent to the argument; `false` otherwise.
+ * </p> */
+ """
+
+ comment(Any_!=) = """
+ /** `o != arg0` is the same as `!(o == (arg0))`.
+ * <p>
+ * @param arg0 the object to compare against this object for dis-equality.
+ * @return `false` if the receiver object is equivalent to the argument; `true` otherwise.
+ * </p> */
+ """
+
+ comment(Any_toString) = """
+ /** Returns a string representation of the object.
+ * <p>
+ * The default representation is platform dependent.
+ *
+ * @return a string representation of the object.
+ * </p>*/
+ """
+
+ comment(Any_asInstanceOf) = """
+ /**This method is used to cast the receiver object to be of type <code>T0</code>.
+ *
+ * <p>Note that the success of a cast at runtime is modulo Scala's
+ * erasure semantics. Therefore the expression
+ * <code>1.asInstanceOf[String]</code> will throw a
+ * <code>ClassCastException</code> at runtime, while the expression
+ * <code>List(1).asInstanceOf[List[String]]</code> will not. In the
+ * latter example, because the type argument is erased as part of
+ * compilation it is not possible to check whether the contents of
+ * the list are of the requested typed.
+ *
+ * @throws ClassCastException if the receiver object is not an
+ * instance of erasure of type <code>T0</code>.
+ * @return the receiver object.
+ * </p> */
+ """
+
+ comment(Any_isInstanceOf) = """
+ /** This method is used to test whether the dynamic type of the receiver object is <code>T0</code>.
+ *
+ * <p>Note that the test result of the test is modulo Scala's erasure
+ * semantics. Therefore the expression
+ * <code>1.isInstanceOf[String]</code> will return
+ * <code>false</code>, while the expression
+ * <code>List(1).isInstanceOf[List[String]]</code> will return
+ * <code>true</code>. In the latter example, because the type
+ * argument is erased as part of compilation it is not possible to
+ * check whether the contents of the list are of the requested typed.
+ *
+ * @return <code>true</code> if the receiver object is an
+ * instance of erasure of type <code>T0</code>; <code>false</code> otherwise. */
+ """
+
+ comment(Any_hashCode) = """
+ /** Returns a hash code value for the object.
+ *
+ * <p>
+ * The default hashing algorithm is platform dependent.
+ *
+ * Note that it is allowed for two objects to have identical hash
+ * codes (<code>o1.hashCode.equals(o2.hashCode)</code>) yet not be
+ * equal (<code>o1.equals(o2)</code> returns <code>false</code>). A
+ * degenerate implementation could always return <code>0</code>.
+ * However, it is required that if two objects are equal
+ * (<code>o1.equals(o2)</code> returns <code>true</code>) that they
+ * have identical hash codes
+ * (<code>o1.hashCode.equals(o2.hashCode)</code>). Therefore, when
+ * overriding this method, be sure to verify that the behavior is
+ * consistent with the <code>equals</code> method.
+ * </p>
+ *
+ * <p>
+ * @return the hash code value for the object.
+ * </p> */
+ """
+
+ /*******************************************************************/
+ /* Documentation for AnyRef */
+
+ comment(AnyRefClass) = """
+ /** <p>
+ * Class <code>AnyRef</code> is the root class of all
+ * <em>reference types</em>.
+ * </p> */
+ """
+
+ comment(Object_==) = """
+ /** <code>o == arg0</code> is the same as <code>if (o eq null) arg0 eq null else o.equals(arg0)</code>.
+ * <p>
+ * @param arg0 the object to compare against this object for equality.
+ * @return <code>true</code> if the receiver object is equivalent to the argument; <code>false</code> otherwise.
+ * </p> */
+ """
+
+ comment(Object_ne) = """
+ /** <code>o.ne(arg0)</code> is the same as <code>!(o.eq(arg0))</code>.
+ * <p>
+ * @param arg0 the object to compare against this object for reference dis-equality.
+ * @return <code>false</code> if the argument is not a reference to the receiver object; <code>true</code> otherwise.
+ * </p> */
+ """
+
+
+ comment(Object_finalize) = """
+ /** This method is called by the garbage collector on the receiver object when garbage
+ * collection determines that there are no more references to the object.
+ * <p>
+ * The details of when and if the <code>finalize</code> method are
+ * invoked, as well as the interaction between <code>finalize</code>
+ * and non-local returns and exceptions, are all platform dependent.
+ * </p> */
+ """
+
+ comment(Object_clone) = """
+ /** This method creates and returns a copy of the receiver object.
+ *
+ * <p>
+ * The default implementation of the <code>clone</code> method is platform dependent.
+ *
+ * @return a copy of the receiver object.
+ * </p> */
+ """
+
+ comment(Object_getClass) = """
+ /** Returns a representation that corresponds to the dynamic class of the receiver object.
+ *
+ * <p>
+ * The nature of the representation is platform dependent.
+ *
+ * @return a representation that corresponds to the dynamic class of the receiver object.
+ * </p> */
+ """
+
+ comment(Object_notify) = """
+ /** Wakes up a single thread that is waiting on the receiver object's monitor. */
+ """
+
+ comment(Object_notifyAll) = """
+ /** Wakes up all threads that are waiting on the receiver object's monitor. */
+ """
+
+ comment(Object_eq) = """
+ /** This method is used to test whether the argument (<code>arg0</code>) is a reference to the
+ * receiver object (<code>this</code>).
+ *
+ * <p>
+ * The <code>eq</code> method implements an
+ * <a href="http://en.wikipedia.org/wiki/Equivalence_relation">equivalence relation</a> on non-null instances of
+ * <code>AnyRef</code>:
+ * <ul>
+ * <li>It is reflexive: for any non-null instance <code>x</code> of type <code>AnyRef</code>,
+ * <code>x.eq(x)</code> returns <code>true</code>.</li>
+ * <li>It is symmetric: for any non-null instances <code>x</code> and <code>y</code> of type
+ * <code>AnyRef</code>, <code>x.eq(y)</code> returns <code>true</code> if and only
+ * if <code>y.eq(x)</code> returns <code>true</code>.</li>
+ * <li>It is transitive: for any non-null instances
+ * <code>x</code>, <code>y</code>, and <code>z</code> of type <code>AnyRef</code>
+ * if <code>x.eq(y)</code> returns <code>true</code> and
+ * <code>y.eq(z)</code> returns
+ * <code>true</code>, then <code>x.eq(z)</code> returns <code>true</code>.</li>
+ * </ul>
+ * Additionally, the <code>eq</code> method has three other properties.
+ * <ul>
+ * <li>It is consistent: for any non-null instances <code>x</code> and <code>y</code> of type <code>AnyRef</code>,
+ * multiple invocations of <code>x.eq(y)</code> consistently returns <code>true</code>
+ * or consistently returns <code>false</code>.</li>
+ * <li>For any non-null instance <code>x</code> of type <code>AnyRef</code>,
+ * <code>x.eq(null)</code> and <code>null.eq(x)</code> returns <code>false</code>.</li>
+ * <li><code>null.eq(null)</code> returns <code>true</code>.</li>
+ *</ul>
+ *</p>
+ *
+ * <p> When overriding the <code>equals</code> or
+ * <code>hashCode</code> methods, it is important to ensure that
+ * their behavior is consistent with reference equality. Therefore,
+ * if two objects are references to each other (<code>o1 eq
+ * o2</code>), they should be equal to each other (<code>o1 ==
+ * o2</code>) and they should hash to the same value
+ * (<code>o1.hashCode == o2.hashCode</code>).</p>
+ *
+ * @param arg0 the object to compare against this object for reference equality.
+ * @return <code>true</code> if the argument is a reference to the receiver object; <code>false</code> otherwise.
+ * </p> */
+ """
+
+ /*******************************************************************/
+
+ comment(AnyValClass) = """
+ /** <p>
+ * Class <code>AnyVal</code> is the root class of all
+ * <em>value types</em>.
+ * </p>
+ * <p>
+ * <code>AnyVal</code> has a fixed number subclasses, which
+ * describe values which are not implemented as objects in the
+ * underlying host system.
+ * </p>
+ * <p>
+ * Classes <a href="Double.html"><code>Double</code></a>,
+ * <a href="Float.html"><code>Float</code></a>,
+ * <a href="Long.html"><code>Long</code></a>,
+ * <a href="Int.html"><code>Int</code></a>,
+ * <a href="Char.html"><code>Char</code></a>,
+ * <a href="Short.html"><code>Short</code></a>, and
+ * <a href="Byte.html"><code>Byte</code></a> are together called
+ * <em>numeric value types</em>.
+ * Classes <a href="Byte.html"><code>Byte</code></a>,
+ * <a href="Short.html"><code>Short</code></a>, or
+ * <a href="Char.html"><code>Char</code></a>
+ * are called <em>subrange types</em>. Subrange types, as well as
+ * <a href="Int.html"><code>Int</code></a> and
+ * <a href="Long.html"><code>Long</code></a> are called
+ * <em>integer types</em>, whereas
+ * <a href="Float.html"><code>Float</code></a> and
+ * <a href="Double.html"><code>Double</code></a> are called
+ * <em>floating point types</em>.
+ * </p> */
+ """
+
+ comment(BooleanClass) = """
+ /** <p>
+ * Class <code>Boolean</code> has only two values: <code>true</code>
+ * and <code>false</code>.
+ * </p> */
+ """
+
+ comment(UnitClass) = """
+ /** <p>
+ * Class <code>Unit</code> has only one value: <code>()</code>.
+ * </p> */
+ """
+
+ List(ByteClass, CharClass, DoubleClass, LongClass, FloatClass, IntClass, ShortClass) foreach { sym =>
+ val maxValue = "MAX_" + sym.name.toString().toUpperCase()
+ val minValue = "MIN_" + sym.name.toString().toUpperCase()
+ comment(sym) = """
+ /** <p>
+ * Class <code>""" + sym.name + """</code> belongs to the value
+ * classes whose instances are not represented as objects by the
+ * underlying host system. There is an implicit conversion from
+ * instances of <code>""" + sym.name + """</code> to instances of
+ * <a href="runtime/Rich""" + sym.name + """.html"><code>runtime.Rich""" + sym.name + """</code></a> which
+ * provides useful non-primitive operations. All value classes inherit
+ * from class <a href="AnyVal.html"><code>AnyVal</code></a>.
+ * </p>
+ * <p>
+ * Values <code>""" + maxValue + """</code> and <code>""" + minValue + """</code>
+ * are in defined in object <a href="Math$object.html">scala.Math</a>.
+ * </p> */
+ """
+ }
+
+ comment
+ }
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/TODO.txt b/src/compiler/scala/tools/nsc/doc/TODO.txt
new file mode 100644
index 0000000000..dbdca88eb5
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/TODO.txt
@@ -0,0 +1,19 @@
+= TODO in Scaladoc =
+
+== Model extractor ==
+
+
+
+== Parser ==
+
+ * Report more than one error per Scaladoc comment. This is caused by the reporter being used, and the fact that all errors are positioned on the documented symbol.
+ * Maintain position information, and use it in error messages (currently all positions are on symbol being documented)
+ * Parse wiki list syntax
+ * Parse wiki table syntax
+ * Parse URL links
+ * Parse symbol (class or method) links
+
+== HTML generator ==
+
+
+ \ No newline at end of file
diff --git a/src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala b/src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala
new file mode 100644
index 0000000000..8773c0f2c0
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/HtmlPage.scala
@@ -0,0 +1,150 @@
+/* NSC -- new Scala compiler
+ * Copyright 2007-2009 LAMP/EPFL
+ * @author David Bernard, Manohar Jonnalagedda
+ */
+
+package scala.tools.nsc
+package doc
+package html
+
+import model._
+import comment._
+
+import java.io.File
+import scala.xml.dtd.{DocType, PublicID}
+import xml.{Unparsed, XML, NodeSeq}
+
+/** An html page that is part of a Scaladoc site.
+ * @author David Bernard
+ * @author Gilles Dubochet */
+abstract class HtmlPage { thisPage =>
+
+ /** The path of this page, relative to the API site. `path.tail` is a list of folder names leading to this page (from
+ * closest package to one-above-root package), `path.head` is the file name of this page. Note that `path` has a
+ * length of at least one. */
+ def path: List[String]
+
+ /** The title of this page. */
+ protected def title: String
+
+ /** Additional header elements (links, scripts, meta tags, etc.) required for this page. */
+ protected def headers: NodeSeq
+
+ /** The body of this page. */
+ protected def body: NodeSeq
+
+ /** Writes this page as a file. The file's location is relative to the generator's site root, and the encoding is
+ * also defined by the generator.
+ * @param generator The generator that is writing this page. */
+ def writeFor(site: SiteFactory): Unit = {
+ val pageFile = new File(site.siteRoot, thisPage.path.reverse.mkString("/"))
+ val pageFolder = pageFile.getParentFile
+ if (!pageFolder.exists) pageFolder.mkdirs()
+ val doctype =
+ DocType("html", PublicID("-//W3C//DTD XHTML 1.1//EN", "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"), Nil)
+ val html =
+ <html>
+ <head>
+ <title>{ title }</title>
+ <meta http-equiv="content-type" content={ "text/html; charset=" + site.encoding }/>
+ <script type="text/javascript" src={ relativeLinkTo{List("jquery.js", "lib")} }></script>
+ { headers }
+ </head>
+ { body }
+ </html>
+ XML.save(pageFile.getPath, html, site.encoding, xmlDecl = false, doctype = doctype)
+ }
+
+ def templateToPath(tpl: TemplateEntity): List[String] = {
+ def downPacks(pack: Package): List[String] =
+ if (pack.isRootPackage) Nil else (pack.name :: downPacks(pack.inTemplate))
+ def downInner(nme: String, tpl: TemplateEntity): (String, Package) = {
+ tpl.inTemplate match {
+ case inPkg: Package => (nme + ".html", inPkg)
+ case inTpl => downInner(doName(inTpl) + "$" + nme, inTpl)
+ }
+ }
+ def doName(tpl: TemplateEntity): String =
+ tpl.name + (if (tpl.isObject) "$" else "")
+ val (file, pack) =
+ tpl match {
+ case p: Package => ("package.html", p)
+ case _ => downInner(doName(tpl), tpl)
+ }
+ file :: downPacks(pack)
+ }
+
+ /** A relative link from this page to some destination class entity.
+ * @param destEntity The class or object entity that the link will point to. */
+ def relativeLinkTo(destClass: TemplateEntity): String =
+ relativeLinkTo(templateToPath(destClass))
+
+ /** A relative link from this page to some destination page in the Scaladoc site.
+ * @param destPage The page that the link will point to. */
+ def relativeLinkTo(destPage: HtmlPage): String = {
+ relativeLinkTo(destPage.path)
+ }
+
+ /** A relative link from this page to some destination path.
+ * @param destPath The path that the link will point to. */
+ def relativeLinkTo(destPath: List[String]): String = {
+ def relativize(from: List[String], to: List[String]): List[String] = (from, to) match {
+ case (f :: fs, t :: ts) if (f == t) => // both paths are identical to that point
+ relativize(fs, ts)
+ case (fss, tss) =>
+ List.fill(fss.length - 1)("..") ::: tss
+ }
+ relativize(thisPage.path.reverse, destPath.reverse).mkString("/")
+ }
+
+ /** Transforms an optional comment into an styled HTML tree representing its body if it is defined, or into an empty
+ * node sequence if it is not. */
+ def commentToHtml(comment: Option[Comment]): NodeSeq =
+ (comment map (commentToHtml(_))) getOrElse NodeSeq.Empty
+
+ /** Transforms a comment into an styled HTML tree representing its body. */
+ def commentToHtml(comment: Comment): NodeSeq =
+ bodyToHtml(comment.body)
+
+ def bodyToHtml(body: Body): NodeSeq =
+ body.blocks flatMap (blockToHtml(_))
+
+ def blockToHtml(block: Block): NodeSeq = block match {
+ case Title(in, 1) => <h1>{ inlineToHtml(in) }</h1>
+ case Title(in, 2) => <h2>{ inlineToHtml(in) }</h2>
+ case Title(in, 3) => <h3>{ inlineToHtml(in) }</h3>
+ case Title(in, _) => <h4>{ inlineToHtml(in) }</h4>
+ case Paragraph(in) => <p>{ inlineToHtml(in) }</p>
+ case Code(data) => <p><code>{ Unparsed(data) }</code></p>
+ case UnorderedList(items) =>
+ <ul>{items map { i => <li>{ blockToHtml(i) }</li>}}</ul>
+ case OrderedList(items) =>
+ <ol>{items map { i => <li>{ blockToHtml(i) }</li>}}</ol>
+ case DefinitionList(items) =>
+ <dl>{items map { case (t, d) => <dt>{ inlineToHtml(t) }</dt><dd>{ blockToHtml(d) }</dd> } }</dl>
+ case HorizontalRule() =>
+ <hr/>
+ }
+
+ def inlineToHtml(inl: Inline): NodeSeq = inl match {
+ //case URLLink(url, text) => <a href={url}>{if(text.isEmpty)url else inlineSeqsToXml(text)}</a>
+ case Chain(items) => items flatMap (inlineToHtml(_))
+ case Italic(in) => <i>{ inlineToHtml(in) }</i>
+ case Bold(in) => <b>{ inlineToHtml(in) }</b>
+ case Underline(in) => <u>{ inlineToHtml(in) }</u>
+ case Superscript(in) => <sup>{ inlineToHtml(in) }</sup>
+ case Subscript(in) => <sub>{ inlineToHtml(in) }</sub>
+ case Link(raw) => Unparsed(raw)//error("link not supported") // TODO
+ case Monospace(text) => <code>{ Unparsed(text) }</code>
+ case Text(text) => Unparsed(text)
+ }
+
+ def typeToHtml(tpe: model.TypeEntity): NodeSeq = {
+
+ // TODO: Generate links using tpe's refEntity map
+
+ xml.Text(tpe.name)
+
+ }
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/html/SiteFactory.scala b/src/compiler/scala/tools/nsc/doc/html/SiteFactory.scala
new file mode 100644
index 0000000000..a605002b64
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/SiteFactory.scala
@@ -0,0 +1,79 @@
+/* NSC -- new Scala compiler
+ * Copyright 2007-2009 LAMP/EPFL
+ * @author David Bernard, Manohar Jonnalagedda
+ */
+
+package scala.tools.nsc
+package doc
+package html
+
+import reporters.Reporter
+import model._
+
+import java.io.{FileOutputStream, File}
+import scala.collection._
+
+/** A class that can generate Scaladoc sites to some fixed root folder.
+ * @author David Bernard
+ * @author Gilles Dubochet */
+class SiteFactory(val reporter: Reporter, val settings: Settings) {
+
+ /** The character encoding to be used for generated Scaladoc sites. This value is currently always UTF-8. */
+ def encoding: String = "UTF-8"
+
+ /** The character encoding to be used for generated Scaladoc sites. This value is defined by the generator's
+ * settings. */
+ def siteRoot: File = new File(settings.outdir.value)
+
+ /** Generates the Scaladoc site for a model into the site toot. A scaladoc site is a set of HTML and related files
+ * that document a model extracted from a compiler run.
+ * @param model The model to generate in the form of a sequence of packages. */
+ def generate(modelRoot: Package): Unit = {
+
+ def copyResource(subPath: String) {
+ val buf = new Array[Byte](1024)
+ val in = getClass.getResourceAsStream("/scala/tools/nsc/doc/html/resource/" + subPath)
+ assert(in != null)
+ val dest = new File(siteRoot, subPath)
+ dest.getParentFile.mkdirs()
+ val out = new FileOutputStream(dest)
+ try {
+ var len = 0
+ while ({len = in.read(buf); len != -1})
+ out.write(buf, 0, len)
+ }
+ finally {
+ in.close()
+ out.close()
+ }
+ }
+
+ copyResource("lib/jquery.js")
+ copyResource("lib/index.css")
+ copyResource("lib/index.js")
+ copyResource("lib/template.css")
+ copyResource("lib/template.js")
+ copyResource("lib/class.png")
+ copyResource("lib/class_big.png")
+ copyResource("lib/object.png")
+ copyResource("lib/object_big.png")
+ copyResource("lib/trait.png")
+ copyResource("lib/trait_big.png")
+ copyResource("lib/package.png")
+ copyResource("lib/package_big.png")
+
+ new page.Index(modelRoot) writeFor this
+
+ val written = mutable.HashSet.empty[DocTemplateEntity]
+
+ def writeTemplate(tpl: DocTemplateEntity): Unit = {
+ new page.Template(tpl) writeFor this
+ written += tpl
+ tpl.templates filter { t => !(written contains t) } map (writeTemplate(_))
+ }
+
+ writeTemplate(modelRoot)
+
+ }
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/html/page/Index.scala b/src/compiler/scala/tools/nsc/doc/html/page/Index.scala
new file mode 100644
index 0000000000..5ad0005679
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/page/Index.scala
@@ -0,0 +1,77 @@
+/* NSC -- new Scala compiler
+ * Copyright 2007-2009 LAMP/EPFL
+ * @author David Bernard, Manohar Jonnalagedda
+ */
+
+package scala.tools.nsc
+package doc
+package html
+package page
+
+import model._
+
+import scala.collection._
+import scala.xml._
+
+class Index(modelRoot: Package) extends HtmlPage {
+
+ def path = List("index.html")
+
+ def title = "Scaladoc: all classes and objects"
+
+ def headers =
+ <xml:group>
+ <style type="text/css">
+ @import url({ relativeLinkTo(List("index.css", "lib")) }) screen;
+ </style>
+ <script type="text/javascript" src={ relativeLinkTo{List("index.js", "lib")} }></script>
+ </xml:group>
+
+ def body =
+ <body>
+ <div id="browser">
+ <input id="quickflt" type="text"/>
+ <div id="tpl">{
+ def packageElem(pack: model.Package): NodeSeq = {
+ <xml:group>
+ { if (!pack.isRootPackage)
+ <h3><a class="tplshow" href={ relativeLinkTo(pack) }>{ pack.qualifiedName }</a></h3>
+ else NodeSeq.Empty
+ }
+ <ol class="templates">{
+ val tpls: Map[String, Seq[DocTemplateEntity]] =
+ (pack.templates filter (!_.isPackage)) groupBy (_.name)
+ for (tn <- tpls.keySet.toSeq sortWith (_.toLowerCase < _.toLowerCase)) yield {
+ val entries = tpls(tn) sortWith { (less, more) => less.isTrait || more.isObject }
+ def doEntry(ety: DocTemplateEntity, firstEty: Boolean): NodeSeq = {
+ val etyTpe =
+ if (ety.isTrait) "trait" else if (ety.isClass) "class" else if (ety.isObject) "object" else "package"
+ <a class="tplshow" href={ relativeLinkTo(ety) }>
+ { if (firstEty) Text(packageQualifiedName(ety)) else NodeSeq.Empty }
+ <span class={ etyTpe }>({ Text(etyTpe) })</span>
+ </a>
+ }
+ <li title={ entries.head.qualifiedName }>{
+ doEntry(entries.head, true) ++ (entries.tail map (doEntry(_, false)))
+ }</li>
+ }
+ }</ol>
+ <ol class="packages"> {
+ for (sp <- pack.packages sortWith (_.name.toLowerCase < _.name.toLowerCase)) yield
+ <li>{ packageElem(sp) }</li>
+ }</ol>
+ </xml:group>
+ }
+ packageElem(modelRoot)
+ }</div>
+ </div>
+ <div id="content">
+ <iframe src={ relativeLinkTo{List("package.html")} }/>
+ </div>
+ </body>
+
+
+ def packageQualifiedName(ety: DocTemplateEntity): String =
+ if (ety.inTemplate.isPackage) ety.name else (packageQualifiedName(ety.inTemplate) + "." + ety.name)
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/html/page/Source.scala b/src/compiler/scala/tools/nsc/doc/html/page/Source.scala
new file mode 100644
index 0000000000..ff42bbb9d0
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/page/Source.scala
@@ -0,0 +1,129 @@
+/* NSC -- new Scala compiler
+ * Copyright 2007-2009 LAMP/EPFL
+ * @author David Bernard, Manohar Jonnalagedda
+ */
+
+package scala.tools.nsc
+package doc
+package html
+package page
+
+import model._
+import comment._
+import xml.{NodeSeq, Unparsed}
+import java.io.File
+
+class Source(sourceFile: File) extends HtmlPage {
+
+ val path = List("source.html")
+
+ val title = "Scaladoc: page source"
+
+ val headers =
+ NodeSeq.Empty
+
+ val body =
+ <body>
+ <h1>Page source is not implmented yet</h1>
+ </body>
+
+ /*
+
+
+ def readTextFromSrcDir(subPath: String) :Option[String] = {
+ readTextFromFile(new File(sourceDir, subPath))
+ }
+
+ def readTextFromFile(f : File) :Option[String] = {
+ if (f.exists) {
+ Some(Source.fromFile(f)(Codec.default).getLines().mkString(""))
+ } else {
+ None
+ }
+ }
+
+
+ def writeTextToFile(f : File, txt : String, header: Option[String], footer: Option[String]) {
+ val out = new FileOutputStream(f)
+ try {
+ val enc = "UTF-8"
+ header.foreach(s => out.write(s.getBytes(enc)))
+ out.write(txt.getBytes(enc))
+ footer.foreach(s => out.write(s.getBytes(enc)))
+ } finally {
+ try {
+ out.close()
+ } catch {
+ case _ => //ignore
+ }
+ }
+ }
+
+ trait SourceHtmlizer {
+ def scalaToHtml(src :File) : Option[File]
+ }
+
+ lazy val sourceHtmlizer : SourceHtmlizer = {
+ if (cfg.htmlizeSource) {
+ new SourceHtmlizer {
+
+ val inDir: File = cfg.sourcedir
+ val outDir: File = cfg.outputdir
+
+ private def relativize(uri: URI, from: URI) = linkHelper.relativize(uri, from).getOrElse("__notFound__" + uri.getPath)
+
+ def header(dest: URI) = Some("""
+ <html>
+ <head>
+ <link href='""" + relativize(new URI("site:/_highlighter/SyntaxHighlighter.css"), dest) + """' rel='stylesheet' type='text/css'/>
+ <script language='javascript' src='""" + relativize(new URI("site:/_highlighter/shAll.js"), dest) + """'></script>
+ </head>
+ <body>
+ <pre name="code" class="scala" style="width:100%">
+ """)
+
+ def footer(dest: URI) = Some("""</pre>
+ <script language='javascript'>
+ dp.SyntaxHighlighter.ClipboardSwf = '""" + relativize(new URI("site:/_highlighter/clipboard.swf"), dest) + """';
+ dp.SyntaxHighlighter.HighlightAll('code');
+ </script>
+ </body>
+ </html>
+ """)
+
+ //TODO: escape the source code
+ def scalaToHtml(src :File) = {
+ val dest = new File(outDir, fileHelper.relativePathUnderDir(src, inDir) + ".html")
+ if (!dest.exists || dest.lastModified < src.lastModified) {
+
+ //we need to verify whether the directory we are trying to write to has already been created or not
+ if(!dest.getParentFile.exists) dest.getParentFile.mkdirs
+
+ val uri = linkHelper.uriFor(dest).get
+ var txt = fileHelper.readTextFromFile(src).getOrElse("")
+ txt = txt.replace("<", "&lt;")
+ fileHelper.writeTextToFile(dest, txt, header(uri), footer(uri))
+ }
+ Some(dest)
+ }
+
+ def copyResources() {
+ val loader = this.getClass().getClassLoader()
+ val buf = new Array[Byte](1024)
+ def copyResource(name: String) = fileHelper.copyResource("/scala/tools/nsc/doc/html/resource/", name, outDir, loader, buf)
+ copyResource("_highlighter/clipboard.swf")
+ copyResource("_highlighter/shAll.js")
+ copyResource("_highlighter/SyntaxHighlighter.css")
+ }
+
+ copyResources()
+ }
+ } else {
+ new SourceHtmlizer {
+ def scalaToHtml(src :File) = None
+ }
+ }
+ }
+ */
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/html/page/Template.scala b/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
new file mode 100644
index 0000000000..20293d1ff0
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
@@ -0,0 +1,214 @@
+/* NSC -- new Scala compiler
+ * Copyright 2007-2009 LAMP/EPFL
+ * @author David Bernard, Manohar Jonnalagedda
+ */
+
+package scala.tools.nsc
+package doc
+package html
+package page
+
+import model._
+
+import scala.xml.{NodeSeq, Text}
+import scala.collection.mutable.HashSet
+
+class Template(tpl: DocTemplateEntity) extends HtmlPage {
+
+ val path =
+ templateToPath(tpl)
+
+ val title = "Scaladoc for " + tpl.qualifiedName
+
+ val headers =
+ <xml:group>
+ <style type="text/css">
+ @import url({ relativeLinkTo(List("template.css", "lib")) }) screen;
+ </style>
+ <script type="text/javascript" src={ relativeLinkTo{List("template.js", "lib")} }></script>
+ </xml:group>
+
+ val valueMembers =
+ (tpl.methods ::: tpl.values ::: (tpl.templates filter { tpl => tpl.isObject || tpl.isPackage })) sortWith (_.name < _.name)
+
+ val typeMembers =
+ (tpl.abstractTypes ::: tpl.aliasTypes ::: (tpl.templates filter { tpl => tpl.isTrait || tpl.isClass })) sortWith (_.name < _.name)
+
+ val constructors = (tpl match {
+ case cls: Class => cls.constructors
+ case _ => Nil
+ }) sortWith (_.name < _.name)
+
+ val body =
+ <body class={ if (tpl.isTrait || tpl.isClass) "type" else "value" }>
+
+ { if (tpl.isRootPackage || tpl.inTemplate.isRootPackage) NodeSeq.Empty
+ else <p id="owner">{ tpl.inTemplate.qualifiedName }</p>
+ }
+
+ <div id="definition">
+ <img src={ relativeLinkTo(List(kindToString(tpl) + "_big.png", "lib")) }/>
+ <h1>{ if (tpl.isRootPackage) "root package" else tpl.name }</h1>
+ </div>
+
+ { signature(tpl, true) }
+
+ { if (tpl.comment.isEmpty) NodeSeq.Empty else
+ <div id="comment">{ commentToHtml(tpl.comment) }</div>
+ }
+
+ <div id="template">
+
+ { if (tpl.linearization.isEmpty) NodeSeq.Empty else
+ <div id="mbrsel">
+ <div id="ancestors">
+ <h3>Inherits</h3>
+ <ol>{ tpl.linearization map { wte => <li class="in" name={ wte.qualifiedName }>{ wte.name }</li> } }</ol>
+ </div>
+ </div>
+ }
+
+ { if (typeMembers.isEmpty) NodeSeq.Empty else
+ <div id="types" class="members">
+ <h3>Type Members</h3>
+ <ol>{ typeMembers map (memberToHtml(_)) }</ol>
+ </div>
+ }
+
+ { if (valueMembers.isEmpty) NodeSeq.Empty else
+ <div id="values" class="members">
+ <h3>Value Members</h3>
+ <ol>{ valueMembers map (memberToHtml(_)) }</ol>
+ </div>
+ }
+
+ { if (constructors.isEmpty) NodeSeq.Empty else
+ <div id="constructors" class="members">
+ <h3>Instance constructors</h3>
+ <ol>{ constructors map (memberToHtml(_)) }</ol>
+ </div>
+ }
+
+ </div>
+
+ </body>
+
+ def memberToHtml(mbr: MemberEntity): NodeSeq = {
+ val attributes: List[comment.Body] = Nil
+ <li name={ mbr.definitionName }>
+ { signature(mbr, false) }
+ { val prs: List[ParameterEntity] = mbr match {
+ case cls: Class if cls.isCaseClass => cls.typeParams ::: (cls.primaryConstructor map (_.valueParams.flatten)).toList.flatten
+ case trt: Trait => trt.typeParams
+ case dfe: Def => dfe.typeParams ::: dfe.valueParams.flatten
+ case ctr: Constructor => ctr.valueParams.flatten
+ case _ => Nil
+ }
+ def paramCommentToHtml(pr: ParameterEntity) =
+ if (pr.comment.isEmpty) NodeSeq.Empty else
+ <li class={ if (pr.isTypeParam) "tparam" else "param" } name={ pr.name }>{
+ commentToHtml(pr.comment.get)
+ }</li>
+ if (prs.isEmpty) NodeSeq.Empty else
+ <ol class="paramcmts">{ prs map (paramCommentToHtml(_)) }</ol>
+ }
+ { val fvs: List[comment.Paragraph] = mbr.visibility.toList ::: mbr.flags
+ if (fvs.isEmpty) NodeSeq.Empty else
+ <ol class="attributes">{ fvs map { fv => <li>{ inlineToHtml(fv.text) }</li> } }</ol>
+
+ }
+ { if (mbr.comment.isEmpty) NodeSeq.Empty else
+ <div class="comment">{ commentToHtml(mbr.comment) }</div>
+ }
+ </li>
+ }
+
+ def kindToString(mbr: MemberEntity): String = mbr match {
+ case tpl: DocTemplateEntity =>
+ if (tpl.isPackage) "package" else if (tpl.isClass) "class" else if (tpl.isTrait) "trait" else "object"
+ case ctor: Constructor => "new"
+ case tme: MemberEntity =>
+ if (tme.isDef) "def" else if (tme.isVal) "val" else if (tme.isVar) "var" else "type"
+ }
+
+ def boundsToString(hi: Option[TypeEntity], lo: Option[TypeEntity]): String = {
+ def bound0(bnd: Option[TypeEntity], pre: String): String = bnd match {
+ case None => ""
+ case Some(tpe) => pre + typeToHtml(tpe)
+ }
+ bound0(hi, " ⊲ ") + bound0(lo, " ⊳ ")
+ }
+
+ /** name, tparams, params, result */
+ def signature(mbr: MemberEntity, isSelf: Boolean): NodeSeq = {
+ val inside: NodeSeq =
+ <xml:group>
+ <div class="kind">{ kindToString(mbr) }</div>
+ <div class="symbol">
+ <span class="name">{ if (mbr.isConstructor) tpl.name else mbr.name }</span>
+ { def tparamsToHtml(tpss: List[TypeParam]): NodeSeq =
+ if (tpss.isEmpty) NodeSeq.Empty else {
+ def tparam0(tp: TypeParam): NodeSeq =
+ <span name={ tp.name }>{
+ tp.variance + tp.name + boundsToString(tp.hi, tp.lo)
+ }</span>
+ def tparams0(tpss: List[TypeParam]): NodeSeq = tpss match {
+ case tp :: Nil => tparam0(tp)
+ case tp :: tps => tparam0(tp) ++ Text(",") ++ tparams0(tps)
+ }
+ <span class="tparams">[{ tparams0(tpss) }]</span>
+ }
+ mbr match {
+ case trt: Trait => tparamsToHtml(trt.typeParams)
+ case dfe: Def => tparamsToHtml(dfe.typeParams)
+ case _ => NodeSeq.Empty
+ }
+ }
+ { def paramsToHtml(vlsss: List[List[ValueParam]]): NodeSeq = {
+ def param0(vl: ValueParam): NodeSeq =
+ <span name={ vl.name }>{
+ vl.name + ": " + typeToHtml(vl.resultType)
+ }</span>
+ def params0(vlss: List[ValueParam]): NodeSeq = vlss match {
+ case Nil => NodeSeq.Empty
+ case vl :: Nil => param0(vl)
+ case vl :: vls => param0(vl) ++ Text(",") ++ params0(vls)
+ }
+ vlsss map { vlss => <span class="params">({ params0(vlss) })</span> }
+ }
+ mbr match {
+ case cls: Class if cls.isCaseClass => paramsToHtml(cls.primaryConstructor.get.valueParams)
+ case ctr: Constructor => paramsToHtml(ctr.valueParams)
+ case dfe: Def => paramsToHtml(dfe.valueParams)
+ case _ => NodeSeq.Empty
+ }
+ }
+ { mbr match {
+ case tpl: DocTemplateEntity if (!tpl.isPackage) =>
+ tpl.parentType match {
+ case Some(st) => <span class="result">extends<span>{ typeToHtml(st) }</span></span>
+ case None =>NodeSeq.Empty
+ }
+ case tme: MemberEntity if (tme.isDef || tme.isVal || tme.isVar) =>
+ <span class="result">:<span>{ typeToHtml(tme.resultType) }</span></span>
+ case abt: AbstractType =>
+ val b2s = boundsToString(abt.hi, abt.lo)
+ if (b2s != "")
+ <span class="result"><span>{ b2s }</span></span>
+ else NodeSeq.Empty
+ case alt: AliasType =>
+ <span class="result">=<span>{ typeToHtml(alt.alias) }</span></span>
+ case _ => NodeSeq.Empty
+ }
+ }
+ </div>
+ </xml:group>
+ mbr match {
+ case dte: DocTemplateEntity if !isSelf =>
+ <a class="signature" href={ relativeLinkTo(dte) }>{ inside }</a>
+ case _ =>
+ <div class="signature">{ inside }</div>
+ }
+ }
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/index.html b/src/compiler/scala/tools/nsc/doc/html/resource/index.html
new file mode 100644
index 0000000000..7b86491ad9
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/index.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <title>Scaladoc</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <script type="text/javascript" src="lib/jquery.js"></script>
+ <style type="text/css">
+ @import url("lib/index.css") screen;
+ </style>
+ <script type="text/javascript" src="lib/index.js"></script>
+ </head>
+ <body>
+ <div id="browser">
+ <input id="quickflt" type="text"/>
+ <div id="tpl">
+ <ol class="packages">
+ <li>
+ <h3><a class="tplshow" href="scala/collection/package.html">scala.collection</a></h3>
+ <ol class="templates">
+ <li title="scala.collection.BitSet">
+ <a class="tplshow" href="scala/collection/BitSet.html">BitSet <span class="class">(class)</span></a>
+ <a class="tplshow" href="scala/collection/BitSet$.html"><span class="object">(object)</span></a>
+ </li>
+ <li title="scala.collection.BufferedIterator">
+ <a class="tplshow" href="scala/collection/BufferedIterator.html">BufferedIterator <span class="trait">(trait)</span></a>
+ </li>
+ <li title="scala.collection.DefaultMap">
+ <a class="tplshow" href="scala/collection/DefaultMap$.html">DefaultMap <span class="class">(object)</span></a>
+ </li>
+ <li title="scala.collection.Iterable">
+ <a class="tplshow" href="scala/collection/Iterable.html">Iterable <span class="class">(class)</span></a>
+ <a class="tplshow" href="scala/collection/Iterable$.html"><span class="object">(object)</span></a>
+ </li>
+ </ol>
+ <ol class="packages">
+ <li>
+ <h3>scala.collection.mutable</h3>
+ <ol class="templates">
+ <li title="scala.collection.mutable.DefaultMap">
+ <a class="tplshow" href="scala/collection/DefaultMap$.html">DefaultMap <span class="class">(object)</span></a>
+ </li>
+ <li title="scala.collection.mutable.Iterable">
+ <a class="tplshow" href="scala/collection/Iterable.html">Iterable <span class="class">(class)</span></a>
+ <a class="tplshow" href="scala/collection/Iterable$.html"><span class="object">(object)</span></a>
+ </li>
+ <li title="scala.collection.mutable.Iterable">
+ <a class="tplshow" href="scala/collection/Iterable.html">Iterable <span class="class">(class)</span></a>
+ <a class="tplshow" href="scala/collection/Iterable$.html"><span class="object">(object)</span></a>
+ </li>
+ <li title="scala.collection.mutable.Truc">
+ <a class="tplshow" href="scala/collection/Truc.html">Truc <span class="class">(class)</span></a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <h3>scala.collection.immutable</h3>
+ <ol class="templates">
+ <li class="template" title="scala.collection.DefaultMap">
+ <a class="tplshow" href="scala/collection/DefaultMap$.html">DefaultMap <span class="class">(object)</span></a>
+ </li>
+ <li class="template" title="scala.collection.Iterable">
+ <a class="tplshow" href="scala/collection/Iterable.html">Iterable <span class="class">(class)</span></a>
+ <a class="tplshow" href="scala/collection/Iterable$.html"><span class="object">(object)</span></a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div id="content">
+ <iframe src="template.html"></iframe>
+ </div>
+ </body>
+</html>
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/class.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/class.png
new file mode 100644
index 0000000000..c6e3841e53
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/class.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/class_big.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/class_big.png
new file mode 100644
index 0000000000..1969cff9e2
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/class_big.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/index.css b/src/compiler/scala/tools/nsc/doc/html/resource/lib/index.css
new file mode 100644
index 0000000000..f9cd1f9ade
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/index.css
@@ -0,0 +1,91 @@
+* {
+ color: black;
+ text-decoration: none;
+ font-size: inherit;
+ font-family: sans-serif;
+ border-width: 0px;
+ padding: 0px;
+ margin: 0px;
+}
+
+#browser {
+ top: 0px;
+ left: 0px;
+ bottom: 0px;
+ width: 300px;
+ display: block;
+ position: fixed;
+ overflow: auto;
+}
+
+#quickflt {
+ height: 22px;
+ right: 0px;
+ left: 0px;
+ top: 0px;
+ position: absolute;
+ display: block;
+ font-weight: bold;
+ color: #993300;
+ padding: 5px;
+ font-size: 12px;
+ background-color: white;
+}
+
+#tpl {
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ top: 30px;
+ position: absolute;
+ display: block;
+}
+
+#tpl h3 {
+ background-color: #142556;
+ color: white;
+ font-weight: bold;
+ padding: 2px;
+ display: block;
+ font-size: 14px;
+ border-bottom-color: white;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+}
+
+#tpl h3 a {
+ color: white;
+}
+
+#tpl ol > li {
+ display: block;
+ font-size: 14px;
+ background-color: #cccccc;
+ border-bottom-color: white;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+}
+
+#tpl ol > li .icon {
+ bottom: -2px;
+ position: relative;
+}
+
+#content {
+ border-left-width: 1px;
+ border-left-color: black;
+ border-left-style: solid;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ top: 0px;
+ position: fixed;
+ margin-left: 300px;
+ display: block;
+}
+
+#content > iframe {
+ display: block;
+ height: 100%;
+ width: 100%;
+}
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/index.js b/src/compiler/scala/tools/nsc/doc/html/resource/lib/index.js
new file mode 100644
index 0000000000..4ea93c74f1
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/index.js
@@ -0,0 +1,44 @@
+$(document).ready(function(){
+ cleanPackage($("#tpl"));
+ $("#tpl ol > li span.class").replaceWith("<img class='icon' src='lib/class.png'/>");
+ $("#tpl ol > li span.object").replaceWith("<img class='icon' src='lib/object.png'/>");
+ $("#tpl ol > li span.trait").replaceWith("<img class='icon' src='lib/trait.png'/>");
+ $("#tpl ol > li span.package").replaceWith("<img class='icon' src='lib/package.png'/>");
+ $("#tpl a.tplshow").click(function(event){
+ $("#content>iframe").attr("src", event.currentTarget.href);
+ return false;
+ });
+ $("#quickflt").focus(function(event) {
+ $("#quickflt").select();
+ });
+ $("#quickflt").keyup(function(event) {
+ var b = $("#quickflt").attr("value");
+ $("#tpl ol.templates > li").each(function(){
+ var a = $(this).attr("title");
+ if (a == "" || a.indexOf(b) >= 0) {
+ $(this).show();
+ $(this).removeClass("hide");
+ }
+ else {
+ $(this).addClass("hide");
+ $(this).hide();
+ };
+ });
+ cleanPackage($("#tpl"));
+ });
+});
+
+function cleanPackage(pack) {
+ $("> ol.packages > li", pack).each(function(){ cleanPackage($(this)); });
+ if ($("> ol > li:not(.hide)", pack).length > 0) {
+ pack.show();
+ pack.removeClass("hide");
+ }
+ else {
+ pack.addClass("hide");
+ pack.hide();
+ };
+ if ($("> ol.templates > li:not(.hide)", pack).length > 0) { $("> h3", pack).show(); }
+ else { $("> h3", pack).hide(); };
+ return false;
+} \ No newline at end of file
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.js b/src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.js
new file mode 100644
index 0000000000..b1ae21d8b2
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.js
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/object.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/object.png
new file mode 100644
index 0000000000..886cd5c7c3
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/object.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/object_big.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/object_big.png
new file mode 100644
index 0000000000..0a483cacf5
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/object_big.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/old.css b/src/compiler/scala/tools/nsc/doc/html/resource/lib/old.css
new file mode 100644
index 0000000000..d3b7ae90ba
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/old.css
@@ -0,0 +1,206 @@
+@import "reset.css";
+
+/* Javadoc style sheet */
+
+/* Define colors, fonts and other style attributes here to override the defaults */
+
+/* Page background color */
+body { background-color: #FFFFFF }
+
+a:link.selfref, a:visited.selfref {
+ color: #555 !important;
+}
+
+a:link, a:visited {
+ font-family: sans-serif;
+ color:#000099;
+ text-decoration: none;
+}
+
+a:active, a:hover {
+ color:#990000;
+ text-decoration: underline;
+}
+
+a.noref {
+ text-decoration: none;
+ cursor:default;
+}
+
+
+
+font.FrameItemFont {
+ font-size:10pt;
+}
+
+a:link.selfref, a:visited.selfref {
+ font-family: sans-serif;
+ color: #555 !important;
+ }
+
+.a td {
+ background: #ddd;
+ color: #000;
+ font-family: sans-serif;
+ }
+
+h1 {
+ font-size: 200%;
+ font-weight: bold;
+ text-align: center;
+}
+
+h2 {
+ font-family: sans-serif;
+ border:solid 1px #999999;
+ padding:10px;
+ background-color:#EEEEEE;
+ color:#990000;
+ font-family:sans-serif;
+ font-weight:bold;
+ /*line-height:2em;*/
+}
+
+h3 {
+ font-family: sans-serif;
+ border: 1px solid #555555;
+ background: #cccccc;
+ color:#990000;
+ padding:0.2em;
+}
+
+table {
+ border: none;
+ border-spacing: 2px;
+}
+
+
+tr.TableHeadingColor td {
+ font-family: sans-serif;
+ font-size: 9pt;
+ border: 1px solid #555555;
+}
+
+tr.TableRowColor td {
+ font-family: sans-serif;
+ font-size: 9pt;
+ border: 1px solid #999999;
+ cell-padding: 2px;
+}
+
+dt {
+ font-family: sans-serif;
+ font-size: 10pt;
+ color:#990000;
+ font-weight: bold;
+}
+
+dd {
+ font-size:10pt;
+ margin-top:4px;
+ margin-bottom:4px;
+}
+
+dd code {
+ color:#333333;
+ font-size:9pt;
+ font-size:normal;
+}
+
+/* Table colors */
+.TableHeadingColor { background: #cccccc; color:#990000}
+.TableSubHeadingColor { background: #bbbbbb; color:black;}
+.TableRowColor { background: #EEEEEE }
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont { font-weight: 900; font-size: normal; font-family: sans-serif; color:#FFFFFF }
+.FrameHeadingFont {
+ font-weight: bold;
+ font-size: normal;
+ font-family: sans-serif;
+ color:#990000;
+ line-height: 2em;
+ border: 1px solid #aaaaaa;
+ padding-left:4px;
+ padding-right:4px;
+ padding-top:2px;
+ padding-bottom:2px;
+}
+.FrameItemFont { font-size: normal; font-family: sans-serif; color:#FFFFFF }
+
+/* Example of smaller, sans-serif font in frames */
+/* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
+
+/* Navigation bar fonts and colors */
+
+.NavBar {
+ background-color:#ddd;
+ border:none;
+ padding: 2px;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 8pt;
+ color:#000000;
+ text-transform: uppercase;
+}
+.NavBar td {
+ white-space:nowrap;
+}
+td.NavBarCell1 {
+ text-align: left;
+}
+td.NavBarCell2 {
+ text-align: center;
+ font-weight: bold
+}
+td.NavBarCell3 {
+ text-align: right;
+
+}
+
+li, dd {
+ padding-left:2em;
+}
+
+.off {
+ font-weight: normal;
+ font-style: italic;
+}
+
+.isInherited {
+ background-color: #ede1e1;
+}
+
+.isDeprecated td.name {
+ text-decoration: line-through;
+}
+.apiComments {
+ margin-top : .3em;
+ margin-bottom: .5em;
+ margin-left: 2em;
+ font-size: 90%;
+}
+
+#intro .apiComments {
+ margin: 2em;
+}
+
+.detailsBtn {
+ font-size: 80%;
+ margin-left: 2em;
+}
+
+code.signature {
+}
+
+code.signature * {
+ font-family:inherit;
+}
+
+pre.codeAsDoc {
+ border: dashed 1px #909090;
+ padding: 5px;
+}
+
+td.name, td.type, td.remarks {
+ white-space:nowrap;
+}
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/old.js b/src/compiler/scala/tools/nsc/doc/html/resource/lib/old.js
new file mode 100644
index 0000000000..a884d9e661
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/old.js
@@ -0,0 +1,126 @@
+var showInherited = true;
+
+var toggleInherited= function() {
+ showInherited = !showInherited;
+ $.cookie('showInherited', showInherited);
+ updateInherited();
+}
+
+var updateInherited = function() {
+ $("input.filter_inherited_cb").each(function(){this.checked = showInherited});
+ if (showInherited) {
+ $("tr.isInherited").show();
+ } else {
+ $("tr.isInherited").hide();
+ }
+}
+
+$(document).ready(function(){
+ parent.document.title=document.title;
+ showInherited = $.cookie('showInherited');
+ updateInherited();
+ $("div.apiCommentsDetails").hide();
+});
+
+var selectPackage = function(name) {
+ if(parent.navFrame) {
+ parent.navFrame.selectPackage(name);
+ }
+}
+
+/**
+ * Cookie plugin
+ *
+ * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ */
+
+/**
+ * Create a cookie with the given name and value and other optional parameters.
+ *
+ * @example $.cookie('the_cookie', 'the_value');
+ * @desc Set the value of a cookie.
+ * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
+ * @desc Create a cookie with all available options.
+ * @example $.cookie('the_cookie', 'the_value');
+ * @desc Create a session cookie.
+ * @example $.cookie('the_cookie', null);
+ * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
+ * used when the cookie was set.
+ *
+ * @param String name The name of the cookie.
+ * @param String value The value of the cookie.
+ * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
+ * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
+ * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
+ * If set to null or omitted, the cookie will be a session cookie and will not be retained
+ * when the the browser exits.
+ * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
+ * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
+ * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
+ * require a secure protocol (like HTTPS).
+ * @type undefined
+ *
+ * @name $.cookie
+ * @cat Plugins/Cookie
+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
+ */
+
+/**
+ * Get the value of a cookie with the given name.
+ *
+ * @example $.cookie('the_cookie');
+ * @desc Get the value of a cookie.
+ *
+ * @param String name The name of the cookie.
+ * @return The value of the cookie.
+ * @type String
+ *
+ * @name $.cookie
+ * @cat Plugins/Cookie
+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
+ */
+jQuery.cookie = function(name, value, options) {
+ if (typeof value != 'undefined') { // name and value given, set cookie
+ options = options || {};
+ if (value === null) {
+ value = '';
+ options.expires = -1;
+ }
+ var expires = '';
+ if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
+ var date;
+ if (typeof options.expires == 'number') {
+ date = new Date();
+ date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
+ } else {
+ date = options.expires;
+ }
+ expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
+ }
+ // CAUTION: Needed to parenthesize options.path and options.domain
+ // in the following expressions, otherwise they evaluate to undefined
+ // in the packed version for some reason...
+ var path = options.path ? '; path=' + (options.path) : '';
+ var domain = options.domain ? '; domain=' + (options.domain) : '';
+ var secure = options.secure ? '; secure' : '';
+ document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
+ } else { // only name given, get cookie
+ var cookieValue = null;
+ if (document.cookie && document.cookie != '') {
+ var cookies = document.cookie.split(';');
+ for (var i = 0; i < cookies.length; i++) {
+ var cookie = jQuery.trim(cookies[i]);
+ // Does this cookie string begin with the name we want?
+ if (cookie.substring(0, name.length + 1) == (name + '=')) {
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
+ break;
+ }
+ }
+ }
+ return cookieValue;
+ }
+};
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/package.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/package.png
new file mode 100644
index 0000000000..c3eef6ea51
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/package.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/package_big.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/package_big.png
new file mode 100644
index 0000000000..5ab05cc6ac
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/package_big.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css
new file mode 100644
index 0000000000..39df51e4f2
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css
@@ -0,0 +1,228 @@
+* {
+ color: black;
+ text-decoration: none;
+ font-size: 11pt;
+ font-family: sans-serif;
+ border-width: 0px;
+ padding: 0px;
+ margin: 0px;
+}
+
+#owner {
+ padding: 12px;
+ font-size: 12pt;
+ position: relative;
+ display: block;
+}
+
+.value #owner {
+ background-color: #ced8f4;
+}
+
+.type #owner {
+ background-color: #f4cece;
+}
+
+#definition {
+ display: block;
+ padding: 6px;
+}
+
+#definition > img {
+ float: left;
+}
+
+#definition > h1 {
+ padding: 12px 0 12px 6px;
+ color: white;
+ font-size: 24pt;
+ display: inline-block;
+}
+
+.value #definition {
+ background-color: #142556;
+}
+
+.type #definition {
+ background-color: #561414;
+}
+
+.signature {
+ clear: both;
+ display: block;
+ background-color: #cccccc;
+}
+
+.value #definition + .signature {
+ background-color: #ced8f4;
+}
+
+.type #definition + .signature {
+ background-color: #f4cece;
+}
+
+.signature .kind {
+ font-weight: bold;
+ font-size: 12pt;
+ padding: 4px;
+ text-align: right;
+ float: left;
+ width: 72px;
+}
+
+.signature .symbol {
+ display: block;
+ font-size: 12pt;
+ margin-left: 80px;
+}
+
+.signature .name {
+ display: inline-block;
+ padding-bottom: 4px;
+ padding-top: 4px;
+ font-weight: bold;
+}
+
+.signature .tparams {
+ padding: 4px;
+}
+
+.signature .tparams > span {
+ margin-right: 2px;
+ margin-left: 2px;
+ padding: 4px;
+}
+
+.signature .params {
+ padding: 4px;
+}
+
+.signature .params > span {
+ margin-right: 2px;
+ margin-left: 2px;
+ padding: 4px;
+}
+
+.signature .result {
+ padding-left: 0px;
+ padding-bottom: 4px;
+ padding-right: 4px;
+ padding-top: 4px;
+}
+
+.signature .result span {
+ margin-right: 2px;
+ margin-left: 2px;
+ padding: 4px;
+}
+
+#comment > p {
+ margin: 8px;
+}
+
+#mbrsel {
+ padding: 4px;
+ background-color: #cccccc;
+ display: block;
+}
+
+#mbrsel > div > h3 {
+ padding: 4px;
+ display: block;
+ float: left;
+}
+
+#mbrsel > div > ol {
+ margin-left: 80px;
+}
+
+#mbrsel > div > ol > li {
+ display: block;
+ padding: 4px 8px 4px 8px;
+ font-weight: bold;
+ background-color: white;
+ display: inline-block;
+ cursor: crosshair;
+}
+
+#mbrsel > div > ol > li.in {
+ background-color: white;
+}
+
+#mbrsel > div > ol > li.out {
+ color: #888888;
+ background-color: #bbbbbb;
+}
+
+#template > div.members > ol {
+ background-color: white;
+}
+
+#values > h3 {
+ color: white;
+ padding: 4px;
+ background-color: #142556;
+ font-size: 12pt;
+ font-weight: bold;
+}
+
+#types > h3 {
+ padding: 4px;
+ color: white;
+ font-weight: bold;
+ font-size: 12pt;
+ background-color: #561414;
+}
+
+#constructors > h3 {
+ padding: 4px;
+ color: white;
+ font-weight: bold;
+ font-size: 12pt;
+ background-color: #000000;
+}
+
+.members > ol > li {
+ display: block;
+}
+
+.members .paramcmts {
+ margin-left: 80px;
+}
+
+.members .paramcmts > li.tparam {
+ background-color: #ffcc66;
+ display: none;
+}
+
+.members .paramcmts > li.param {
+ background-color: #cc99ff;
+ display: none;
+}
+
+.members .attributes {
+ border-bottom-color: black;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ margin-left: 80px;
+}
+
+.members .attributes > li {
+ padding: 2px;
+ font-size: 10pt;
+ display: inline-block;
+}
+
+.members .comment {
+ display: block;
+ margin-left: 80px;
+}
+
+.members .comment > p {
+ margin-left: 0px;
+ margin-bottom: 4px;
+ margin-right: 4px;
+ margin-top: 4px;
+ display: block;
+}
+
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
new file mode 100644
index 0000000000..4da8b28882
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
@@ -0,0 +1,46 @@
+$(document).ready(function(){
+ var prefilters = $("#ancestors > ol > li").filter(function(){
+ var name = $(this).attr("name");
+ return name == "scala.Any" || name == "scala.AnyRef";
+ });
+ prefilters.removeClass("in");
+ prefilters.addClass("out");
+ filterInherit();
+ $("#ancestors > ol > li").click(function(event){
+ if ($(this).hasClass("in")) {
+ $(this).removeClass("in");
+ $(this).addClass("out");
+ }
+ else if ($(this).hasClass("out")) {
+ $(this).removeClass("out");
+ $(this).addClass("in");
+ };
+ filterInherit();
+ });
+});
+
+function filterInherit() {
+ $("#mbrsel > div > ol > li.in").each(function(){
+ findMembersByOwner($(this).attr("name")).show();
+ });
+ $("#mbrsel > div > ol > li.out").each(function(){
+ findMembersByOwner($(this).attr("name")).hide();
+ });
+ return false;
+};
+
+function findMembersByOwner(owner0) {
+ return $(".members > ol > li").filter(function(){
+ var qualName1 = $(this).attr("name");
+ if (qualName1 == undefined) return false;
+ return owner0 == qualName1.slice(0, qualName1.indexOf("#"));
+ });
+};
+
+function findMemberByName(name0) {
+ return $(".members > ol > li").filter(function(){
+ var qualName1 = $(this).attr("name");
+ if (qualName1 == undefined) return false;
+ return name0 == qualName1.slice(qualName1.indexOf("#") + 1);
+ }).eq(0);
+}; \ No newline at end of file
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/trait.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/trait.png
new file mode 100644
index 0000000000..b1b043080a
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/trait.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/trait_big.png b/src/compiler/scala/tools/nsc/doc/html/resource/lib/trait_big.png
new file mode 100644
index 0000000000..63be0d7a3a
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/trait_big.png
Binary files differ
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/type_tags.ai b/src/compiler/scala/tools/nsc/doc/html/resource/lib/type_tags.ai
new file mode 100644
index 0000000000..5d5d25ee98
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/type_tags.ai
@@ -0,0 +1,5914 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 961 0 R/Pages 2 0 R/OCProperties<</D<</RBGroups[]/ON[37 0 R 65 0 R 78 0 R 90 0 R 116 0 R 129 0 R 141 0 R 167 0 R 180 0 R 192 0 R 218 0 R 237 0 R 255 0 R 287 0 R 306 0 R 324 0 R 356 0 R 375 0 R 393 0 R 425 0 R 444 0 R 462 0 R 480 0 R 515 0 R 534 0 R 552 0 R 570 0 R 605 0 R 624 0 R 642 0 R 660 0 R 695 0 R 699 0 R 718 0 R 735 0 R 753 0 R 785 0 R 789 0 R 808 0 R 825 0 R 843 0 R 878 0 R 882 0 R 901 0 R 918 0 R 936 0 R]/OFF[15 0 R 27 0 R]/Order 877 0 R>>/OCGs[15 0 R 27 0 R 37 0 R 65 0 R 78 0 R 90 0 R 116 0 R 129 0 R 141 0 R 167 0 R 180 0 R 192 0 R 218 0 R 237 0 R 255 0 R 287 0 R 306 0 R 324 0 R 356 0 R 375 0 R 393 0 R 425 0 R 444 0 R 462 0 R 480 0 R 515 0 R 534 0 R 552 0 R 570 0 R 605 0 R 624 0 R 642 0 R 660 0 R 695 0 R 699 0 R 718 0 R 735 0 R 753 0 R 785 0 R 789 0 R 808 0 R 825 0 R 843 0 R 878 0 R 882 0 R 901 0 R 918 0 R 936 0 R]>>/Type/Catalog>> endobj 961 0 obj <</Subtype/XML/Length 44678/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">Print</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xap:CreatorTool>Adobe Illustrator CS3</xap:CreatorTool>
+ <xap:CreateDate>2009-11-23T17:10:12+01:00</xap:CreateDate>
+ <xap:ModifyDate>2009-11-24T11:35:55+01:00</xap:ModifyDate>
+ <xap:MetadataDate>2009-11-24T11:35:55+01:00</xap:MetadataDate>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>208</xapGImg:height>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA0AEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXlX54yWv13ynbe&#xA;YJ5YPIt1eTJ5h9NiqPIsYeySUp+84F0cmm21eoXMrT3Uq+rown07kF+VVxocf5iarp3kyXn5TTTI&#xA;p9Sht3kmso9WaUIPRklHL4oVbcfap/kik9QSYAy+q/sYw57PYswm12KuxV2KuxV2KuxV2KuxVIfN&#xA;nnvyn5Sht5vMOopYrdOUt1KySu5UVYrHEsj8V2q1KCo8RlmPFKfIIMgOaK8t+aNB8y6YNT0O8W9s&#xA;i7RmRQyFXTqro4V0O4NGA2IPQjBkxygakFBB5JpkEuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KqdzbW91by21zEk9tMpjmhkUOjowoysrVBBGxBwg0qnp+m6dptollp1rDZWcVfTtreN&#xA;Yol5Es3FECqKsSTiZEmytIjArsVdirsVdirsVdirsVdirzfzhoWrWf5gv5xS2nu9MTy7caaYrFPW&#xA;uxdCYyxqkPCSvqep8LcSoI+OgpXJxyHDw9eK2EhvaL/LXTNZk1rzN5r1LTH0VfMMlobPTJuHrrFb&#xA;QEetNwJ4vK0p5IQGUjfBmkKjEG+G1iOZZ7mOzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVcSAKnpirzDz5+fflbyxdT6bao2p6tCSjwREemjjj9uToP2gQPiBH2aGuZWHSSnv0a5ZAHnF&#xA;1/zkn5xub1JrWwgtbUUra8vU5UNTV2Su422zPh2aK3LUcxZh5Z/5yQ0y7nEOv6e2ncqBZ4W9WMUU&#xA;/aJ4kcmoBtQdS2U5ezJRHpNso5g9itrq2ureO4tpVmglUPFKhDKyncEEdQc1pFc29UwK7FXYq7FX&#xA;Yq7FXYq7FWAeefzr8n+U5fqssh1DUOKt9UtSrsFcEgs1eK/sn4iKg1FcyMWmlNhKYDzkf85Raw5X&#xA;h5eh4g/GTcPVh7AJ8P45nDsy+rV4zJvK3/ORmg38wg160fSpHb93Mp9WAClAGfZq178QPHpvVl7N&#xA;nHcbso5geb1u2uYLmCO4t5FlglUPHIpqGVhUEH5ZryKblTArsVdirsVdirsVdirD5/76T/WP682M&#xA;eTSVmFDsVT7y9/vNJ/r/AMBmJqObZBNcoZuxV2KuxV49/wA5C/mZd+W9Ii0TSJxHqmqKyyypQyQw&#xA;inJga1RjWg271B2zL0uHiNlrySp4F5D8ja95u1T6lpcXqSAc7i4kJEUSk/akeh6ntuTm4lkjijcn&#xA;HESTs9qs/wDnGUi3/wBJ18LcEdIrbkin5tIpb7hmL/K1HaP2s/A82Gee/wAo9f8AKcP1uRkvtLJC&#xA;m8hBHAnYCVDXjXsake9cz9LroZtuUmueMxTj8jvzBudH1qLy1fz/AO4i+ZvqpkO0MxBPFSSOKyH/&#xA;AIb5k5i9paUEcY5s8M+j6PzQuU7FXYq7FXYq7FXYq8t/Pz8yJfKXlyOy09uOsatyS3fekca/3knS&#xA;hpUACvU7giozJ02Lil5BhOVB4d+W/wCU2uee7W91K2v4Ingm43DXRkLu8g5l+Sq9a965tJ6iOKgQ&#xA;0CBky2y/5x784SatcWTS28VpbcAdQYv6chZAxES8ebceVCdhXvln8p4xEHe+5Hgytb5q/IrzPoem&#xA;yahFJDqVtApe4WDksiKNy3Bh8SgdaGvtk8HaOPIeE7FEsJG6I/JH8wrrRtai8t38pbSdQfjalyT6&#xA;M56Ku+yyHalPtfMnKe0dICOMcwywz6PpDNC5TsVdirsVdirsVdirD5/76T/WP682MeTSVmFDsVT7&#xA;y9/vNJ/r/wABmJqObZBh2vfmPq2n+YvMVjC1kJNDs3uNO8vyI51LV2WxN16lm3rR0jST92wWCQ/A&#xA;3Q0yhm8/8wfnR5wvPIGoO9xp2kPdWWr/AFbXopI2WV7W0heK1tfqV/di3vne5kKcp2IEXLhUlUVS&#xA;S+8zeepr/Wbe11+5hnkufqswM91LJHFNrdjZwia2WaEWB9KdhbvAQ1xFycsr0YKvV/IGoecD+Znm&#xA;3TNct7uKwhstNfSY5Z4preOBJry3SVaTzS87sQ+oxcc6qVc7IWVfP/5+6ld3n5qanFcPz+oCO2hN&#xA;KUj4+qq0Hh6tPxzb6QARDjz5vff+cdtJtbP8tLS9iUevqc08079z6crQKK+AEX45ia6ZOSu5sxDZ&#xA;iH5q/mp5q0X8xjZadcmGw0r0OdoAOE5kjWZ/U2qarJx9qVG+Z2j0cJ4rI3LVkyESe46np9pqul3N&#xA;hcrztryJopFI/ZdaVoe4zUQmYyBHMOQRYfFRvZrC7hvIW43FpKk0TA1o8TBlII9xnW5gDGnAjzfb&#xA;Ng8j2Nu8jc5GiQu5ABZioqaCg39s5CXN2AV8CuxV2KuxV2KuxV8gf85FawuofmZPGgZI7KFLfiaC&#xA;rozB32J67CvgBm20kai4+Q7vUf8AnFj/AJRzWf8AmKj/AOTeV9o84+5lh6pz+cn5p655R1DT9P0i&#xA;KH1J4zczzTqXBXmUVFAK0+yeR+VMdDo45QTJcuQx5M98o6+nmLyzp+semI/rsIeSLqFcVV1FeoDA&#xA;0zCzY+CZj3NkZWLfKX5gWyaF521SGwPpCyvWktOO3Cj+ogH+rtnS45ceEE9Q4ZFSfX1g/Oxt3qTy&#xA;iRqtUtuoO9e+csebnBXwK7FXYq7FXYq7FWHz/wB9J/rH9ebGPJpKzCh2Kp95e/3mk/1/4DMTUc2y&#xA;Ca5QzdirsVdir5P/AOcmvLJ0zzxFq8KUttUhDSNy5H10JDV68Qwpx+Rp0zaaSdxruaMg3Z7/AM40&#xA;fmDptxoP+EbydYdQtJHk09HNPWhlJdlSvV0csSPA+xyrW4jfGGWOXRmXm78mtD8y+a4NfuLmSGnp&#xA;i+tFRWWf0tl+In4aqArbHYdsGDXSxw4QFliBNpr+ZXnvTvKPly4uZZlGpTRsmm21RzeUigbj14IT&#xA;Vj9HUjKtLgOSQHTqynKg+UPKulTeYfNWm6TFH6wnnUzJVRWJDykFWIWpUUFTuSBm91ObhiS4sI7v&#xA;te2gW3t4oFLMsSKisxqxCilSfHOaJtzVTArsVdirsVdirsVfLH/OUnl6e084WetqgFrf24iJWp/e&#xA;wkkluwLBth/kk5stHP000ZBuzX/nFKTn5c1v2u4/+TeQ15shliZt+ZP5T2Xna4srpr5rC6tFMTOI&#xA;xKHiJ5caFkoQa0Ne/TI6XWHCCKsFOTHxMltING8peWIoXmFtpWk24Vp5T0VBuzHuzHw6k7ZjyMsk&#xA;76lkKiHyPqFxc+ePP7rbI/PWb5mVEBZ0hZiSaKGJ9OIVNB2zfykMWOu4OKBZfZdrE0NtDCzBmjRU&#xA;ZgKAlRSoG9M5wuYqYFdirsVdirsVdir481v/AJyE8+2us39tHHY+nBczRpyhcnikhUV/ee2bmOIU&#xA;GglBf9DG/mD/AL7sP+RL/wDVTJeEEW7/AKGN/MH/AH3Yf8iX/wCqmPhBbe+f848+eda84eWdSvtW&#xA;WFZre99CMQIUXj6SNuCzb1bNfq4gSDbDk9UzEZuxV2KuxVjnn/yPpnnPy7No1/VAx9S3mABaOVQQ&#xA;rivhXt8ulRlmLIYGwiQt8d+b/IHm7yVf01C2lSBXrb6hGG9JqMQp5j7LVU7fSKjfNtjzCXJxzGle&#xA;0/N38xLe2FtH5hvhEBQBpmZgB2DNVh9+S8PGecQiz3oGzXzX5u1b0rVLrWNTmIDuzNK+54gySOfh&#xA;FTSrGmWHLGA7giiX09+S/wCUaeTrI6nqLCXXrxKSkCixRnf01qA3+t+rbbU6nUGZro3whT1DMVsd&#xA;irsVdirsVdirsVY55+8kab5z8uTaNfkoGPqQTAAtHKoPFxUdq9vl0qMsxZDA2ESFsK/IHyRrvk61&#xA;8waZq0XEm7RradfsSxhCvNa79R0P6qE3anIJUQwgKYz/AM5A/mD5r8p+c9N/QWoyWYm08NLGAskb&#xA;ETSCpjkDoT70y/SY4SieIXuxyEg7PIdX8+fmD53uI7G7vLnVJCax2UKBUqP2jFCqJsP2iNszYjHj&#xA;3AprJJe+fkn+TU/lflrXmCON9ZmQCKHZxbqaNRSDx5V+0adR8Owq2u1Wp49hybYQp7BmE2uxV2Ku&#xA;xV2KuxV2Kvzv8zf8pJqv/MZcf8nWzew5BxyluSV2Kvqz/nEX/lCtZ/7aR/5MR5rdb9Q9zbj5PUtR&#xA;84Saf51sPL9zZrHYX2n3l+urvOqqhsWhEqNEV2ULcK3MuPlmEzYy35u6jN5d13zDY6AraZoF1JHc&#xA;C7uzbTzWi2lveQzwRCCWstwl2PShcr25MrHiFV11+cHop5quFtdONt5ZLRPC+plL0yiSONWubb6s&#xA;wtoGZ2/emRvs/ZPZVUufzetLe80HSpH0Y6vrUX1ssNYQaets05hiaC7kgR7mSanwRpBuQwqAORVe&#xA;iYqpz21vcJ6c8Sypv8LqGG4Knr7EjCCrGT+Vf5bk1by1pzN3ZrdGJPiSRUn55Z40+8seEJ3pGgaL&#xA;o9utvpdlDZwrXjHEgUDlSoHgNhtkJSJ5pApH5FLsVdirsVdirsVdirsVdiq14kcUYb0I5AkMAetG&#xA;FCPoxVjHmj8s/KHmjULS+1mz+sz2Y4JyNQycuXB+VTxrXpTqcthmlEUGJiCmeieUfLGhBho+mW9g&#xA;H48vQjCVKggHbvv16nIynKXMpAATbIJdirsVdirsVdirsVdir87/ADN/ykmq/wDMZcf8nWzew5Bx&#xA;yluSV2Kvqz/nEX/lCtZ/7aR/5MR5rdb9Q9zbj5PXtW8p6Rq2s2eqX6GdrO0vbAWjhHt5YNR9H11m&#xA;jZW57WygCtKE1B7YTNitx+SHlRLiSXRbi48uxy38epyWulQ6dHbtPBBHBAGhmtJ0ZITE0sakUEru&#xA;/wBrjxVTeXyA0urT6w/mDUzqphktbC8pYcrKCeaOeWOBfqnBg5gRf36yEL0pU4qlE35JeWJLRrVL&#xA;6/hiureS01ng1vXUIZrqW8kS45QNw5T3MrVt/SI5UFABRV6FirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVfImtf840fmhd6xf3cMFoYbi4lljJuVB4u5YVFPA5tI6uA&#xA;DUYFB/8AQr35rf8ALPZ/9JK/0yX5yCOAu/6Fe/Nb/lns/wDpJX+mP5yC8Be7f84//l95j8keWtR0&#xA;/XUiS4ubz6xEIZBIOHpIm5HupzC1OUTIIbIinqOYzJ2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV&#xA;2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2&#xA;KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoY6lYgkGZQRsRg4g2eFLud+k7D/&#xA;AH+uPEF8KXc79J2H+/1x4gvhS7lWG4hmUtE4cA0JHjiCxlEjmqYWLsVdirsVU7m5gtoJLidxHDEp&#xA;Z3PQAYpAt4v5v/5yX0iwv5LLy7ZjVvSLI12XKQE0FCjUq1G5DYUIoQ2UyygOxwdnSkLOzDIf+civ&#xA;zFLDnFZNEOoEREhH+ty4/wDCZV45dgOyIHveh+Tv+chdF1W6Sz121/RM8rBYpg3OCpIWjOaFepNS&#xA;KAd8tjmB5uFqOypwFx3D1tWVlDKaqRUEdxlzqm8VdirsVdirsVdirsVdirsVQuo6rpum2z3OoXMd&#xA;rAil2klYKAoIBO/hyGAllGJPJjjfm1+Wol9L/EVkWqBVZKrv/lgcfxwcY724aXL/ADSn+la7ourw&#xA;ifS72G8iPIB4XVweJAalPCowggtU8co8xSOwsHYq7FXYq7FXYq7FWHzf30n+sf15QXZx5LMWTsVT&#xA;/wAvf7zSf6/8BlkHC1PMJpk3HdirsVdir5s/5yS/Mi6n1T/BunSmO3gAbVGUsC7NRliIIX/WPWop&#xA;Q0JrRkl0drocH8Ree+QPy/1/zbem10mEFIqG5upCVhiDdC7AHrTYAEnKBEyOzt8meGGNyeyWf/OM&#xA;6iEfWtepMRusVtVQfm0lT9wyz8v5uEe265Q+39jy/wA7+VYvLXmO60P60L1rUR8pwnp1MiCQDjyf&#xA;sw75ROPCadzpc3jYxOqt6h+QPn+7klbynqU/qJFGX0ySQ1YKCAYuRI2WvwihPbYDMjBkvZ0Xa2jE&#xA;Txx683uOZLpHYq7FXYq7FXYq7FXYqwz80/zGsPJHl57x2WTUJj6dlaBh6juwNGAo1FFN2O3zNFMZ&#xA;SoN+nwnJKuj5YuNT84/mJ5liS7mN5f3stLW0DCOBGIoAisQq0VQKnc03JzFlIyL0GLFDFG+gZvqn&#xA;5C67oPle91zVby2jNoiuLSHlKx5OqUZyEVftduWMsRAsrh7QxzyCEQd+rC9J1DVNGvEvtJuntLlC&#xA;rB4zseJ5AMpqrCorRhTKRMh2WXTRmKIfS/5UfmdF5vsHt70xwa3a0E8ANPUBqfUjB6rt0rUd+xOb&#xA;jycQeV12iOGW30vQMtcB2KuxV2KuxV2KsPm/vpP9Y/ryguzjyWYsnYqn/l7/AHmk/wBf+AyyDhan&#xA;mHmvm3yb5z1j8xNevNMAeL9HaZZ27Xz/AFSEWk8l0dQisr2O0upopmEUatwP2ZKtuIuM3HS3yTqP&#xA;5m6f5Ut9Pntb+x1bS/LtsnlrQ47NpLC7ki0oEG/u5LTlBcLcKVMDTRUYBfjryKqL8k+Y/wAz7rV7&#xA;SHzRc6jbaaxVtPmtNMnY3M5kAe11OSbSrdreNBSkqQRKVb+8YqTiqf8A5P6x+ZGpJqb+dFMUqiAp&#xA;ayQTQtBcEyevHG7WVlDJCKJw9OSem9ZW5Cir5V863M1x5712Sd2kcX9xHzclm4xysi1Y7miqN8xJ&#xA;vR6f6Q+svyN0a0038ttLeFQJb9Wu7mQDdndiFr/qoFX6MvxCoup7QyGWU+Wzzj81Pzf842fm+90n&#xA;R7v9HWensIfgSNnkfiCzszq3c0AGUZMpug7XQ9n4jjEpCyXlmpa1qOr6nPqWoy+ve3JDTy0VeRAC&#xA;/ZUBRsOwyiRvcu4wwEI8MeQR3krVptL87aRfQAGWGbZT0IZSpB+g5PEaLja+IljIL7KzPeOdirsV&#xA;dirsVdirsVdir5A/5yG8xXOq/mXdWLvW20hVtoUVmZOTKJHYAn4WPIK1P5cx8h3d3oYAQB72Wf8A&#xA;ONeh+XLzUdQvtSRG1LT3tW0pmlaNldxN6nFFZQ/2V6g5HCATu2dpTnGAEeRu/sfQmvado+paRc2O&#xA;sKrabMoFyru0SkBgRV1ZCPiA75kyAI3dJinKMgY/U+XvzS0ry9o/nCSx0BETThBE6rHK0y82B5fG&#xA;7OfxzAyxAOz13Z2ac8dz52l3kHXbjQ/O+k3sDcVknS2nBYorRzMEPMj9kEhvoxxSoo7RxCeMvsHN&#xA;g8c7FXYq7FXYq7FWHzf30n+sf15QXZx5LMWTsVT/AMvf7zSf6/8AAZZBwtTzCaZNx3Yq7FXYq+J/&#xA;zn8sz+XfzE1ONgxgvJDdwSuVLOJfictx2B51NPAjYZjTFF3ulycUA93/AOcdPzA03VPKsHlq4nWP&#xA;V9L5rFE5o01uzF1ZK9SnIqQOgAyzFLanC1+EiXGORZJ50/Jjyr5q1Q6rPJcWV9IAJ5LZk4ycRxBZ&#xA;XVviAAFRjPEJG103aOTFHhFEPnf8yfL1p5V84X+i2jyPa24iMDykM7LJCjksVCivJj2GYs4Uaeh0&#xA;mpOTGJHmmP5HaBPr35hWs/pCSy0oG5uiwJTcFEUkA7kkkV60yzDHdwu0s9QrvfWmZbzbsVdirsVd&#xA;irsVdirsVfFP53Wslp+a2vc68Zp1mjYgiquinavg1V+jMafN32kl6AmH5NShvzA0Ed/rS/8AETlc&#xA;PqDm6qV4Je59KfnCrN+WuuBQSfSQ0G+wmQnMnL9JdD2d/fx/HR8lKab5gPXhGaAj3nmfSLWOvKW8&#xA;gBIBai+oCzUG/wAIqcnAbuLq8lQPufbebB412KuxV2KuxV2Kvg3zD5687R+YNTjj8w6mkaXc6oi3&#xA;lwAAJGAAAfoMxSXoYQHCNkv/AMfeev8AqY9U/wCk24/5rwWy4B3O/wAfeev+pj1T/pNuP+a8bXgH&#xA;c+mf+cWdZ1jVfKGrTapfXF/MmoFEkupXmZV9CM8QXLECpy/FydVrwBIe57TljguxV2KuxVg35s/l&#xA;hYee9DELOYdTtAz2FwADRj1U1p8LUodx+ApGUbcjT5zjPk+RvMXlLzX5P1JoNTtZbWSFwI7pK+kz&#xA;UDKUkFN+JDUNGHcDMcxp3WPMJDZHwfmz+YUUSxr5i1DioooNxI23zJJwWe9PhY/5o+Sv5e8teffz&#xA;B1XlbJcXzyMFuNVu2kaNBUCrzPyJpXoKn2xECVyaiGMVy8n1h+XH5d6T5J0NLC0/f3j/AB3t8wAe&#xA;WQ05ePFdhRa9u53zJjGnR585ySsssyTQ7FXYq7FXYq7FXYq7FXh//OSH5ZXOt2UXmfSkabUbFBDc&#xA;WyB2aWCpb4dyKodwtBWp6sQMqyR6ufos/CeE8nzt5U8xzaDr+natGvNrC4iuPTOwcRsGKk/5QFMo&#xA;5G3bn1RMT1D7H0j82fy01vTFuP07YwRzLSW0vporeReQ+JHjmK1p0NKj3zJEwXQy02SJ5H4Pm385&#xA;dZ0G4893r6FLby6aI4Fie04+jVYlDBeHw7HwzGyAGWzv9HOUcQEufmzr/nHT8u7qfUB5x1NGiigF&#xA;NLiYOpf1FIMwIK0FNgN6gmooVJtxQ6uB2hqrHCH0Vl7p3Yq7FXYq7FXYq/PHzL/ykeq/8xlx/wAn&#xA;WzEPN6OH0hLcWTsVfVf/ADiN/wAoVrP/AG0j/wAmI8uxcnU9ofUPcyfzh501vyv5rv77VJNQXQYr&#xA;OaTRLO2XT3sry4tNPmvJ4Z24SahHJxiLJQqnw9d6G1wEjXz15yHlaWefUryz8y2V/oU+qWdza6d6&#xA;Bs9YvI7YRWht2uQIXBkoZJGmHHfjUYqna+d/Mup/mtP5aiN5pGlyadqUFiZtMn+K8s5bQC/FxLEI&#xA;XipPIiBXKbKW3kjXFWPSfmv5uj8meQLsi7Nxqa6Pea/rEWmz3MM0V1ewW0trGbeCSGOaVZHamzbB&#xA;UBd1oq9wxVQu7CyvEMd1BHOhVkIkUN8LU5DfxoMUgkcmOj8rPy6Dch5esRJ/v0RASV8eY+KvvXI8&#xA;IbfzE+9ksNvbwJwgiSJNvhRQo2FBsPYUyTUSqYodirsVdirsVdirsVdirsVakjSRGjkUPG4KujCo&#xA;IOxBBxV5Z5//AOce/KXmi6n1K0ZtL1SarPJCAIpHPH4pEpT+Ykjck7nK5YwXLw6uUdjuHnrf84l6&#xA;2JqJ5itzDX7Zt5A1P9XmR/w2R8Jyf5QHczLyX/zjR5X0a4ivNauG1m6ibksTqFt6gqVJiNa9CCGL&#xA;Df2yQxgNOXXSlsNnsUUMUKCOJFjQVIVQAKk1J28Sa5Y4JK7FXYq7FXYq7FXYq/PHzL/ykeq/8xlx&#xA;/wAnWzEPN6OH0hLcWTsVfVf/ADiN/wAoVrP/AG0j/wAmI8uxcnU9ofUPc9kHlry4NXl1oaVZjWLh&#xA;PSn1IW8X1mSPiF4PNx9Rl4qBQnplrgKVj5Q8p2FlJY2OiWFpYyzJcy2sFrDHE08TrJHKyKoUujor&#xA;K1KggHtiqYtaWrXUd40MbXcMbwxXBUGRI5SjSIr05BXaJCwHXiPAYqox6PpEenwadHY26afamI2t&#xA;msSCGI27rJAY4wOK+k6KyUHwkAjpiqLxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KvnjU/+cR/r2pXd7/iv0/rU0k3p/o/lx9Ri1K/WRWlfDKjidjHtChXD9v7EN/0J&#xA;3/393/cu/wCzrB4Xmn+Uf6P2/sd/0J3/AN/d/wBy7/s6x8LzX+Uf6P2/serflH+V/wDyrzRbzTP0&#xA;n+lPrdz9Z9b0Pq/H92qcePqTV+xWtcsjGnF1GfxDdUzrJOO7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXgPn6HTvM&#xA;H5hebbDzNqbm20O1s5PLehSXiWEEzywB5pVdxxZ0djvuTWlaAUpnuS7PTyMIxIHPmatm/wCQXmLX&#xA;9e/L9LvWmkmkhupre0vJg5kngQKRIzuT6hWRnj5D+Wh3ByWMkjdo10IRyel6PljhuxV2KuxV2Kux&#xA;V2KuxV2KuxVi3nr8wLDymNPtmtLjUtY1iR4NI0y2A5TSoB9uRiFjQM6Bm3IrUKaGkZSpuw4TOzdA&#xA;c1PyP+Yth5nuL3TJ7STSfMOmmmoaRcMrOorTnE67Sx1IHIAdR2KkiM7Z59McYB5xPIstybjOxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVK9W8q+WNZlSbV9HstRmjXhHJd20U7Kta8VMisQ&#xA;K4CAzjklHkSEwtra3tbeK2tokgtoEWOGGNQiIiDiqqq0CqoFABhYk2qYodirsVdirsVdirsVdirs&#xA;Vdirz381vInmDzBe+W9d8vyw/pXyzdtdx2dw7RJcIxjdoxIoajMYFWhoCGNSMhKJPJydPljEES5S&#xA;Q/5b/l3q2nebNZ87a5/ompaypjh0hJ/ra20UhSSQSzlV5vzjAUJ8Kr3avwiMKNs9RqOKIgNwOr0r&#xA;LHDdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//Z</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+ <xapMM:DocumentID>uuid:89B13A64E5D9DE11BB37992E5642CB24</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:7a20788e-1606-7140-8335-11445081584b</xapMM:InstanceID>
+ <xapMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:1052650b-0efc-4cb2-a32e-387095575b05</stRef:instanceID>
+ <stRef:documentID>uuid:6120892493BFDB11914A8590D31508C8</stRef:documentID>
+ </xapMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:Type>Document</illustrator:Type>
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:stFnt="http://ns.adobe.com/xap/1.0/sType/Font#"
+ xmlns:xapG="http://ns.adobe.com/xap/1.0/g/">
+ <xapTPg:NPages>1</xapTPg:NPages>
+ <xapTPg:HasVisibleTransparency>False</xapTPg:HasVisibleTransparency>
+ <xapTPg:HasVisibleOverprint>False</xapTPg:HasVisibleOverprint>
+ <xapTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>841.889832</stDim:w>
+ <stDim:h>595.275574</stDim:h>
+ <stDim:unit>Pixels</stDim:unit>
+ </xapTPg:MaxPageSize>
+ <xapTPg:Fonts>
+ <rdf:Bag>
+ <rdf:li rdf:parseType="Resource">
+ <stFnt:fontName>MyriadPro-Regular</stFnt:fontName>
+ <stFnt:fontFamily>Myriad Pro</stFnt:fontFamily>
+ <stFnt:fontFace>Regular</stFnt:fontFace>
+ <stFnt:fontType>Open Type</stFnt:fontType>
+ <stFnt:versionString>Version 2.037;PS 2.000;hotconv 1.0.51;makeotf.lib2.0.18671</stFnt:versionString>
+ <stFnt:composite>False</stFnt:composite>
+ <stFnt:fontFileName>MyriadPro-Regular.otf</stFnt:fontFileName>
+ </rdf:li>
+ </rdf:Bag>
+ </xapTPg:Fonts>
+ <xapTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xapTPg:PlateNames>
+ <xapTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:groupName>Default Swatch Group</xapG:groupName>
+ <xapG:groupType>0</xapG:groupType>
+ <xapG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>White</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>255</xapG:red>
+ <xapG:green>255</xapG:green>
+ <xapG:blue>255</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>Black</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>35</xapG:red>
+ <xapG:green>31</xapG:green>
+ <xapG:blue>32</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>CMYK Red</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>236</xapG:red>
+ <xapG:green>28</xapG:green>
+ <xapG:blue>36</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>CMYK Yellow</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>255</xapG:red>
+ <xapG:green>241</xapG:green>
+ <xapG:blue>0</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>CMYK Green</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>0</xapG:red>
+ <xapG:green>165</xapG:green>
+ <xapG:blue>81</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>CMYK Cyan</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>0</xapG:red>
+ <xapG:green>173</xapG:green>
+ <xapG:blue>238</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>CMYK Blue</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>46</xapG:red>
+ <xapG:green>49</xapG:green>
+ <xapG:blue>145</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>CMYK Magenta</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>235</xapG:red>
+ <xapG:green>0</xapG:green>
+ <xapG:blue>139</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=16 M=98 Y=92 K=7</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>194</xapG:red>
+ <xapG:green>39</xapG:green>
+ <xapG:blue>45</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=0 M=99 Y=97 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>236</xapG:red>
+ <xapG:green>32</xapG:green>
+ <xapG:blue>39</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=0 M=79 Y=96 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>240</xapG:red>
+ <xapG:green>92</xapG:green>
+ <xapG:blue>39</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=0 M=50 Y=98 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>246</xapG:red>
+ <xapG:green>146</xapG:green>
+ <xapG:blue>33</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=0 M=35 Y=87 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>250</xapG:red>
+ <xapG:green>175</xapG:green>
+ <xapG:blue>59</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=5 M=0 Y=93 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>249</xapG:red>
+ <xapG:green>236</xapG:green>
+ <xapG:blue>35</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=19 M=0 Y=98 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>216</xapG:red>
+ <xapG:green>223</xapG:green>
+ <xapG:blue>39</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=50 M=0 Y=99 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>139</xapG:red>
+ <xapG:green>197</xapG:green>
+ <xapG:blue>64</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=74 M=0 Y=99 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>61</xapG:red>
+ <xapG:green>180</xapG:green>
+ <xapG:blue>74</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=86 M=12 Y=100 K=9</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>0</xapG:red>
+ <xapG:green>146</xapG:green>
+ <xapG:blue>69</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=88 M=28 Y=95 K=32</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>0</xapG:red>
+ <xapG:green>104</xapG:green>
+ <xapG:blue>55</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=76 M=0 Y=75 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>34</xapG:red>
+ <xapG:green>180</xapG:green>
+ <xapG:blue>115</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=78 M=9 Y=46 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>3</xapG:red>
+ <xapG:green>168</xapG:green>
+ <xapG:blue>156</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=70 M=15 Y=0 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>37</xapG:red>
+ <xapG:green>169</xapG:green>
+ <xapG:blue>224</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=87 M=52 Y=0 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>16</xapG:red>
+ <xapG:green>114</xapG:green>
+ <xapG:blue>185</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=99 M=96 Y=4 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>46</xapG:red>
+ <xapG:green>55</xapG:green>
+ <xapG:blue>143</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=100 M=100 Y=26 K=25</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>38</xapG:red>
+ <xapG:green>34</xapG:green>
+ <xapG:blue>97</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=74 M=98 Y=1 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>103</xapG:red>
+ <xapG:green>48</xapG:green>
+ <xapG:blue>144</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=49 M=99 Y=1 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>146</xapG:red>
+ <xapG:green>41</xapG:green>
+ <xapG:blue>141</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=34 M=100 Y=37 K=11</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>157</xapG:red>
+ <xapG:green>30</xapG:green>
+ <xapG:blue>96</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=12 M=100 Y=49 K=1</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>211</xapG:red>
+ <xapG:green>28</xapG:green>
+ <xapG:blue>92</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=0 M=96 Y=20 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>236</xapG:red>
+ <xapG:green>37</xapG:green>
+ <xapG:blue>122</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=23 M=27 Y=40 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>198</xapG:red>
+ <xapG:green>178</xapG:green>
+ <xapG:blue>152</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=40 M=43 Y=52 K=7</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>152</xapG:red>
+ <xapG:green>133</xapG:green>
+ <xapG:blue>118</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=50 M=53 Y=61 K=23</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>117</xapG:red>
+ <xapG:green>101</xapG:green>
+ <xapG:blue>88</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=57 M=60 Y=64 K=42</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>85</xapG:red>
+ <xapG:green>72</xapG:green>
+ <xapG:blue>65</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=23 M=38 Y=63 K=1</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>197</xapG:red>
+ <xapG:green>156</xapG:green>
+ <xapG:blue>110</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=32 M=49 Y=74 K=10</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>165</xapG:red>
+ <xapG:green>124</xapG:green>
+ <xapG:blue>82</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=36 M=57 Y=84 K=23</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>139</xapG:red>
+ <xapG:green>99</xapG:green>
+ <xapG:blue>57</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=39 M=64 Y=93 K=36</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>117</xapG:red>
+ <xapG:green>77</xapG:green>
+ <xapG:blue>36</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=41 M=70 Y=96 K=49</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>97</xapG:red>
+ <xapG:green>57</xapG:green>
+ <xapG:blue>23</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=47 M=73 Y=83 K=68</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>65</xapG:red>
+ <xapG:green>35</xapG:green>
+ <xapG:blue>18</xapG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xapG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:groupName>Print Color Group</xapG:groupName>
+ <xapG:groupType>1</xapG:groupType>
+ <xapG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=2 M=28 Y=72 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>246</xapG:red>
+ <xapG:green>187</xapG:green>
+ <xapG:blue>96</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=5 M=70 Y=90 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>231</xapG:red>
+ <xapG:green>110</xapG:green>
+ <xapG:blue>52</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=4 M=92 Y=77 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>229</xapG:red>
+ <xapG:green>59</xapG:green>
+ <xapG:blue>65</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=29 M=2 Y=92 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>191</xapG:red>
+ <xapG:green>210</xapG:green>
+ <xapG:blue>65</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=62 M=4 Y=93 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>109</xapG:red>
+ <xapG:green>182</xapG:green>
+ <xapG:blue>78</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=30 M=2 Y=7 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>174</xapG:red>
+ <xapG:green>218</xapG:green>
+ <xapG:blue>230</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=60 M=8 Y=5 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>85</xapG:red>
+ <xapG:green>185</xapG:green>
+ <xapG:blue>223</xapG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>C=78 M=4 Y=11 K=0</xapG:swatchName>
+ <xapG:mode>RGB</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:red>0</xapG:red>
+ <xapG:green>178</xapG:green>
+ <xapG:blue>215</xapG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xapG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:groupName>Grayscale</xapG:groupName>
+ <xapG:groupType>1</xapG:groupType>
+ <xapG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=100</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>255</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=90</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>229</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=80</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>203</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=70</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>178</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=60</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>152</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=50</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>127</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=40</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>101</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=30</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>76</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=20</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>50</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=10</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>25</xapG:gray>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xapG:swatchName>K=5</xapG:swatchName>
+ <xapG:mode>GRAY</xapG:mode>
+ <xapG:type>PROCESS</xapG:type>
+ <xapG:gray>12</xapG:gray>
+ </rdf:li>
+ </rdf:Seq>
+ </xapG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xapTPg:SwatchGroups>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 2 0 obj <</Count 1/Type/Pages/Kids[5 0 R]>> endobj 15 0 obj <</Intent 16 0 R/Usage 17 0 R/Name(Class)/Type/OCG>> endobj 27 0 obj <</Intent 28 0 R/Usage 29 0 R/Name(Package)/Type/OCG>> endobj 37 0 obj <</Intent 38 0 R/Usage 39 0 R/Name(Object)/Type/OCG>> endobj 65 0 obj <</Intent 66 0 R/Usage 67 0 R/Name(Class)/Type/OCG>> endobj 78 0 obj <</Intent 79 0 R/Usage 80 0 R/Name(Package)/Type/OCG>> endobj 90 0 obj <</Intent 91 0 R/Usage 92 0 R/Name(Object)/Type/OCG>> endobj 116 0 obj <</Intent 117 0 R/Usage 118 0 R/Name(Class)/Type/OCG>> endobj 129 0 obj <</Intent 130 0 R/Usage 131 0 R/Name(Package)/Type/OCG>> endobj 141 0 obj <</Intent 142 0 R/Usage 143 0 R/Name(Object)/Type/OCG>> endobj 167 0 obj <</Intent 168 0 R/Usage 169 0 R/Name(Class)/Type/OCG>> endobj 180 0 obj <</Intent 181 0 R/Usage 182 0 R/Name(Package)/Type/OCG>> endobj 192 0 obj <</Intent 193 0 R/Usage 194 0 R/Name(Object)/Type/OCG>> endobj 218 0 obj <</Intent 219 0 R/Usage 220 0 R/Name(Class)/Type/OCG>> endobj 237 0 obj <</Intent 238 0 R/Usage 239 0 R/Name(Package)/Type/OCG>> endobj 255 0 obj <</Intent 256 0 R/Usage 257 0 R/Name(Object)/Type/OCG>> endobj 287 0 obj <</Intent 288 0 R/Usage 289 0 R/Name(Class)/Type/OCG>> endobj 306 0 obj <</Intent 307 0 R/Usage 308 0 R/Name(Package)/Type/OCG>> endobj 324 0 obj <</Intent 325 0 R/Usage 326 0 R/Name(Object)/Type/OCG>> endobj 356 0 obj <</Intent 357 0 R/Usage 358 0 R/Name(Class)/Type/OCG>> endobj 375 0 obj <</Intent 376 0 R/Usage 377 0 R/Name(Package)/Type/OCG>> endobj 393 0 obj <</Intent 394 0 R/Usage 395 0 R/Name(Object)/Type/OCG>> endobj 425 0 obj <</Intent 426 0 R/Usage 427 0 R/Name(Class)/Type/OCG>> endobj 444 0 obj <</Intent 445 0 R/Usage 446 0 R/Name(Trait)/Type/OCG>> endobj 462 0 obj <</Intent 463 0 R/Usage 464 0 R/Name(Package)/Type/OCG>> endobj 480 0 obj <</Intent 481 0 R/Usage 482 0 R/Name(Object)/Type/OCG>> endobj 515 0 obj <</Intent 516 0 R/Usage 517 0 R/Name(Class)/Type/OCG>> endobj 534 0 obj <</Intent 535 0 R/Usage 536 0 R/Name(Trait)/Type/OCG>> endobj 552 0 obj <</Intent 553 0 R/Usage 554 0 R/Name(Package)/Type/OCG>> endobj 570 0 obj <</Intent 571 0 R/Usage 572 0 R/Name(Object)/Type/OCG>> endobj 605 0 obj <</Intent 606 0 R/Usage 607 0 R/Name(Class)/Type/OCG>> endobj 624 0 obj <</Intent 625 0 R/Usage 626 0 R/Name(Trait)/Type/OCG>> endobj 642 0 obj <</Intent 643 0 R/Usage 644 0 R/Name(Package)/Type/OCG>> endobj 660 0 obj <</Intent 661 0 R/Usage 662 0 R/Name(Object)/Type/OCG>> endobj 695 0 obj <</Intent 696 0 R/Usage 697 0 R/Name(Base)/Type/OCG>> endobj 699 0 obj <</Intent 700 0 R/Usage 701 0 R/Name(Class)/Type/OCG>> endobj 718 0 obj <</Intent 719 0 R/Usage 720 0 R/Name(Trait)/Type/OCG>> endobj 735 0 obj <</Intent 736 0 R/Usage 737 0 R/Name(Package)/Type/OCG>> endobj 753 0 obj <</Intent 754 0 R/Usage 755 0 R/Name(Object)/Type/OCG>> endobj 785 0 obj <</Intent 786 0 R/Usage 787 0 R/Name(Base)/Type/OCG>> endobj 789 0 obj <</Intent 790 0 R/Usage 791 0 R/Name(Class)/Type/OCG>> endobj 808 0 obj <</Intent 809 0 R/Usage 810 0 R/Name(Trait)/Type/OCG>> endobj 825 0 obj <</Intent 826 0 R/Usage 827 0 R/Name(Package)/Type/OCG>> endobj 843 0 obj <</Intent 844 0 R/Usage 845 0 R/Name(Object)/Type/OCG>> endobj 878 0 obj <</Intent 879 0 R/Usage 880 0 R/Name(Base)/Type/OCG>> endobj 882 0 obj <</Intent 883 0 R/Usage 884 0 R/Name(Class)/Type/OCG>> endobj 901 0 obj <</Intent 902 0 R/Usage 903 0 R/Name(Trait)/Type/OCG>> endobj 918 0 obj <</Intent 919 0 R/Usage 920 0 R/Name(Package)/Type/OCG>> endobj 936 0 obj <</Intent 937 0 R/Usage 938 0 R/Name(Object)/Type/OCG>> endobj 937 0 obj [/View/Design] endobj 938 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 919 0 obj [/View/Design] endobj 920 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 902 0 obj [/View/Design] endobj 903 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 883 0 obj [/View/Design] endobj 884 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 879 0 obj [/View/Design] endobj 880 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 844 0 obj [/View/Design] endobj 845 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 826 0 obj [/View/Design] endobj 827 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 809 0 obj [/View/Design] endobj 810 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 790 0 obj [/View/Design] endobj 791 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 786 0 obj [/View/Design] endobj 787 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 754 0 obj [/View/Design] endobj 755 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 736 0 obj [/View/Design] endobj 737 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 719 0 obj [/View/Design] endobj 720 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 700 0 obj [/View/Design] endobj 701 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 696 0 obj [/View/Design] endobj 697 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 661 0 obj [/View/Design] endobj 662 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 643 0 obj [/View/Design] endobj 644 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 625 0 obj [/View/Design] endobj 626 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 606 0 obj [/View/Design] endobj 607 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 571 0 obj [/View/Design] endobj 572 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 553 0 obj [/View/Design] endobj 554 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 535 0 obj [/View/Design] endobj 536 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 516 0 obj [/View/Design] endobj 517 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 481 0 obj [/View/Design] endobj 482 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 463 0 obj [/View/Design] endobj 464 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 445 0 obj [/View/Design] endobj 446 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 426 0 obj [/View/Design] endobj 427 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 394 0 obj [/View/Design] endobj 395 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 376 0 obj [/View/Design] endobj 377 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 357 0 obj [/View/Design] endobj 358 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 325 0 obj [/View/Design] endobj 326 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 307 0 obj [/View/Design] endobj 308 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 288 0 obj [/View/Design] endobj 289 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 256 0 obj [/View/Design] endobj 257 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 238 0 obj [/View/Design] endobj 239 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 219 0 obj [/View/Design] endobj 220 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 193 0 obj [/View/Design] endobj 194 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 181 0 obj [/View/Design] endobj 182 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 168 0 obj [/View/Design] endobj 169 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 142 0 obj [/View/Design] endobj 143 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 130 0 obj [/View/Design] endobj 131 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 117 0 obj [/View/Design] endobj 118 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 91 0 obj [/View/Design] endobj 92 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 79 0 obj [/View/Design] endobj 80 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 66 0 obj [/View/Design] endobj 67 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 38 0 obj [/View/Design] endobj 39 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 28 0 obj [/View/Design] endobj 29 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 877 0 obj [936 0 R 918 0 R 901 0 R 882 0 R 878 0 R] endobj 5 0 obj <</CropBox[321.5 204.775 334.5 217.775]/Parent 2 0 R/Contents 955 0 R/BleedBox[0.0 0.0 841.89 595.276]/PieceInfo<</Illustrator 869 0 R>>/ArtBox[321.5 204.775 334.5 217.775]/MediaBox[0.0 0.0 841.89 595.276]/Thumb 960 0 R/TrimBox[0.0 0.0 841.89 595.276]/Resources<</XObject<</Fm0 893 0 R/Fm1 900 0 R/Fm2 910 0 R/Fm3 917 0 R/Fm4 927 0 R/Fm5 935 0 R/Fm6 945 0 R/Fm7 952 0 R>>/ColorSpace<</CS0 889 0 R>>/Font<</T1_0 953 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 878 0 R/MC1 882 0 R/MC2 901 0 R/MC3 918 0 R/MC4 936 0 R>>/ExtGState<</GS0 885 0 R>>>>/Type/Page/LastModified(D:20091124113554+01'00')>> endobj 955 0 obj <</Length 1948/Filter/FlateDecode>>stream
+HWˎ5Wx,巷L
+ZugIIy_<+i,}p:.P5mW!{[
+Y$Cje g-uG+LSױ[SAj}l6
+w")l |IsZ66]#
+Pi6y†K 
+rHvF5 nZ1u\I&b,p]4MVcuԓ PF% :HQ4> G!ieHZ `c
+HC:Pz m9cĐfw s@~0_fp. .7dC^"'@"2L\BaPpp]z&L XEpdsm쓢xf͜+ڋC? U\Jsc}GlE\8K G.%C:wH'7 L'%Jqzkd5m^4s_025LtˤEi}oH+%#@>".wbw ]N`ͨi9ıgEȄCfCΔNA@ (KZ1ڵcq,G3* WG
+6&-ѣY픪6 ̜JCLt Rұ7QXΔ)ȸӡnb{;#6q'ݥBf2NN$31.g
+ƫcU; ñR`|xKsuuϦpD )>lR gmډvҷ3}({j\" WO(Mr((sMƱg)a#:RJ8ȕ-u=옺)vk@r}Wv;FDY"ov\, w-f
+e!L<8Uoλvk]GLxgbgv &R;2$xxƅNTg l3#|XʪD^kEV%Ie@T7|]ΔKxOKG0DM\[)zyۿr͕?;j"i.GMrq)i_'X(L|J_LGA,)}^+ʽ|Bz${EO
+
+oH*U zE';h3gn/R pMe#fP'Q
+8ͯv:&?`&Cw`}aٴi76|F95i# gx;.s7M;(Ϥc* r~g ^( xw S/i^oikM| utDuU@ڑ?P\ˡ#WjCՔs\o33 W7ZE|mHgUR/
+8;Xnf&7>J<fDsP~> endstream endobj 885 0 obj <</OPM 1/BM/Normal/CA 1.0/OP false/SMask/None/ca 1.0/AIS false/op false/Type/ExtGState/SA true>> endobj 953 0 obj <</Subtype/Type1/FontDescriptor 954 0 R/LastChar 102/Widths[513 513 0 513 513 513 0 513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 448 564 501 292]/BaseFont/WLSGHE+MyriadPro-Regular/FirstChar 49/Encoding/WinAnsiEncoding/Type/Font>> endobj 954 0 obj <</StemV 88/FontName/WLSGHE+MyriadPro-Regular/FontStretch/Normal/FontFile3 957 0 R/FontWeight 400/Flags 32/Descent -250/FontBBox[-157 -250 1126 952]/Ascent 952/FontFamily(Myriad Pro)/CapHeight 674/XHeight 484/Type/FontDescriptor/ItalicAngle 0>> endobj 957 0 obj <</Subtype/Type1C/Length 1273/Filter/FlateDecode>>stream
+H|S]PW%F
+M[2Z#b(? mf I$(EKڙ&PPuTmg
+ /<0X,caWGGP9ltTT*zcU-}f6Hg4MZA`sfd0L0Št6(BF8]$٠QFE+g93k,{ &V+&b SCw8,W
+^1EHYm~b3YLX./6qް c6@߆b"~*Z.҈_Vu]KDU NCOIĢN%Ű 俣|1Ro,cvIt-^ה-TyATt&, Sկ]QkݚE<{C>nzĺX4B#@
+HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽
+ 
+V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K
+x-
+ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9
+N')].uJr
+ wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4
+n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh 8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MI JlN<DHJIڐtCj'KwKgC%Nd |ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O
+zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km
+/CS0 cs 0.616 0.196 0.196 scn
+1 i
+/GS0 gs
+q 1 0 0 1 183 308.2725 cm
+0 0 m
+6.607 0.011 12.01 -5.392 11.999 -11.999 c
+12.01 -18.606 6.607 -24.009 0 -23.998 c
+-6.607 -24.009 -12.01 -18.606 -11.999 -11.999 c
+-12.01 -5.392 -6.607 0.011 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 900 0 obj <</Subtype/Form/Length 245/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 895 0 R/Resources<</XObject<</Fm0 899 0 R>>/ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[180.624 223.274 192.621 211.277]>>stream
+/CS0 cs 0.616 0.196 0.196 scn
+1 i
+/GS0 gs
+q 1 0 0 1 186.627 218.2744 cm
+0 0 m
+0.544 0.003 0.995 -0.445 0.994 -1.003 c
+0.997 -1.549 0.546 -1.999 0 -1.997 c
+-0.55 -2 -1.007 -1.543 -1.003 -1.003 c
+-1.005 -0.451 -0.549 0.003 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 910 0 obj <</Subtype/Form/Length 259/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 905 0 R/Resources<</XObject<</Fm0 909 0 R>>/ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[306.003 319.277 362.001 263.279]>>stream
+/CS0 cs 0.616 0.196 0.196 scn
+1 i
+/GS0 gs
+q 1 0 0 1 334.002 303.2773 cm
+0 0 m
+6.607 0.011 12.01 -5.392 11.999 -11.999 c
+12.008 -18.614 6.61 -24.008 0 -23.998 c
+-6.61 -24.008 -12.008 -18.614 -11.999 -11.999 c
+-12.01 -5.392 -6.607 0.011 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 917 0 obj <</Subtype/Form/Length 248/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 912 0 R/Resources<</XObject<</Fm0 916 0 R>>/ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[321.996 217.271 334.002 205.274]>>stream
+/CS0 cs 0.616 0.196 0.196 scn
+1 i
+/GS0 gs
+q 1 0 0 1 327.999 212.2715 cm
+0 0 m
+0.55 0.003 1.007 -0.454 1.003 -0.994 c
+1.008 -1.537 0.543 -2.002 0 -1.997 c
+-0.543 -2.002 -1.008 -1.537 -1.003 -0.994 c
+-1.007 -0.454 -0.55 0.003 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 927 0 obj <</Subtype/Form/Length 262/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 922 0 R/Resources<</XObject<</Fm0 926 0 R>>/ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[295.671 461.774 351.669 405.776]>>stream
+/CS0 cs 0.196 0.322 0.616 scn
+1 i
+/GS0 gs
+q 1 0 0 1 323.6699 445.7744 cm
+0 0 m
+6.607 0.011 12.01 -5.392 11.999 -11.999 c
+12.01 -18.606 6.607 -24.009 0 -23.998 c
+-6.615 -24.007 -12.009 -18.609 -11.999 -11.999 c
+-12.009 -5.389 -6.615 0.009 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 935 0 obj <</Subtype/Form/Length 241/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 930 0 R/Resources<</XObject<</Fm0 934 0 R>>/ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[309.171 492.275 321.168 480.278]>>stream
+/CS0 cs 0.196 0.322 0.616 scn
+1 i
+/GS0 gs
+q 1 0 0 1 315.165 487.2754 cm
+0 0 m
+0.548 0.003 1.005 -0.451 1.003 -1.003 c
+1.007 -1.542 0.55 -2 0 -1.997 c
+-0.546 -2 -0.997 -1.549 -0.994 -1.003 c
+-0.995 -0.445 -0.544 0.003 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 945 0 obj <</Subtype/Form/Length 262/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 940 0 R/Resources<</XObject<</Fm0 944 0 R>>/ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[156.837 462.278 212.835 406.271]>>stream
+/CS0 cs 0.196 0.322 0.616 scn
+1 i
+/GS0 gs
+q 1 0 0 1 184.8359 446.2783 cm
+0 0 m
+6.607 0.011 12.01 -5.392 11.999 -11.999 c
+12.008 -18.617 6.606 -24.018 0 -24.007 c
+-6.606 -24.018 -12.008 -18.617 -11.999 -11.999 c
+-12.01 -5.392 -6.607 0.011 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 952 0 obj <</Subtype/Form/Length 240/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 947 0 R/Resources<</XObject<</Fm0 951 0 R>>/ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[183.873 501.023 195.879 489.026]>>stream
+/CS0 cs 0.196 0.322 0.616 scn
+1 i
+/GS0 gs
+q 1 0 0 1 189.876 496.0234 cm
+0 0 m
+0.55 0.003 1.007 -0.455 1.003 -0.994 c
+1.005 -1.546 0.548 -2 0 -1.997 c
+-0.548 -2 -1.005 -1.546 -1.003 -0.994 c
+-1.007 -0.455 -0.55 0.003 0 0 c
+f
+Q
+q
+/Fm0 Do
+Q
+ endstream endobj 947 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 951 0 obj <</Subtype/Form/Length 482/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 948 0 R/Resources<</XObject<</Fm0 950 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[183.873 501.023 195.879 489.026]>>stream
+q
+189.876 496.023 m
+189.876 501.023 l
+193.188 501.023 195.879 498.341 195.879 495.029 c
+195.879 491.708 193.188 489.026 189.876 489.026 c
+186.564 489.026 183.873 491.708 183.873 495.029 c
+183.873 498.341 186.564 501.023 189.876 501.023 c
+189.876 496.023 l
+189.326 496.026 188.869 495.569 188.873 495.029 c
+188.871 494.478 189.328 494.023 189.876 494.026 c
+190.424 494.023 190.881 494.478 190.879 495.029 c
+190.883 495.569 190.426 496.026 189.876 496.023 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 948 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 950 0 obj <</Subtype/Form/Length 11006/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 949 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[183.873 501.023 195.879 489.026]>>stream
+/CS0 cs 0.2 0.325 0.624 scn
+1 i
+/GS0 gs
+q 1 0 0 1 189.876 496.0234 cm
+0 0 m
+0 5 l
+3.312 5 6.003 2.318 6.003 -0.994 c
+6.003 -4.315 3.312 -6.997 0 -6.997 c
+-3.312 -6.997 -6.003 -4.315 -6.003 -0.994 c
+-6.003 2.318 -3.312 5 0 5 c
+0 0 l
+-0.55 0.003 -1.007 -0.455 -1.003 -0.994 c
+-1.005 -1.546 -0.548 -2 0 -1.997 c
+0.548 -2 1.005 -1.546 1.003 -0.994 c
+1.007 -0.455 0.55 0.003 0 0 c
+f
+Q
+q 1 0 0 1 189.876 496.9482 cm
+0 0 m
+-0.013 -0.041 -0.073 -0.074 -0.083 -0.116 c
+-0.111 -0.248 -0.02 -0.426 0 -0.56 c
+0 -0.925 l
+-0.55 -0.922 -1.007 -1.379 -1.003 -1.919 c
+-1.005 -2.471 -0.548 -2.925 0 -2.922 c
+0.548 -2.925 1.005 -2.471 1.003 -1.919 c
+1.007 -1.379 0.55 -0.922 0 -0.925 c
+0 -0.56 l
+0.034 -0.557 0.079 -0.553 0.113 -0.55 c
+0.142 -0.55 0.184 -0.537 0.21 -0.549 c
+1.046 -1.473 l
+1.442 -2.154 1.79 -2.107 1.805 -2.105 c
+2.057 -2.065 3.182 -0.618 1.901 0.191 c
+1.598 0.383 1.274 0.41 1.132 0.395 c
+0 0 l
+0 4.075 l
+3.312 4.075 6.003 1.393 6.003 -1.919 c
+6.003 -5.24 3.312 -7.922 0 -7.922 c
+-3.312 -7.922 -6.003 -5.24 -6.003 -1.919 c
+-6.003 1.393 -3.312 4.075 0 4.075 c
+0 0 l
+f
+Q
+0.196 0.318 0.612 scn
+q 1 0 0 1 189.876 497.0903 cm
+0 0 m
+-0.03 -0.092 -0.164 -0.17 -0.185 -0.265 c
+-0.222 -0.433 -0.125 -0.678 -0.188 -0.838 c
+-0.188 -0.839 -0.237 -0.941 -0.403 -1.05 c
+-1.156 -1.54 -1.044 -2.156 -0.992 -2.333 c
+-0.807 -2.959 -0.146 -3.264 0.451 -2.999 c
+0.651 -2.909 0.79 -2.772 0.872 -2.69 c
+1.143 -2.422 1.548 -2.621 1.836 -2.412 c
+2.433 -1.979 2.576 -1.57 2.629 -1.416 c
+2.85 -0.785 2.461 0.134 1.628 0.371 c
+0.853 0.591 0.002 0.007 0 0 c
+0 3.933 l
+3.312 3.933 6.003 1.251 6.003 -2.061 c
+6.003 -5.382 3.312 -8.064 0 -8.064 c
+-3.312 -8.064 -6.003 -5.382 -6.003 -2.061 c
+-6.003 1.251 -3.312 3.933 0 3.933 c
+0 0 l
+f
+Q
+0.192 0.31 0.596 scn
+q 1 0 0 1 189.876 497.231 cm
+0 0 m
+-0.294 -0.832 -1.296 -1.347 -1.079 -2.407 c
+-0.939 -3.088 -0.171 -3.557 0.648 -3.165 c
+2.592 -2.234 2.592 -2.234 2.763 -1.674 c
+3.159 -0.375 2.125 0.263 1.731 0.384 c
+0.831 0.661 0.003 0.008 0 0 c
+0 3.792 l
+3.312 3.792 6.003 1.11 6.003 -2.202 c
+6.003 -5.522 3.312 -8.205 0 -8.205 c
+-3.312 -8.205 -6.003 -5.522 -6.003 -2.202 c
+-6.003 1.11 -3.312 3.792 0 3.792 c
+0 0 l
+f
+Q
+0.188 0.302 0.58 scn
+q 1 0 0 1 189.876 497.3701 cm
+0 0 m
+-0.353 -0.867 -1.383 -1.429 -1.146 -2.56 c
+-1.024 -3.139 -0.35 -3.806 0.712 -3.399 c
+2.444 -2.735 2.625 -2.666 2.946 -1.778 c
+2.952 -1.763 3.406 -0.235 2.053 0.316 c
+0.838 0.812 0.004 0.01 0 0 c
+0 3.653 l
+3.312 3.653 6.003 0.971 6.003 -2.341 c
+6.003 -5.662 3.312 -8.344 0 -8.344 c
+-3.312 -8.344 -6.003 -5.662 -6.003 -2.341 c
+-6.003 0.971 -3.312 3.653 0 3.653 c
+0 0 l
+f
+Q
+0.18 0.294 0.569 scn
+q 1 0 0 1 189.876 497.5073 cm
+0 0 m
+-0.193 -0.417 -0.585 -0.692 -0.795 -1.098 c
+-1.093 -1.708 l
+-1.262 -2.107 -1.291 -2.435 -1.188 -2.804 c
+-1.126 -3.032 -0.727 -4.136 0.984 -3.565 c
+4.73 -2.315 2.784 0.034 2.453 0.246 c
+1.442 0.896 0.101 0.218 0 0 c
+0 3.516 l
+3.312 3.516 6.003 0.834 6.003 -2.478 c
+6.003 -5.799 3.312 -8.481 0 -8.481 c
+-3.312 -8.481 -6.003 -5.799 -6.003 -2.478 c
+-6.003 0.834 -3.312 3.516 0 3.516 c
+0 0 l
+f
+Q
+0.176 0.286 0.553 scn
+q 1 0 0 1 189.876 497.6602 cm
+0 0 m
+-0.013 -0.025 -0.053 -0.04 -0.076 -0.058 c
+-0.365 -0.276 -0.692 -0.523 -1.173 -1.803 c
+-1.244 -1.989 -1.457 -2.557 -1.185 -3.151 c
+-0.782 -4.034 0.179 -4.205 1.672 -3.658 c
+3.872 -2.853 3.987 -0.377 2.341 0.401 c
+1.366 0.863 0.123 0.247 0 0 c
+0 3.363 l
+3.312 3.363 6.003 0.681 6.003 -2.631 c
+6.003 -5.952 3.312 -8.634 0 -8.634 c
+-3.312 -8.634 -6.003 -5.952 -6.003 -2.631 c
+-6.003 0.681 -3.312 3.363 0 3.363 c
+0 0 l
+f
+Q
+0.173 0.278 0.541 scn
+q 1 0 0 1 189.876 497.8516 cm
+0 0 m
+-0.034 -0.067 -0.142 -0.105 -0.203 -0.15 c
+-0.741 -0.551 -1.014 -1.287 -1.254 -1.937 c
+-1.386 -2.294 -1.492 -2.833 -1.246 -3.37 c
+-0.614 -4.746 1.248 -4.148 1.804 -3.932 c
+4.133 -3.027 4.261 -0.305 2.51 0.419 c
+1.108 0.999 0.006 0.012 0 0 c
+0 3.172 l
+3.312 3.172 6.003 0.49 6.003 -2.822 c
+6.003 -6.143 3.312 -8.825 0 -8.825 c
+-3.312 -8.825 -6.003 -6.143 -6.003 -2.822 c
+-6.003 0.49 -3.312 3.172 0 3.172 c
+0 0 l
+f
+Q
+0.169 0.275 0.525 scn
+q 1 0 0 1 189.876 498.0396 cm
+0 0 m
+-0.037 -0.07 -0.152 -0.104 -0.217 -0.148 c
+-0.223 -0.151 -0.766 -0.542 -1.153 -1.542 c
+-1.498 -2.429 -1.549 -2.937 -1.35 -3.481 c
+-1.145 -4.045 -0.491 -4.904 1.578 -4.323 c
+4.082 -3.621 4.629 -0.761 2.993 0.316 c
+1.701 1.166 0.079 0.148 0 0 c
+0 2.984 l
+3.312 2.984 6.003 0.302 6.003 -3.01 c
+6.003 -6.331 3.312 -9.013 0 -9.013 c
+-3.312 -9.013 -6.003 -6.331 -6.003 -3.01 c
+-6.003 0.302 -3.312 2.984 0 2.984 c
+0 0 l
+f
+Q
+0.165 0.267 0.51 scn
+q 1 0 0 1 189.876 498.2236 cm
+0 0 m
+-0.175 -0.317 -0.542 -0.437 -0.748 -0.722 c
+-1.027 -1.109 -1.128 -1.336 -1.241 -1.614 c
+-1.322 -1.817 -1.715 -2.863 -1.448 -3.592 c
+-0.849 -5.223 1.105 -4.776 1.689 -4.601 c
+4.425 -3.778 5.003 -0.758 3.22 0.385 c
+1.946 1.2 0.234 0.423 0 0 c
+0 2.8 l
+3.312 2.8 6.003 0.118 6.003 -3.194 c
+6.003 -6.515 3.312 -9.197 0 -9.197 c
+-3.312 -9.197 -6.003 -6.515 -6.003 -3.194 c
+-6.003 0.118 -3.312 2.8 0 2.8 c
+0 0 l
+f
+Q
+0.161 0.259 0.498 scn
+q 1 0 0 1 189.876 498.4546 cm
+0 0 m
+-0.06 -0.132 -0.265 -0.21 -0.386 -0.291 c
+-0.759 -0.542 -1.229 -1.473 -1.327 -1.735 c
+-1.444 -2.049 -1.803 -3.137 -1.475 -3.94 c
+-0.715 -5.801 1.956 -4.866 1.983 -4.856 c
+5.297 -3.576 5.172 -0.368 3.116 0.573 c
+1.411 1.354 0.007 0.017 0 0 c
+0 2.569 l
+3.312 2.569 6.003 -0.113 6.003 -3.425 c
+6.003 -6.746 3.312 -9.428 0 -9.428 c
+-3.312 -9.428 -6.003 -6.746 -6.003 -3.425 c
+-6.003 -0.113 -3.312 2.569 0 2.569 c
+0 0 l
+f
+Q
+0.153 0.251 0.482 scn
+q 1 0 0 1 189.876 498.7373 cm
+0 0 m
+-0.04 -0.083 -0.167 -0.135 -0.239 -0.193 c
+-0.737 -0.595 -1.131 -1.172 -1.412 -1.908 c
+-1.719 -2.716 -1.736 -3.696 -1.576 -4.141 c
+-0.861 -6.127 1.881 -5.307 1.908 -5.298 c
+5.872 -3.968 5.348 -0.494 3.424 0.518 c
+1.628 1.463 0.058 0.121 0 0 c
+0 2.286 l
+3.312 2.286 6.003 -0.396 6.003 -3.708 c
+6.003 -7.029 3.312 -9.711 0 -9.711 c
+-3.312 -9.711 -6.003 -7.029 -6.003 -3.708 c
+-6.003 -0.396 -3.312 2.286 0 2.286 c
+0 0 l
+f
+Q
+0.149 0.243 0.467 scn
+q 1 0 0 1 189.876 499.0234 cm
+0 0 m
+-0.045 -0.106 -0.21 -0.167 -0.302 -0.236 c
+-0.488 -0.374 -1.13 -0.939 -1.627 -2.442 c
+-1.764 -2.855 -1.88 -3.934 -1.545 -4.673 c
+-1.028 -5.816 0.793 -6.212 2.513 -5.554 c
+6.321 -4.099 5.738 -0.283 3.153 0.723 c
+1.353 1.423 0.007 0.017 0 0 c
+0 2 l
+3.312 2 6.003 -0.682 6.003 -3.994 c
+6.003 -7.315 3.312 -9.997 0 -9.997 c
+-3.312 -9.997 -6.003 -7.315 -6.003 -3.994 c
+-6.003 -0.682 -3.312 2 0 2 c
+0 0 l
+f
+Q
+0.145 0.235 0.455 scn
+q 1 0 0 1 189.876 499.4067 cm
+0 0 m
+-0.163 -0.362 -0.542 -0.515 -0.779 -0.805 c
+-0.948 -1.011 -1.049 -1.26 -1.205 -1.475 c
+-1.361 -1.69 -1.461 -1.951 -1.723 -2.734 c
+-2.048 -3.705 -1.823 -4.543 -1.66 -4.957 c
+-1.17 -6.199 0.623 -6.718 2.422 -6.139 c
+7.03 -4.656 5.827 -0.75 3.286 0.539 c
+1.422 1.485 0.008 0.018 0 0 c
+0 1.617 l
+3.312 1.617 6.003 -1.065 6.003 -4.377 c
+6.003 -7.698 3.312 -10.38 0 -10.38 c
+-3.312 -10.38 -6.003 -7.698 -6.003 -4.377 c
+-6.003 -1.065 -3.312 1.617 0 1.617 c
+0 0 l
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 189.876 499.8311 cm
+0 0 m
+-0.128 -0.296 -0.442 -0.404 -0.638 -0.631 c
+-0.788 -0.804 -0.893 -1.009 -1.031 -1.191 c
+-1.148 -1.346 -1.62 -2.354 -1.623 -2.361 c
+-2.171 -3.896 -2.053 -4.61 -1.842 -5.154 c
+-0.963 -7.425 1.653 -7.025 2.586 -6.68 c
+3.893 -6.196 6.611 -5.189 5.553 -2.521 c
+5.843 -3.224 6.003 -3.994 6.003 -4.802 c
+6.003 -8.123 3.312 -10.805 0 -10.805 c
+-3.312 -10.805 -6.003 -8.123 -6.003 -4.802 c
+-6.003 -1.49 -3.312 1.192 0 1.192 c
+0 0 l
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 189.876 500.2959 cm
+0 0 m
+-0.037 -0.078 -0.154 -0.129 -0.22 -0.184 c
+-1.238 -1.037 -1.832 -2.884 -1.837 -2.903 c
+-2.426 -4.762 -2.011 -5.635 -1.875 -5.921 c
+-0.599 -8.601 3.356 -7.148 3.396 -7.133 c
+4.442 -6.725 6.193 -6.042 5.899 -4.15 c
+5.967 -4.512 6.003 -4.885 6.003 -5.267 c
+6.003 -8.587 3.312 -11.27 0 -11.27 c
+-3.312 -11.27 -6.003 -8.587 -6.003 -5.267 c
+-6.003 -1.955 -3.312 0.728 0 0.728 c
+0 0 l
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 189.876 500.7388 cm
+0 0 m
+-0.038 -0.067 -0.155 -0.091 -0.221 -0.129 c
+-1.151 -0.674 -1.646 -2.172 -2.007 -3.267 c
+-2.012 -3.284 -2.546 -5.066 -2.073 -6.279 c
+-1.012 -9 2.932 -7.99 3.099 -7.945 c
+4.318 -7.622 5.989 -7.18 6.001 -5.577 c
+6.002 -5.621 6.003 -5.665 6.003 -5.709 c
+6.003 -9.03 3.312 -11.712 0 -11.712 c
+-3.312 -11.712 -6.003 -9.03 -6.003 -5.709 c
+-6.003 -2.397 -3.312 0.285 0 0.285 c
+0 0 l
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 189.876 501.0112 cm
+0 0 m
+-0.043 -0.052 -0.154 -0.029 -0.221 -0.042 c
+-0.696 -0.132 -1.348 -0.689 -1.732 -1.731 c
+-2.576 -4.014 -2.459 -5.548 -2.314 -6.26 c
+-1.78 -8.88 1.72 -8.614 1.755 -8.611 c
+4.215 -8.371 5.7 -8.227 5.951 -6.778 c
+5.561 -9.721 3.043 -11.985 0 -11.985 c
+-3.312 -11.985 -6.003 -9.303 -6.003 -5.982 c
+-6.003 -2.67 -3.312 0.012 0 0.012 c
+0 0 l
+f
+Q
+0.122 0.2 0.384 scn
+q 1 0 0 1 188.9707 500.9468 cm
+0 0 m
+-1.737 -0.589 -1.75 -4.504 -1.75 -4.544 c
+-1.745 -7.052 -0.74 -7.832 0.016 -8.2 c
+1.799 -9.068 6.088 -9.359 6.659 -7.635 c
+5.92 -10.116 3.622 -11.92 0.905 -11.92 c
+-2.407 -11.92 -5.098 -9.238 -5.098 -5.917 c
+-5.098 -2.856 -2.799 -0.333 0.165 0.031 c
+0.115 0.022 0.049 0.013 0 0 c
+f
+Q
+0.118 0.192 0.369 scn
+q 1 0 0 1 187.6411 500.5234 cm
+0 0 m
+-1.064 -0.939 -0.813 -4.868 -0.54 -5.601 c
+0.43 -8.206 2.406 -8.584 3.21 -8.625 c
+4.273 -8.681 5.3 -9.068 6.38 -8.967 c
+6.693 -8.938 7.267 -8.802 7.587 -8.217 c
+6.594 -10.165 4.569 -11.497 2.235 -11.497 c
+-1.077 -11.497 -3.768 -8.815 -3.768 -5.494 c
+-3.768 -2.81 -2 -0.54 0.432 0.225 c
+0.372 0.201 0.292 0.168 0.231 0.144 c
+0.162 0.102 0.062 0.054 0 0 c
+f
+Q
+0.204 0.333 0.639 scn
+q 1 0 0 1 191.4565 495.208 cm
+0 0 m
+-0.097 0.069 -0.097 0.069 -0.519 0.587 c
+-0.662 0.762 -0.835 0.91 -0.974 1.089 c
+-1.125 1.285 -1.232 1.593 y
+-1.227 1.612 -0.03 2.438 0.591 1.363 c
+1.026 0.61 0.244 -0.13 0.233 -0.131 c
+0.153 -0.143 0.065 -0.046 0 0 c
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 192.4463 500.4146 cm
+0 0 m
+-1.295 0.463 -2.255 -0.325 -2.57 -0.583 c
+-2.57 0.609 l
+-1.402 0.609 -0.312 0.275 0.611 -0.302 c
+0.521 -0.251 0.401 -0.185 0.312 -0.135 c
+0.218 -0.094 0.096 -0.034 0 0 c
+f
+Q
+0.208 0.337 0.655 scn
+q 1 0 0 1 191.4961 495.46 cm
+0 0 m
+-0.335 0.354 l
+-0.472 0.524 -0.626 0.679 -0.757 0.854 c
+-0.976 1.148 -1.021 1.268 -1.02 1.273 c
+-1.015 1.287 -0.029 1.7 0.33 0.953 c
+0.59 0.409 0.174 -0.12 0.167 -0.121 c
+0.106 -0.131 0.048 -0.04 0 0 c
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 191.6431 500.7461 cm
+0 0 m
+-0.651 0.121 -1.163 -0.01 -1.767 -0.45 c
+-1.767 0.277 l
+-1.038 0.277 -0.339 0.147 0.307 -0.09 c
+0.224 -0.065 0.112 -0.032 0.029 -0.006 c
+0.02 -0.004 0.009 -0.001 0 0 c
+f
+Q
+0.216 0.345 0.667 scn
+q 1 0 0 1 191.5 495.7261 cm
+0 0 m
+-0.004 0.004 -0.533 0.573 -0.71 0.862 c
+-0.568 0.875 -0.483 0.883 -0.265 0.809 c
+-0.18 0.781 -0.083 0.699 -0.025 0.631 c
+0.033 0.563 0.091 0.45 0.104 0.362 c
+0.135 0.141 0.099 0.019 0.074 -0.062 c
+0.052 -0.043 0.021 -0.021 0 0 c
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 190.7813 500.9458 cm
+0 0 m
+-0.314 -0.005 -0.487 -0.009 -0.905 -0.207 c
+-0.905 0.078 l
+-0.519 0.078 -0.142 0.041 0.225 -0.028 c
+0.157 -0.02 0.067 -0.003 0 0 c
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 189.876 501.0112 cm
+0 0 m
+0 0.012 l
+0.072 0.012 0.144 0.011 0.215 0.008 c
+0.15 0.006 0.046 -0.044 0 0 c
+f
+Q
+ endstream endobj 949 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 940 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 944 0 obj <</Subtype/Form/Length 482/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 941 0 R/Resources<</XObject<</Fm0 943 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[156.837 462.278 212.835 406.271]>>stream
+q
+184.836 446.278 m
+184.836 462.278 l
+200.298 462.278 212.835 449.741 212.835 434.279 c
+212.835 418.809 200.298 406.271 184.836 406.271 c
+169.374 406.271 156.837 418.809 156.837 434.279 c
+156.837 449.741 169.374 462.278 184.836 462.278 c
+184.836 446.278 l
+178.229 446.289 172.826 440.887 172.837 434.279 c
+172.828 427.661 178.229 422.261 184.836 422.271 c
+191.442 422.261 196.844 427.661 196.835 434.279 c
+196.846 440.887 191.443 446.289 184.836 446.278 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 941 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 943 0 obj <</Subtype/Form/Length 13525/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 942 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[156.837 462.278 212.835 406.271]>>stream
+/CS0 cs 0.208 0.337 0.655 scn
+1 i
+/GS0 gs
+q 1 0 0 1 184.8359 446.2783 cm
+0 0 m
+0 16 l
+15.462 16 27.999 3.463 27.999 -11.999 c
+27.999 -27.47 15.462 -40.007 0 -40.007 c
+-15.462 -40.007 -27.999 -27.47 -27.999 -11.999 c
+-27.999 3.463 -15.462 16 0 16 c
+0 0 l
+-6.607 0.011 -12.01 -5.392 -11.999 -11.999 c
+-12.008 -18.617 -6.606 -24.018 0 -24.007 c
+6.606 -24.018 12.008 -18.617 11.999 -11.999 c
+12.01 -5.392 6.607 0.011 0 0 c
+f
+Q
+q 1 0 0 1 184.8359 451.4419 cm
+0 0 m
+0 -0.468 l
+0 -5.164 l
+-6.607 -5.153 -12.01 -10.555 -11.999 -17.163 c
+-12.008 -23.781 -6.606 -29.181 0 -29.17 c
+6.606 -29.181 12.008 -23.781 11.999 -17.163 c
+12.01 -10.555 6.607 -5.153 0 -5.164 c
+0 -0.468 l
+0.316 -0.694 0.738 -0.996 1.055 -1.223 c
+3.817 -3.661 7.459 -4.869 10 -7.617 c
+12.018 -9.8 13.458 -12.461 14.279 -15.528 c
+15.076 -18.507 16.901 -19.346 16.917 -19.348 c
+18.874 -19.542 24.735 -10.485 17.857 -2.241 c
+10.879 6.124 0.769 1.958 0 0 c
+0 10.836 l
+15.462 10.836 27.999 -1.701 27.999 -17.163 c
+27.999 -32.633 15.462 -45.17 0 -45.17 c
+-15.462 -45.17 -27.999 -32.633 -27.999 -17.163 c
+-27.999 -1.701 -15.462 10.836 0 10.836 c
+0 0 l
+f
+Q
+0.204 0.333 0.639 scn
+q 1 0 0 1 184.8359 453.2891 cm
+0 0 m
+-0.296 -0.712 -1.487 -1.168 -1.735 -1.898 c
+-1.987 -2.638 -2.003 -3.873 -1.53 -4.494 c
+-1.227 -4.893 -0.45 -4.945 0 -5.167 c
+0 -7.011 l
+-6.607 -7 -12.01 -12.402 -11.999 -19.01 c
+-12.008 -25.628 -6.606 -31.028 0 -31.018 c
+6.606 -31.028 12.008 -25.628 11.999 -19.01 c
+12.01 -12.402 6.607 -7 0 -7.011 c
+0 -5.167 l
+0.338 -5.201 0.788 -5.245 1.126 -5.278 c
+2.249 -5.476 12.143 -7.557 13.761 -19.538 c
+13.896 -20.531 13.436 -21.605 14.171 -22.516 c
+14.636 -23.09 15.724 -23.507 16.459 -23.43 c
+20.584 -22.993 26.416 -9.568 15.896 -1.312 c
+7.943 4.929 0.035 0.084 0 0 c
+0 8.989 l
+15.462 8.989 27.999 -3.548 27.999 -19.01 c
+27.999 -34.48 15.462 -47.018 0 -47.018 c
+-15.462 -47.018 -27.999 -34.48 -27.999 -19.01 c
+-27.999 -3.548 -15.462 8.989 0 8.989 c
+0 0 l
+f
+Q
+0.2 0.325 0.624 scn
+q 1 0 0 1 184.8359 454.4082 cm
+0 0 m
+-0.627 -1.109 -1.866 -1.525 -2.708 -2.391 c
+-4.764 -4.503 -4.447 -6.209 -4.44 -6.223 c
+-4.355 -6.386 -4.355 -6.386 0 -7.408 c
+0 -8.13 l
+-6.607 -8.119 -12.01 -13.521 -11.999 -20.129 c
+-12.008 -26.747 -6.606 -32.147 0 -32.137 c
+6.606 -32.147 12.008 -26.747 11.999 -20.129 c
+12.01 -13.521 6.607 -8.119 0 -8.13 c
+0 -7.408 l
+0.312 -7.428 0.727 -7.455 1.039 -7.475 c
+5.587 -8.118 13.156 -12.018 12.674 -22.551 c
+12.559 -25.065 12.662 -26.483 12.98 -26.764 c
+14.309 -27.938 23.357 -23.699 22.629 -14.042 c
+21.27 4.006 1.142 2.02 0 0 c
+0 7.87 l
+15.462 7.87 27.999 -4.667 27.999 -20.129 c
+27.999 -35.6 15.462 -48.137 0 -48.137 c
+-15.462 -48.137 -27.999 -35.6 -27.999 -20.129 c
+-27.999 -4.667 -15.462 7.87 0 7.87 c
+0 0 l
+f
+Q
+0.196 0.318 0.612 scn
+q 1 0 0 1 184.8359 455.3335 cm
+0 0 m
+-0.223 -0.377 -0.896 -0.494 -1.279 -0.706 c
+-3.984 -2.198 -4.352 -2.882 -7.218 -8.204 c
+-10.977 -15.407 l
+-12.034 -17.649 -12.409 -19.973 -12.123 -22.512 c
+-11.368 -29.209 -4.441 -35.048 3.701 -32.84 c
+16.505 -28.457 l
+19.639 -26.39 21.523 -23.894 22.614 -20.364 c
+24.61 -13.908 21.812 -4.74 13.674 -0.575 c
+6.26 3.219 0.029 0.049 0 0 c
+0 6.945 l
+15.462 6.945 27.999 -5.592 27.999 -21.054 c
+27.999 -36.525 15.462 -49.062 0 -49.062 c
+-15.462 -49.062 -27.999 -36.525 -27.999 -21.054 c
+-27.999 -5.592 -15.462 6.945 0 6.945 c
+0 0 l
+f
+Q
+0.192 0.31 0.596 scn
+q 1 0 0 1 184.8359 456.1333 cm
+0 0 m
+-0.174 -0.267 -0.682 -0.3 -0.974 -0.428 c
+-3.27 -1.438 -6.363 -4.313 -7.593 -6.58 c
+-13.39 -17.263 -12.999 -20.654 -12.686 -23.38 c
+-12.044 -28.948 -6.307 -36.34 3.975 -34.525 c
+32.478 -29.493 24.483 -7.887 15.417 -1.844 c
+7.621 3.352 0.038 0.059 0 0 c
+0 6.145 l
+15.462 6.145 27.999 -6.392 27.999 -21.854 c
+27.999 -37.325 15.462 -49.862 0 -49.862 c
+-15.462 -49.862 -27.999 -37.325 -27.999 -21.854 c
+-27.999 -6.392 -15.462 6.145 0 6.145 c
+0 0 l
+f
+Q
+0.188 0.302 0.58 scn
+q 1 0 0 1 184.8359 456.834 cm
+0 0 m
+-0.26 -0.393 -1.01 -0.429 -1.443 -0.612 c
+-4.281 -1.817 -7.531 -4.969 -9.346 -8.278 c
+-13.498 -15.848 -13.757 -21.086 -13.243 -24.147 c
+-12.335 -29.562 -7.257 -38.122 6.017 -35.862 c
+29.657 -31.837 27.572 -10.232 15.691 -2.188 c
+7.725 3.206 0.039 0.058 0 0 c
+0 5.444 l
+15.462 5.444 27.999 -7.093 27.999 -22.555 c
+27.999 -38.025 15.462 -50.563 0 -50.563 c
+-15.462 -50.563 -27.999 -38.025 -27.999 -22.555 c
+-27.999 -7.093 -15.462 5.444 0 5.444 c
+0 0 l
+f
+Q
+0.18 0.294 0.569 scn
+q 1 0 0 1 184.8359 457.5 cm
+0 0 m
+-0.27 -0.397 -1.042 -0.411 -1.488 -0.586 c
+-3.111 -1.225 -7.25 -3.37 -10.633 -9.471 c
+-11.685 -11.368 -15.021 -18.085 -13.796 -24.879 c
+-12.453 -32.328 -5.461 -39.37 6.714 -37.227 c
+28.95 -33.313 28.976 -11.259 15.609 -2.301 c
+7.856 2.895 0.038 0.056 0 0 c
+0 4.778 l
+15.462 4.778 27.999 -7.759 27.999 -23.221 c
+27.999 -38.691 15.462 -51.229 0 -51.229 c
+-15.462 -51.229 -27.999 -38.691 -27.999 -23.221 c
+-27.999 -7.759 -15.462 4.778 0 4.778 c
+0 0 l
+f
+Q
+0.176 0.286 0.553 scn
+q 1 0 0 1 184.8359 458.1108 cm
+0 0 m
+-0.285 -0.403 -1.085 -0.384 -1.55 -0.549 c
+-2.14 -0.758 -7.426 -2.783 -11.14 -9.4 c
+-12.536 -11.888 -15.643 -18.441 -14.343 -25.555 c
+-13.274 -31.4 -7.567 -40.72 7.05 -38.576 c
+28.069 -35.492 30.907 -13.131 16.17 -2.838 c
+7.979 2.883 0.04 0.057 0 0 c
+0 4.167 l
+15.462 4.167 27.999 -8.37 27.999 -23.832 c
+27.999 -39.302 15.462 -51.839 0 -51.839 c
+-15.462 -51.839 -27.999 -39.302 -27.999 -23.832 c
+-27.999 -8.37 -15.462 4.167 0 4.167 c
+0 0 l
+f
+Q
+0.173 0.278 0.541 scn
+q 1 0 0 1 184.8359 458.6836 cm
+0 0 m
+-0.294 -0.407 -1.113 -0.365 -1.59 -0.521 c
+-3.037 -0.996 -8.057 -3.068 -11.887 -9.807 c
+-12.95 -11.676 -16.305 -18.381 -14.886 -26.192 c
+-13.691 -32.767 -6.813 -41.832 7.241 -39.858 c
+28.692 -36.845 31.476 -13.851 16.374 -3.144 c
+8.08 2.736 0.041 0.056 0 0 c
+0 3.595 l
+15.462 3.595 27.999 -8.942 27.999 -24.404 c
+27.999 -39.875 15.462 -52.412 0 -52.412 c
+-15.462 -52.412 -27.999 -39.875 -27.999 -24.404 c
+-27.999 -8.942 -15.462 3.595 0 3.595 c
+0 0 l
+f
+Q
+0.169 0.275 0.525 scn
+q 1 0 0 1 184.8359 459.2207 cm
+0 0 m
+-0.327 -0.44 -1.224 -0.37 -1.749 -0.528 c
+-5.52 -1.667 -9.766 -5.26 -12.073 -9.267 c
+-15.394 -15.036 -16.522 -20.933 -15.426 -26.792 c
+-13.856 -35.181 -5.227 -43.018 7.675 -41.021 c
+29.388 -37.66 31.678 -13.959 16.092 -3.122 c
+8.188 2.374 0.041 0.052 0 0 c
+0 3.058 l
+15.462 3.058 27.999 -9.479 27.999 -24.941 c
+27.999 -40.412 15.462 -52.949 0 -52.949 c
+-15.462 -52.949 -27.999 -40.412 -27.999 -24.941 c
+-27.999 -9.479 -15.462 3.058 0 3.058 c
+0 0 l
+f
+Q
+0.165 0.267 0.51 scn
+q 1 0 0 1 184.8359 459.7354 cm
+0 0 m
+-0.315 -0.413 -1.169 -0.321 -1.671 -0.458 c
+-5.628 -1.543 -10.186 -5.222 -12.509 -9.206 c
+-13.794 -11.411 -17.706 -18.119 -15.958 -27.37 c
+-14.312 -36.089 -5.369 -44.235 7.962 -42.157 c
+29.829 -38.748 32.261 -15.07 16.713 -3.752 c
+8.241 2.415 0.041 0.054 0 0 c
+0 2.543 l
+15.462 2.543 27.999 -9.994 27.999 -25.456 c
+27.999 -40.927 15.462 -53.464 0 -53.464 c
+-15.462 -53.464 -27.999 -40.927 -27.999 -25.456 c
+-27.999 -9.994 -15.462 2.543 0 2.543 c
+0 0 l
+f
+Q
+0.161 0.259 0.498 scn
+q 1 0 0 1 184.8359 460.208 cm
+0 0 m
+-0.326 -0.417 -1.197 -0.297 -1.71 -0.424 c
+-5.005 -1.241 -10.022 -4.174 -13.317 -9.752 c
+-16.642 -15.38 -17.707 -21.488 -16.484 -27.905 c
+-14.771 -36.893 -5.522 -45.319 8.241 -43.229 c
+29.819 -39.954 32.248 -15.425 16.845 -4.05 c
+8.507 2.107 0.042 0.053 0 0 c
+0 2.07 l
+15.462 2.07 27.999 -10.467 27.999 -25.929 c
+27.999 -41.399 15.462 -53.937 0 -53.937 c
+-15.462 -53.937 -27.999 -41.399 -27.999 -25.929 c
+-27.999 -10.467 -15.462 2.07 0 2.07 c
+0 0 l
+f
+Q
+0.153 0.251 0.482 scn
+q 1 0 0 1 184.8359 460.6479 cm
+0 0 m
+-0.165 -0.201 -0.596 -0.119 -0.851 -0.169 c
+-6.63 -1.321 -11.086 -5.48 -13.33 -8.99 c
+-17.823 -16.018 -17.959 -22.68 -17.283 -27.032 c
+-15.528 -38.313 -5.353 -45.642 6.913 -44.456 c
+29.058 -42.316 33.218 -18.568 18.588 -5.674 c
+9.722 2.142 0.051 0.062 0 0 c
+0 1.63 l
+15.462 1.63 27.999 -10.907 27.999 -26.369 c
+27.999 -41.839 15.462 -54.376 0 -54.376 c
+-15.462 -54.376 -27.999 -41.839 -27.999 -26.369 c
+-27.999 -10.907 -15.462 1.63 0 1.63 c
+0 0 l
+f
+Q
+0.149 0.243 0.467 scn
+q 1 0 0 1 184.8359 461.0591 cm
+0 0 m
+-0.345 -0.419 -1.243 -0.245 -1.775 -0.35 c
+-5.333 -1.052 -10.598 -4.013 -13.752 -8.857 c
+-18.474 -16.108 -18.606 -22.979 -17.885 -27.466 c
+-16.272 -37.507 -7.1 -46.929 7.31 -45.507 c
+29.579 -43.31 33.524 -19.12 18.666 -5.999 c
+9.679 1.938 0.05 0.061 0 0 c
+0 1.219 l
+15.462 1.219 27.999 -11.318 27.999 -26.78 c
+27.999 -42.25 15.462 -54.788 0 -54.788 c
+-15.462 -54.788 -27.999 -42.25 -27.999 -26.78 c
+-27.999 -11.318 -15.462 1.219 0 1.219 c
+0 0 l
+f
+Q
+0.145 0.235 0.455 scn
+q 1 0 0 1 184.8359 461.4141 cm
+0 0 m
+-0.359 -0.424 -1.279 -0.213 -1.827 -0.305 c
+-2.571 -0.429 -9.239 -1.713 -14.035 -8.521 c
+-19.337 -16.049 -19.04 -23.602 -18.666 -26.5 c
+-16.79 -41.041 -4.557 -47.127 6.015 -46.629 c
+29.242 -45.535 34.043 -19.97 18.705 -6.311 c
+9.693 1.714 0.05 0.059 0 0 c
+0 0.864 l
+15.462 0.864 27.999 -11.673 27.999 -27.135 c
+27.999 -42.605 15.462 -55.143 0 -55.143 c
+-15.462 -55.143 -27.999 -42.605 -27.999 -27.135 c
+-27.999 -11.673 -15.462 0.864 0 0.864 c
+0 0 l
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 184.8359 461.7397 cm
+0 0 m
+-0.366 -0.422 -1.29 -0.183 -1.842 -0.262 c
+-5.616 -0.798 -11.203 -3.577 -14.553 -8.414 c
+-20.526 -17.037 -19.484 -25.015 -19.142 -27.636 c
+-17.325 -41.551 -4.721 -48.305 6.215 -47.597 c
+22.827 -46.52 31.84 -32.415 25.896 -16.796 c
+27.251 -20.083 27.999 -23.685 27.999 -27.46 c
+27.999 -42.931 15.462 -55.468 0 -55.468 c
+-15.462 -55.468 -27.999 -42.931 -27.999 -27.46 c
+-27.999 -11.999 -15.462 0.539 0 0.539 c
+0 0 l
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 184.8359 461.9951 cm
+0 0 m
+-0.38 -0.425 -1.322 -0.147 -1.889 -0.211 c
+-3.74 -0.417 -10.183 -1.633 -15.334 -8.604 c
+-20.12 -15.08 -20.496 -23.225 -19.964 -27.016 c
+-18.071 -40.504 -7.311 -49.146 6.811 -48.521 c
+13.567 -48.222 30.459 -42.962 27.513 -22.495 c
+27.832 -24.187 27.999 -25.932 27.999 -27.716 c
+27.999 -43.187 15.462 -55.724 0 -55.724 c
+-15.462 -55.724 -27.999 -43.187 -27.999 -27.716 c
+-27.999 -12.254 -15.462 0.283 0 0.283 c
+0 0 l
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 184.8359 462.186 cm
+0 0 m
+-0.389 -0.421 -1.333 -0.109 -1.905 -0.156 c
+-5.862 -0.48 -11.762 -2.986 -15.367 -7.721 c
+-21.456 -15.72 -21.121 -23.999 -20.694 -27.186 c
+-18.877 -40.772 -7.134 -50.361 6.621 -49.493 c
+16.365 -48.877 27.809 -42.692 27.992 -27.284 c
+27.997 -27.491 27.999 -27.699 27.999 -27.907 c
+27.999 -43.377 15.462 -55.915 0 -55.915 c
+-15.462 -55.915 -27.999 -43.377 -27.999 -27.907 c
+-27.999 -12.445 -15.462 0.092 0 0.092 c
+0 0 l
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 184.8359 462.2749 cm
+0 0 m
+-0.403 -0.423 -1.362 -0.067 -1.945 -0.096 c
+-5.653 -0.278 -11.171 -1.795 -16.407 -7.987 c
+-19.42 -11.549 -22.258 -18.906 -21.583 -25.522 c
+-19.025 -50.599 4.157 -50.427 5.143 -50.408 c
+17.394 -50.165 25.848 -43.174 27.755 -31.708 c
+25.94 -45.423 14.204 -56.003 0 -56.003 c
+-15.462 -56.003 -27.999 -43.466 -27.999 -27.996 c
+-27.999 -12.534 -15.462 0.003 0 0.003 c
+0 0 l
+f
+Q
+0.122 0.2 0.384 scn
+q 1 0 0 1 180.605 461.958 cm
+0 0 m
+-22.531 -4.551 -23.529 -35.032 -6.329 -46.266 c
+6.848 -54.872 25.64 -52.177 31.068 -35.689 c
+27.624 -47.255 16.911 -55.687 4.231 -55.687 c
+-11.231 -55.687 -23.768 -43.149 -23.768 -27.679 c
+-23.768 -13.386 -13.055 -1.592 0.778 0.109 c
+0.544 0.077 0.232 0.04 0 0 c
+f
+Q
+0.118 0.192 0.369 scn
+q 1 0 0 1 172.812 459.498 cm
+0 0 m
+-16.566 -9.064 -17.348 -40.201 9.316 -48.722 c
+16.64 -51.062 30.628 -50.199 36.986 -37.919 c
+32.357 -47.005 22.916 -53.227 12.024 -53.227 c
+-3.438 -53.227 -15.975 -40.689 -15.975 -25.219 c
+-15.975 -12.683 -7.734 -2.069 3.625 1.499 c
+3.1 1.309 2.399 1.057 1.873 0.867 c
+1.31 0.61 0.543 0.297 0 0 c
+f
+Q
+0.216 0.345 0.667 scn
+q 1 0 0 1 200.7622 436.103 cm
+0 0 m
+-1.706 2.422 -2.871 5.192 -4.806 7.466 c
+-5.581 8.376 -6.334 9.141 -7.046 9.74 c
+-7.103 9.788 -12.699 14.577 -12.706 14.929 c
+-12.708 15.035 -10.925 16.753 -10.74 16.825 c
+-10.058 17.086 -7.544 17.231 -6.875 17.166 c
+-5.111 16.992 -2.438 16.241 0.275 13.649 c
+3.79 10.293 4.269 6.382 4.332 5.263 c
+4.608 0.362 1.816 -1.552 1.125 -1.426 c
+0.589 -1.328 0.314 -0.445 0 0 c
+f
+Q
+0.22 0.353 0.682 scn
+q 1 0 0 1 200.8965 438.5967 cm
+0 0 m
+-1.97 2.883 -3.056 4.472 -4.87 6.595 c
+-5.072 6.832 -5.375 7.116 -5.591 7.34 c
+-5.844 7.601 -6.16 7.969 -6.419 8.224 c
+-6.913 8.711 -7.551 9.382 -8.074 9.839 c
+-9.724 11.281 -9.908 11.547 -9.911 11.595 c
+-9.914 11.657 -8.495 13.252 -8.295 13.411 c
+-8.132 13.541 -7.808 13.456 -7.601 13.433 c
+-5.32 13.184 -2.962 12.927 -0.476 10.566 c
+2.531 7.709 2.783 5.143 2.904 3.91 c
+2.938 3.565 2.929 0.875 2.709 0.41 c
+2.675 0.337 0.707 -0.875 0.645 -0.861 c
+0.33 -0.793 0.182 -0.267 0 0 c
+f
+Q
+0.224 0.361 0.694 scn
+q 1 0 0 1 199.981 442.126 cm
+0 0 m
+-0.736 0.236 -1.075 1.45 -1.575 2.04 c
+-3.148 3.894 -3.148 3.894 -3.896 4.678 c
+-4.212 5.008 -4.839 5.354 -4.922 5.803 c
+-4.014 7.981 l
+-3.952 8.007 -1.426 7.15 0.33 5.083 c
+1.632 3.552 2.398 0.755 2.281 0.574 c
+1.906 -0.01 0.7 -0.197 0.037 0.011 c
+0.026 0.014 0.011 -0.003 0 0 c
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 196.8853 459.5508 cm
+0 0 m
+-5.275 2.417 -9.403 2.407 -12.049 2.189 c
+-12.049 2.728 l
+-6.604 2.728 -1.522 1.173 2.777 -1.517 c
+2.232 -1.205 1.506 -0.789 0.961 -0.477 c
+0.673 -0.334 0.292 -0.134 0 0 c
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 193.0991 461.0352 cm
+0 0 m
+-3.078 0.794 -4.478 1.111 -8.263 0.96 c
+-8.263 1.243 l
+-4.866 1.243 -1.61 0.638 1.402 -0.47 c
+0.981 -0.329 0.425 -0.126 0 0 c
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 189.0669 461.958 cm
+0 0 m
+-2.557 0.263 -2.657 0.273 -4.231 0.228 c
+-4.231 0.32 l
+-2.431 0.32 -0.671 0.15 1.035 -0.174 c
+0.724 -0.122 0.312 -0.042 0 0 c
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 184.8359 462.2749 cm
+0 0 m
+0.335 0.003 0.669 -0.002 1.001 -0.014 c
+0.701 -0.01 0.211 -0.214 0 0 c
+f
+Q
+ endstream endobj 942 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 930 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 934 0 obj <</Subtype/Form/Length 477/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 931 0 R/Resources<</XObject<</Fm0 933 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[309.171 492.275 321.168 480.278]>>stream
+q
+315.165 487.275 m
+315.165 492.275 l
+318.477 492.275 321.168 489.593 321.168 486.272 c
+321.168 482.96 318.477 480.278 315.165 480.278 c
+311.853 480.278 309.171 482.96 309.171 486.272 c
+309.171 489.593 311.853 492.275 315.165 492.275 c
+315.165 487.275 l
+314.621 487.278 314.17 486.83 314.171 486.272 c
+314.168 485.727 314.619 485.276 315.165 485.278 c
+315.715 485.275 316.172 485.733 316.168 486.272 c
+316.17 486.824 315.713 487.279 315.165 487.275 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 931 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 933 0 obj <</Subtype/Form/Length 11078/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 932 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[309.171 492.275 321.168 480.278]>>stream
+/CS0 cs 0.2 0.325 0.624 scn
+1 i
+/GS0 gs
+q 1 0 0 1 315.165 487.2754 cm
+0 0 m
+0 5 l
+3.312 5 6.003 2.318 6.003 -1.003 c
+6.003 -4.315 3.312 -6.997 0 -6.997 c
+-3.312 -6.997 -5.994 -4.315 -5.994 -1.003 c
+-5.994 2.318 -3.312 5 0 5 c
+0 0 l
+-0.544 0.003 -0.995 -0.445 -0.994 -1.003 c
+-0.997 -1.549 -0.546 -2 0 -1.997 c
+0.55 -2 1.007 -1.542 1.003 -1.003 c
+1.005 -0.451 0.548 0.003 0 0 c
+f
+Q
+q 1 0 0 1 315.165 488.1997 cm
+0 0 m
+-0.013 -0.041 -0.073 -0.074 -0.082 -0.115 c
+-0.11 -0.248 -0.02 -0.425 0 -0.559 c
+0 -0.924 l
+-0.544 -0.921 -0.995 -1.37 -0.994 -1.927 c
+-0.997 -2.473 -0.546 -2.924 0 -2.921 c
+0.55 -2.924 1.007 -2.467 1.003 -1.927 c
+1.005 -1.375 0.548 -0.921 0 -0.924 c
+0 -0.559 l
+0.034 -0.556 0.079 -0.552 0.113 -0.549 c
+0.142 -0.549 0.183 -0.536 0.209 -0.548 c
+1.045 -1.475 l
+1.44 -2.16 1.79 -2.114 1.805 -2.112 c
+2.058 -2.072 3.187 -0.623 1.901 0.191 c
+1.597 0.384 1.274 0.411 1.13 0.396 c
+0 0 l
+0 4.076 l
+3.312 4.076 6.003 1.394 6.003 -1.927 c
+6.003 -5.239 3.312 -7.921 0 -7.921 c
+-3.312 -7.921 -5.994 -5.239 -5.994 -1.927 c
+-5.994 1.394 -3.312 4.076 0 4.076 c
+0 0 l
+f
+Q
+0.196 0.318 0.612 scn
+q 1 0 0 1 315.165 488.3418 cm
+0 0 m
+-0.03 -0.092 -0.163 -0.17 -0.184 -0.265 c
+-0.221 -0.432 -0.125 -0.677 -0.186 -0.837 c
+-0.186 -0.838 -0.235 -0.941 -0.399 -1.048 c
+-1.15 -1.539 -1.036 -2.16 -0.983 -2.339 c
+-0.8 -2.96 -0.143 -3.262 0.452 -2.998 c
+0.652 -2.908 0.791 -2.771 0.873 -2.69 c
+1.144 -2.423 1.548 -2.625 1.836 -2.417 c
+2.431 -1.985 2.564 -1.604 2.628 -1.42 c
+2.85 -0.787 2.46 0.134 1.627 0.371 c
+0.853 0.592 0.002 0.008 0 0 c
+0 3.934 l
+3.312 3.934 6.003 1.251 6.003 -2.069 c
+6.003 -5.381 3.312 -8.063 0 -8.063 c
+-3.312 -8.063 -5.994 -5.381 -5.994 -2.069 c
+-5.994 1.251 -3.312 3.934 0 3.934 c
+0 0 l
+f
+Q
+0.192 0.31 0.596 scn
+q 1 0 0 1 315.165 488.4824 cm
+0 0 m
+-0.294 -0.832 -1.287 -1.354 -1.07 -2.414 c
+-0.931 -3.09 -0.167 -3.555 0.649 -3.164 c
+1.049 -2.972 1.516 -2.957 1.889 -2.695 c
+2.243 -2.445 2.625 -2.13 2.762 -1.679 c
+3.159 -0.375 2.125 0.264 1.73 0.385 c
+0.831 0.662 0.003 0.008 0 0 c
+0 3.793 l
+3.312 3.793 6.003 1.111 6.003 -2.21 c
+6.003 -5.522 3.312 -8.204 0 -8.204 c
+-3.312 -8.204 -5.994 -5.522 -5.994 -2.21 c
+-5.994 1.111 -3.312 3.793 0 3.793 c
+0 0 l
+f
+Q
+0.188 0.302 0.58 scn
+q 1 0 0 1 315.165 488.6216 cm
+0 0 m
+-0.352 -0.867 -1.375 -1.438 -1.138 -2.566 c
+-1.017 -3.142 -0.345 -3.804 0.713 -3.398 c
+2.483 -2.719 2.628 -2.663 2.945 -1.783 c
+2.951 -1.768 3.406 -0.235 2.053 0.317 c
+0.863 0.802 0.004 0.01 0 0 c
+0 3.654 l
+3.312 3.654 6.003 0.972 6.003 -2.349 c
+6.003 -5.661 3.312 -8.343 0 -8.343 c
+-3.312 -8.343 -5.994 -5.661 -5.994 -2.349 c
+-5.994 0.972 -3.312 3.654 0 3.654 c
+0 0 l
+f
+Q
+0.18 0.294 0.569 scn
+q 1 0 0 1 315.165 488.7588 cm
+0 0 m
+-0.192 -0.416 -0.582 -0.691 -0.789 -1.097 c
+-0.793 -1.105 -1.082 -1.703 -1.083 -1.706 c
+-1.253 -2.111 -1.282 -2.441 -1.181 -2.81 c
+-1.118 -3.036 -0.72 -4.135 0.985 -3.564 c
+5.022 -2.213 2.486 0.225 2.452 0.247 c
+1.442 0.897 0.101 0.219 0 0 c
+0 3.517 l
+3.312 3.517 6.003 0.834 6.003 -2.486 c
+6.003 -5.798 3.312 -8.48 0 -8.48 c
+-3.312 -8.48 -5.994 -5.798 -5.994 -2.486 c
+-5.994 0.834 -3.312 3.517 0 3.517 c
+0 0 l
+f
+Q
+0.176 0.286 0.553 scn
+q 1 0 0 1 315.165 488.9116 cm
+0 0 m
+-0.013 -0.025 -0.053 -0.04 -0.076 -0.057 c
+-0.432 -0.327 -0.719 -0.611 -1.164 -1.801 c
+-1.234 -1.99 -1.448 -2.564 -1.178 -3.156 c
+-0.778 -4.031 0.18 -4.2 1.671 -3.658 c
+3.876 -2.856 3.991 -0.38 2.341 0.402 c
+1.366 0.864 0.123 0.248 0 0 c
+0 3.364 l
+3.312 3.364 6.003 0.682 6.003 -2.639 c
+6.003 -5.951 3.312 -8.633 0 -8.633 c
+-3.312 -8.633 -5.994 -5.951 -5.994 -2.639 c
+-5.994 0.682 -3.312 3.364 0 3.364 c
+0 0 l
+f
+Q
+0.173 0.278 0.541 scn
+q 1 0 0 1 315.165 489.1035 cm
+0 0 m
+-0.034 -0.068 -0.142 -0.105 -0.202 -0.15 c
+-0.734 -0.546 -0.993 -1.253 -1.244 -1.936 c
+-1.353 -2.232 -1.496 -2.812 -1.238 -3.374 c
+-0.612 -4.739 1.248 -4.146 1.803 -3.932 c
+4.138 -3.031 4.266 -0.308 2.51 0.419 c
+1.108 1 0.006 0.012 0 0 c
+0 3.172 l
+3.312 3.172 6.003 0.49 6.003 -2.831 c
+6.003 -6.143 3.312 -8.825 0 -8.825 c
+-3.312 -8.825 -5.994 -6.143 -5.994 -2.831 c
+-5.994 0.49 -3.312 3.172 0 3.172 c
+0 0 l
+f
+Q
+0.169 0.275 0.525 scn
+q 1 0 0 1 315.165 489.291 cm
+0 0 m
+-0.037 -0.069 -0.152 -0.103 -0.217 -0.147 c
+-0.48 -0.327 -0.918 -0.951 -1.084 -1.383 c
+-1.402 -2.209 -1.592 -2.802 -1.342 -3.486 c
+-1.138 -4.046 -0.487 -4.899 1.578 -4.322 c
+4.081 -3.623 4.628 -0.763 2.992 0.316 c
+1.701 1.167 0.079 0.149 0 0 c
+0 2.984 l
+3.312 2.984 6.003 0.302 6.003 -3.019 c
+6.003 -6.331 3.312 -9.013 0 -9.013 c
+-3.312 -9.013 -5.994 -6.331 -5.994 -3.019 c
+-5.994 0.302 -3.312 2.984 0 2.984 c
+0 0 l
+f
+Q
+0.165 0.267 0.51 scn
+q 1 0 0 1 315.165 489.4751 cm
+0 0 m
+-0.175 -0.316 -0.541 -0.436 -0.745 -0.721 c
+-1.04 -1.133 -1.134 -1.367 -1.233 -1.614 c
+-1.283 -1.739 -1.712 -2.854 -1.439 -3.598 c
+-0.844 -5.219 1.105 -4.774 1.689 -4.6 c
+4.424 -3.78 5.002 -0.76 3.22 0.385 c
+1.946 1.202 0.234 0.424 0 0 c
+0 2.8 l
+3.312 2.8 6.003 0.118 6.003 -3.203 c
+6.003 -6.515 3.312 -9.197 0 -9.197 c
+-3.312 -9.197 -5.994 -6.515 -5.994 -3.203 c
+-5.994 0.118 -3.312 2.8 0 2.8 c
+0 0 l
+f
+Q
+0.161 0.259 0.498 scn
+q 1 0 0 1 315.165 489.7065 cm
+0 0 m
+-0.06 -0.132 -0.265 -0.21 -0.385 -0.291 c
+-0.751 -0.537 -1.207 -1.436 -1.319 -1.735 c
+-1.402 -1.96 -1.802 -3.124 -1.467 -3.945 c
+-0.712 -5.795 1.956 -4.866 1.982 -4.855 c
+5.3 -3.58 5.175 -0.371 3.116 0.573 c
+1.411 1.355 0.007 0.017 0 0 c
+0 2.569 l
+3.312 2.569 6.003 -0.113 6.003 -3.434 c
+6.003 -6.746 3.312 -9.428 0 -9.428 c
+-3.312 -9.428 -5.994 -6.746 -5.994 -3.434 c
+-5.994 -0.113 -3.312 2.569 0 2.569 c
+0 0 l
+f
+Q
+0.153 0.251 0.482 scn
+q 1 0 0 1 315.165 489.9888 cm
+0 0 m
+-0.04 -0.083 -0.167 -0.135 -0.239 -0.193 c
+-0.739 -0.597 -1.12 -1.159 -1.404 -1.909 c
+-1.678 -2.633 -1.751 -3.637 -1.568 -4.146 c
+-0.856 -6.124 1.88 -5.306 1.908 -5.297 c
+5.872 -3.969 5.347 -0.495 3.422 0.519 c
+1.628 1.464 0.058 0.122 0 0 c
+0 2.287 l
+3.312 2.287 6.003 -0.396 6.003 -3.716 c
+6.003 -7.028 3.312 -9.71 0 -9.71 c
+-3.312 -9.71 -5.994 -7.028 -5.994 -3.716 c
+-5.994 -0.396 -3.312 2.287 0 2.287 c
+0 0 l
+f
+Q
+0.149 0.243 0.467 scn
+q 1 0 0 1 315.165 490.2749 cm
+0 0 m
+-0.045 -0.106 -0.209 -0.167 -0.302 -0.235 c
+-0.485 -0.372 -1.122 -0.935 -1.618 -2.443 c
+-1.723 -2.761 -1.897 -3.881 -1.538 -4.677 c
+-1.024 -5.812 0.792 -6.206 2.512 -5.554 c
+6.336 -4.105 5.75 -0.288 3.153 0.723 c
+1.353 1.423 0.007 0.017 0 0 c
+0 2 l
+3.312 2 6.003 -0.682 6.003 -4.002 c
+6.003 -7.314 3.312 -9.997 0 -9.997 c
+-3.312 -9.997 -5.994 -7.314 -5.994 -4.002 c
+-5.994 -0.682 -3.312 2 0 2 c
+0 0 l
+f
+Q
+0.145 0.235 0.455 scn
+q 1 0 0 1 315.165 490.6582 cm
+0 0 m
+-0.163 -0.361 -0.541 -0.515 -0.777 -0.805 c
+-0.945 -1.011 -1.046 -1.259 -1.201 -1.474 c
+-1.269 -1.568 -1.409 -1.763 -1.714 -2.734 c
+-2.048 -3.798 -1.784 -4.665 -1.597 -5.087 c
+-1.005 -6.421 1.188 -6.695 2.68 -6.041 c
+8.251 -3.594 4.333 0.165 2.965 0.677 c
+1.252 1.319 0.007 0.016 0 0 c
+0 1.617 l
+3.312 1.617 6.003 -1.065 6.003 -4.386 c
+6.003 -7.698 3.312 -10.38 0 -10.38 c
+-3.312 -10.38 -5.994 -7.698 -5.994 -4.386 c
+-5.994 -1.065 -3.312 1.617 0 1.617 c
+0 0 l
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 315.165 491.083 cm
+0 0 m
+-0.128 -0.296 -0.441 -0.404 -0.637 -0.631 c
+-0.787 -0.804 -0.891 -1.009 -1.028 -1.191 c
+-1.149 -1.351 -1.614 -2.354 -1.616 -2.362 c
+-2.165 -3.906 -2.034 -4.643 -1.834 -5.161 c
+-0.959 -7.42 1.653 -7.023 2.585 -6.679 c
+3.892 -6.198 6.612 -5.195 5.552 -2.522 c
+5.843 -3.227 6.003 -4 6.003 -4.811 c
+6.003 -8.123 3.312 -10.805 0 -10.805 c
+-3.312 -10.805 -5.994 -8.123 -5.994 -4.811 c
+-5.994 -1.49 -3.312 1.192 0 1.192 c
+0 0 l
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 315.165 491.5479 cm
+0 0 m
+-0.037 -0.078 -0.154 -0.129 -0.22 -0.185 c
+-1.232 -1.033 -1.806 -2.828 -1.83 -2.904 c
+-2.22 -4.142 -2.232 -5.159 -1.867 -5.927 c
+-0.58 -8.633 3.354 -7.149 3.394 -7.134 c
+4.44 -6.729 6.193 -6.052 5.898 -4.154 c
+5.967 -4.518 6.003 -4.892 6.003 -5.275 c
+6.003 -8.587 3.312 -11.27 0 -11.27 c
+-3.312 -11.27 -5.994 -8.587 -5.994 -5.275 c
+-5.994 -1.955 -3.312 0.728 0 0.728 c
+0 0 l
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 315.165 491.9907 cm
+0 0 m
+-0.038 -0.067 -0.155 -0.091 -0.221 -0.13 c
+-1.146 -0.672 -1.618 -2.109 -1.997 -3.263 c
+-2.003 -3.281 -2.538 -5.073 -2.065 -6.285 c
+-1.01 -8.991 2.93 -7.989 3.097 -7.945 c
+4.317 -7.624 5.989 -7.184 6.001 -5.584 c
+6.002 -5.628 6.003 -5.673 6.003 -5.718 c
+6.003 -9.03 3.312 -11.712 0 -11.712 c
+-3.312 -11.712 -5.994 -9.03 -5.994 -5.718 c
+-5.994 -2.397 -3.312 0.285 0 0.285 c
+0 0 l
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 315.165 492.2632 cm
+0 0 m
+-0.043 -0.052 -0.154 -0.029 -0.221 -0.042 c
+-0.695 -0.132 -1.346 -0.69 -1.729 -1.732 c
+-2.601 -4.102 -2.422 -5.693 -2.305 -6.268 c
+-1.773 -8.88 1.72 -8.614 1.755 -8.61 c
+4.215 -8.37 5.7 -8.226 5.951 -6.783 c
+5.562 -9.72 3.043 -11.985 0 -11.985 c
+-3.312 -11.985 -5.994 -9.303 -5.994 -5.991 c
+-5.994 -2.67 -3.312 0.012 0 0.012 c
+0 0 l
+f
+Q
+0.122 0.2 0.384 scn
+q 1 0 0 1 314.2603 492.1987 cm
+0 0 m
+-1.727 -0.587 -1.739 -4.385 -1.738 -4.546 c
+-1.734 -6.483 -1.193 -7.61 0.017 -8.2 c
+1.798 -9.069 6.085 -9.361 6.66 -7.637 c
+5.921 -10.115 3.622 -11.92 0.905 -11.92 c
+-2.407 -11.92 -5.089 -9.238 -5.089 -5.926 c
+-5.089 -2.857 -2.798 -0.333 0.165 0.032 c
+0.115 0.022 0.048 0.013 0 0 c
+f
+Q
+0.118 0.192 0.369 scn
+q 1 0 0 1 312.9341 491.7764 cm
+0 0 m
+-1.086 -0.961 -0.817 -4.853 -0.535 -5.61 c
+0.431 -8.208 2.403 -8.585 3.207 -8.626 c
+4.27 -8.681 5.298 -9.068 6.378 -8.967 c
+6.691 -8.938 7.264 -8.802 7.584 -8.218 c
+6.592 -10.165 4.566 -11.498 2.231 -11.498 c
+-1.081 -11.498 -3.763 -8.816 -3.763 -5.504 c
+-3.763 -2.812 -2 -0.54 0.432 0.225 c
+0.372 0.2 0.292 0.168 0.231 0.144 c
+0.161 0.102 0.062 0.054 0 0 c
+f
+Q
+0.204 0.333 0.639 scn
+q 1 0 0 1 316.7451 486.4531 cm
+0 0 m
+-0.091 0.065 -0.091 0.065 -0.52 0.593 c
+-0.662 0.769 -0.836 0.916 -0.974 1.096 c
+-1.233 1.432 -1.232 1.599 -1.232 1.6 c
+-1.226 1.62 -0.028 2.446 0.591 1.368 c
+1.026 0.612 0.245 -0.132 0.233 -0.134 c
+0.153 -0.145 0.065 -0.047 0 0 c
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 317.7354 491.6665 cm
+0 0 m
+-1.294 0.462 -2.254 -0.325 -2.57 -0.583 c
+-2.57 0.609 l
+-1.403 0.609 -0.313 0.276 0.609 -0.301 c
+0.52 -0.251 0.4 -0.185 0.31 -0.134 c
+0.217 -0.094 0.095 -0.034 0 0 c
+f
+Q
+0.208 0.337 0.655 scn
+q 1 0 0 1 316.7852 486.708 cm
+0 0 m
+-0.336 0.357 l
+-0.473 0.528 -0.628 0.683 -0.758 0.858 c
+-0.977 1.152 -1.021 1.271 -1.02 1.277 c
+-1.015 1.292 -0.028 1.706 0.328 0.955 c
+0.588 0.409 0.173 -0.121 0.167 -0.122 c
+0.106 -0.133 0.047 -0.04 0 0 c
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 316.9321 491.998 cm
+0 0 m
+-0.649 0.12 -1.161 -0.01 -1.767 -0.45 c
+-1.767 0.277 l
+-1.039 0.277 -0.34 0.147 0.306 -0.09 c
+0.223 -0.065 0.111 -0.031 0.028 -0.006 c
+0.02 -0.004 0.008 -0.001 0 0 c
+f
+Q
+0.216 0.345 0.667 scn
+q 1 0 0 1 316.7891 486.9756 cm
+0 0 m
+-0.004 0.004 -0.536 0.578 -0.712 0.865 c
+-0.569 0.878 -0.483 0.886 -0.265 0.812 c
+-0.18 0.784 -0.084 0.701 -0.026 0.633 c
+0.032 0.564 0.089 0.451 0.102 0.362 c
+0.133 0.142 0.096 0.015 0.073 -0.061 c
+0.051 -0.042 0.021 -0.02 0 0 c
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 316.0703 492.1978 cm
+0 0 m
+-0.314 -0.005 -0.486 -0.009 -0.905 -0.207 c
+-0.905 0.078 l
+-0.519 0.078 -0.142 0.041 0.224 -0.028 c
+0.157 -0.02 0.067 -0.003 0 0 c
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 315.165 492.2632 cm
+0 0 m
+0 0.012 l
+0.072 0.012 0.144 0.011 0.215 0.008 c
+0.15 0.006 0.046 -0.044 0 0 c
+f
+Q
+ endstream endobj 932 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 922 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 926 0 obj <</Subtype/Form/Length 473/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 923 0 R/Resources<</XObject<</Fm0 925 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[295.671 461.774 351.669 405.776]>>stream
+q
+323.67 445.774 m
+323.67 461.774 l
+339.132 461.774 351.669 449.237 351.669 433.775 c
+351.669 418.313 339.132 405.776 323.67 405.776 c
+308.199 405.776 295.671 418.313 295.671 433.775 c
+295.671 449.237 308.199 461.774 323.67 461.774 c
+323.67 445.774 l
+317.055 445.784 311.661 440.386 311.671 433.775 c
+311.661 427.165 317.055 421.767 323.67 421.776 c
+330.277 421.766 335.68 427.168 335.669 433.775 c
+335.68 440.383 330.277 445.785 323.67 445.774 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 923 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 925 0 obj <</Subtype/Form/Length 13513/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 924 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[295.671 461.774 351.669 405.776]>>stream
+/CS0 cs 0.208 0.337 0.655 scn
+1 i
+/GS0 gs
+q 1 0 0 1 323.6699 445.7744 cm
+0 0 m
+0 16 l
+15.462 16 27.999 3.463 27.999 -11.999 c
+27.999 -27.461 15.462 -39.998 0 -39.998 c
+-15.471 -39.998 -27.999 -27.461 -27.999 -11.999 c
+-27.999 3.463 -15.471 16 0 16 c
+0 0 l
+-6.615 0.009 -12.009 -5.389 -11.999 -11.999 c
+-12.009 -18.609 -6.615 -24.007 0 -23.998 c
+6.607 -24.009 12.01 -18.606 11.999 -11.999 c
+12.01 -5.392 6.607 0.011 0 0 c
+f
+Q
+q 1 0 0 1 323.6699 450.936 cm
+0 0 m
+0 -0.46 l
+0 -5.162 l
+-6.615 -5.152 -12.009 -10.55 -11.999 -17.161 c
+-12.009 -23.771 -6.615 -29.169 0 -29.16 c
+6.607 -29.17 12.01 -23.768 11.999 -17.161 c
+12.01 -10.553 6.607 -5.151 0 -5.162 c
+0 -0.46 l
+0.316 -0.687 0.738 -0.99 1.054 -1.216 c
+3.814 -3.66 7.459 -4.866 10 -7.615 c
+12.018 -9.799 13.458 -12.46 14.279 -15.526 c
+15.091 -18.561 16.901 -19.341 16.918 -19.343 c
+18.873 -19.537 24.733 -10.481 17.857 -2.239 c
+10.881 6.124 0.77 1.958 0 0 c
+0 10.838 l
+15.462 10.838 27.999 -1.699 27.999 -17.161 c
+27.999 -32.623 15.462 -45.16 0 -45.16 c
+-15.471 -45.16 -27.999 -32.623 -27.999 -17.161 c
+-27.999 -1.699 -15.471 10.838 0 10.838 c
+0 0 l
+f
+Q
+0.204 0.333 0.639 scn
+q 1 0 0 1 323.6699 452.7832 cm
+0 0 m
+-0.297 -0.712 -1.488 -1.167 -1.738 -1.898 c
+-1.989 -2.637 -2.004 -3.871 -1.531 -4.492 c
+-1.227 -4.891 -0.45 -4.943 0 -5.165 c
+0 -7.009 l
+-6.615 -7 -12.009 -12.397 -11.999 -19.008 c
+-12.009 -25.618 -6.615 -31.016 0 -31.007 c
+6.607 -31.018 12.01 -25.615 11.999 -19.008 c
+12.01 -12.4 6.607 -6.998 0 -7.009 c
+0 -5.165 l
+0.338 -5.198 0.788 -5.242 1.126 -5.275 c
+2.249 -5.474 12.142 -7.557 13.761 -19.535 c
+14.172 -22.508 l
+14.637 -23.083 15.725 -23.499 16.46 -23.421 c
+20.584 -22.986 26.414 -9.565 15.896 -1.31 c
+7.945 4.929 0.035 0.084 0 0 c
+0 8.991 l
+15.462 8.991 27.999 -3.546 27.999 -19.008 c
+27.999 -34.47 15.462 -47.007 0 -47.007 c
+-15.471 -47.007 -27.999 -34.47 -27.999 -19.008 c
+-27.999 -3.546 -15.471 8.991 0 8.991 c
+0 0 l
+f
+Q
+0.2 0.325 0.624 scn
+q 1 0 0 1 323.6699 453.9038 cm
+0 0 m
+-0.627 -1.11 -1.868 -1.524 -2.71 -2.39 c
+-4.768 -4.502 -4.451 -6.209 -4.444 -6.223 c
+-4.359 -6.387 -4.359 -6.387 0 -7.407 c
+0 -8.129 l
+-6.615 -8.12 -12.009 -13.518 -11.999 -20.128 c
+-12.009 -26.739 -6.615 -32.137 0 -32.127 c
+6.607 -32.138 12.01 -26.736 11.999 -20.128 c
+12.01 -13.521 6.607 -8.119 0 -8.129 c
+0 -7.407 l
+0.312 -7.427 0.727 -7.454 1.039 -7.474 c
+5.586 -8.118 13.155 -12.017 12.674 -22.547 c
+12.56 -25.06 12.663 -26.477 12.982 -26.758 c
+14.31 -27.928 23.355 -23.682 22.629 -14.041 c
+21.271 4 1.142 2.018 0 0 c
+0 7.871 l
+15.462 7.871 27.999 -4.667 27.999 -20.128 c
+27.999 -35.59 15.462 -48.127 0 -48.127 c
+-15.471 -48.127 -27.999 -35.59 -27.999 -20.128 c
+-27.999 -4.667 -15.471 7.871 0 7.871 c
+0 0 l
+f
+Q
+0.196 0.318 0.612 scn
+q 1 0 0 1 323.6699 454.8291 cm
+0 0 m
+-0.223 -0.378 -0.896 -0.494 -1.28 -0.706 c
+-3.988 -2.198 -4.356 -2.882 -7.222 -8.202 c
+-10.978 -15.406 l
+-12.035 -17.648 -12.409 -19.973 -12.123 -22.51 c
+-11.368 -29.204 -4.441 -35.039 3.701 -32.831 c
+16.504 -28.45 l
+19.64 -26.383 21.524 -23.889 22.614 -20.364 c
+24.61 -13.907 21.812 -4.74 13.674 -0.575 c
+6.261 3.219 0.029 0.049 0 0 c
+0 6.945 l
+15.462 6.945 27.999 -5.592 27.999 -21.054 c
+27.999 -36.516 15.462 -49.053 0 -49.053 c
+-15.471 -49.053 -27.999 -36.516 -27.999 -21.054 c
+-27.999 -5.592 -15.471 6.945 0 6.945 c
+0 0 l
+f
+Q
+0.192 0.31 0.596 scn
+q 1 0 0 1 323.6699 455.6289 cm
+0 0 m
+-0.174 -0.267 -0.682 -0.299 -0.974 -0.428 c
+-3.272 -1.437 -6.368 -4.312 -7.598 -6.58 c
+-13.391 -17.255 -13 -20.65 -12.686 -23.378 c
+-12.045 -28.943 -6.307 -36.331 3.975 -34.516 c
+34.372 -29.149 23.201 -7.032 15.417 -1.844 c
+7.622 3.352 0.039 0.059 0 0 c
+0 6.146 l
+15.462 6.146 27.999 -6.392 27.999 -21.854 c
+27.999 -37.315 15.462 -49.853 0 -49.853 c
+-15.471 -49.853 -27.999 -37.315 -27.999 -21.854 c
+-27.999 -6.392 -15.471 6.146 0 6.146 c
+0 0 l
+f
+Q
+0.188 0.302 0.58 scn
+q 1 0 0 1 323.6699 456.3296 cm
+0 0 m
+-0.26 -0.393 -1.011 -0.429 -1.444 -0.612 c
+-4.284 -1.815 -7.534 -4.967 -9.349 -8.277 c
+-13.499 -15.843 -13.758 -21.083 -13.244 -24.145 c
+-12.335 -29.557 -7.256 -38.113 6.018 -35.852 c
+29.65 -31.827 27.567 -10.229 15.691 -2.187 c
+7.726 3.206 0.039 0.058 0 0 c
+0 5.445 l
+15.462 5.445 27.999 -7.092 27.999 -22.554 c
+27.999 -38.016 15.462 -50.553 0 -50.553 c
+-15.471 -50.553 -27.999 -38.016 -27.999 -22.554 c
+-27.999 -7.092 -15.471 5.445 0 5.445 c
+0 0 l
+f
+Q
+0.18 0.294 0.569 scn
+q 1 0 0 1 323.6699 456.9956 cm
+0 0 m
+-0.271 -0.397 -1.043 -0.41 -1.49 -0.586 c
+-3.112 -1.224 -7.251 -3.368 -10.636 -9.471 c
+-11.688 -11.366 -15.022 -18.08 -13.796 -24.877 c
+-12.453 -32.323 -5.461 -39.361 6.714 -37.217 c
+28.943 -33.303 28.97 -11.254 15.609 -2.3 c
+7.857 2.895 0.038 0.056 0 0 c
+0 4.779 l
+15.462 4.779 27.999 -7.758 27.999 -23.22 c
+27.999 -38.682 15.462 -51.219 0 -51.219 c
+-15.471 -51.219 -27.999 -38.682 -27.999 -23.22 c
+-27.999 -7.758 -15.471 4.779 0 4.779 c
+0 0 l
+f
+Q
+0.176 0.286 0.553 scn
+q 1 0 0 1 323.6699 457.6064 cm
+0 0 m
+-0.285 -0.403 -1.086 -0.384 -1.551 -0.549 c
+-2.515 -0.89 -7.505 -2.918 -11.143 -9.4 c
+-12.539 -11.886 -15.644 -18.437 -14.343 -25.553 c
+-13.275 -31.396 -7.567 -40.711 7.05 -38.566 c
+28.064 -35.482 30.902 -13.127 16.17 -2.838 c
+7.979 2.883 0.04 0.057 0 0 c
+0 4.168 l
+15.462 4.168 27.999 -8.369 27.999 -23.831 c
+27.999 -39.293 15.462 -51.83 0 -51.83 c
+-15.471 -51.83 -27.999 -39.293 -27.999 -23.831 c
+-27.999 -8.369 -15.471 4.168 0 4.168 c
+0 0 l
+f
+Q
+0.173 0.278 0.541 scn
+q 1 0 0 1 323.6699 458.1792 cm
+0 0 m
+-0.295 -0.407 -1.114 -0.365 -1.591 -0.521 c
+-3.039 -0.995 -8.059 -3.066 -11.891 -9.807 c
+-12.952 -11.675 -16.307 -18.377 -14.887 -26.189 c
+-13.692 -32.762 -6.813 -41.824 7.243 -39.848 c
+28.686 -36.834 31.47 -13.846 16.374 -3.144 c
+8.08 2.737 0.041 0.056 0 0 c
+0 3.595 l
+15.462 3.595 27.999 -8.942 27.999 -24.404 c
+27.999 -39.866 15.462 -52.403 0 -52.403 c
+-15.471 -52.403 -27.999 -39.866 -27.999 -24.404 c
+-27.999 -8.942 -15.471 3.595 0 3.595 c
+0 0 l
+f
+Q
+0.169 0.275 0.525 scn
+q 1 0 0 1 323.6699 458.7163 cm
+0 0 m
+-0.327 -0.44 -1.225 -0.369 -1.749 -0.527 c
+-5.521 -1.665 -9.768 -5.259 -12.076 -9.267 c
+-15.396 -15.033 -16.523 -20.929 -15.426 -26.791 c
+-13.856 -35.175 -5.227 -43.009 7.675 -41.011 c
+29.381 -37.65 31.673 -13.956 16.092 -3.122 c
+8.188 2.374 0.041 0.052 0 0 c
+0 3.058 l
+15.462 3.058 27.999 -9.479 27.999 -24.941 c
+27.999 -40.403 15.462 -52.94 0 -52.94 c
+-15.471 -52.94 -27.999 -40.403 -27.999 -24.941 c
+-27.999 -9.479 -15.471 3.058 0 3.058 c
+0 0 l
+f
+Q
+0.165 0.267 0.51 scn
+q 1 0 0 1 323.6699 459.2314 cm
+0 0 m
+-0.315 -0.414 -1.17 -0.321 -1.672 -0.458 c
+-5.63 -1.542 -10.188 -5.222 -12.512 -9.206 c
+-13.797 -11.409 -17.707 -18.115 -15.958 -27.369 c
+-14.312 -36.085 -5.369 -44.227 7.962 -42.147 c
+29.823 -38.738 32.256 -15.066 16.713 -3.752 c
+8.241 2.415 0.041 0.054 0 0 c
+0 2.543 l
+15.462 2.543 27.999 -9.994 27.999 -25.456 c
+27.999 -40.918 15.462 -53.455 0 -53.455 c
+-15.471 -53.455 -27.999 -40.918 -27.999 -25.456 c
+-27.999 -9.994 -15.471 2.543 0 2.543 c
+0 0 l
+f
+Q
+0.161 0.259 0.498 scn
+q 1 0 0 1 323.6699 459.7041 cm
+0 0 m
+-0.326 -0.417 -1.198 -0.297 -1.711 -0.424 c
+-5.006 -1.24 -10.024 -4.173 -13.32 -9.752 c
+-16.644 -15.378 -17.708 -21.484 -16.484 -27.903 c
+-14.771 -36.889 -5.522 -45.311 8.242 -43.22 c
+29.813 -39.944 32.242 -15.421 16.845 -4.05 c
+8.507 2.107 0.042 0.053 0 0 c
+0 2.07 l
+15.462 2.07 27.999 -10.467 27.999 -25.929 c
+27.999 -41.391 15.462 -53.928 0 -53.928 c
+-15.471 -53.928 -27.999 -41.391 -27.999 -25.929 c
+-27.999 -10.467 -15.471 2.07 0 2.07 c
+0 0 l
+f
+Q
+0.153 0.251 0.482 scn
+q 1 0 0 1 323.6699 460.144 cm
+0 0 m
+-0.165 -0.201 -0.596 -0.119 -0.852 -0.169 c
+-6.632 -1.32 -11.089 -5.48 -13.333 -8.99 c
+-17.824 -16.015 -17.96 -22.678 -17.283 -27.031 c
+-15.529 -38.309 -5.353 -45.633 6.914 -44.447 c
+29.053 -42.307 33.213 -18.564 18.588 -5.674 c
+9.722 2.142 0.051 0.062 0 0 c
+0 1.63 l
+15.462 1.63 27.999 -10.907 27.999 -26.369 c
+27.999 -41.831 15.462 -54.368 0 -54.368 c
+-15.471 -54.368 -27.999 -41.831 -27.999 -26.369 c
+-27.999 -10.907 -15.471 1.63 0 1.63 c
+0 0 l
+f
+Q
+0.149 0.243 0.467 scn
+q 1 0 0 1 323.6699 460.5547 cm
+0 0 m
+-0.345 -0.419 -1.243 -0.245 -1.776 -0.35 c
+-5.454 -1.074 -10.584 -3.985 -13.756 -8.856 c
+-18.476 -16.104 -18.606 -22.976 -17.885 -27.465 c
+-16.272 -37.503 -7.101 -46.92 7.31 -45.498 c
+29.575 -43.3 33.52 -19.115 18.666 -5.998 c
+9.679 1.938 0.05 0.061 0 0 c
+0 1.22 l
+15.462 1.22 27.999 -11.317 27.999 -26.779 c
+27.999 -42.241 15.462 -54.778 0 -54.778 c
+-15.471 -54.778 -27.999 -42.241 -27.999 -26.779 c
+-27.999 -11.317 -15.471 1.22 0 1.22 c
+0 0 l
+f
+Q
+0.145 0.235 0.455 scn
+q 1 0 0 1 323.6699 460.9102 cm
+0 0 m
+-0.359 -0.424 -1.28 -0.213 -1.828 -0.305 c
+-2.573 -0.429 -9.242 -1.712 -14.038 -8.521 c
+-19.338 -16.045 -19.04 -23.601 -18.666 -26.5 c
+-16.79 -41.035 -4.557 -47.119 6.015 -46.621 c
+29.237 -45.525 34.039 -19.966 18.705 -6.311 c
+9.693 1.714 0.05 0.059 0 0 c
+0 0.864 l
+15.462 0.864 27.999 -11.673 27.999 -27.135 c
+27.999 -42.597 15.462 -55.134 0 -55.134 c
+-15.471 -55.134 -27.999 -42.597 -27.999 -27.135 c
+-27.999 -11.673 -15.471 0.864 0 0.864 c
+0 0 l
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 323.6699 461.2358 cm
+0 0 m
+-0.366 -0.422 -1.291 -0.183 -1.844 -0.262 c
+-5.618 -0.797 -11.206 -3.577 -14.557 -8.414 c
+-20.527 -17.033 -19.484 -25.013 -19.142 -27.635 c
+-17.325 -41.544 -4.721 -48.296 6.215 -47.587 c
+22.825 -46.511 31.838 -32.41 25.896 -16.796 c
+27.251 -20.083 27.999 -23.685 27.999 -27.46 c
+27.999 -42.922 15.462 -55.459 0 -55.459 c
+-15.471 -55.459 -27.999 -42.922 -27.999 -27.46 c
+-27.999 -11.999 -15.471 0.539 0 0.539 c
+0 0 l
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 323.6699 461.4912 cm
+0 0 m
+-0.38 -0.425 -1.323 -0.147 -1.89 -0.211 c
+-3.742 -0.417 -10.186 -1.632 -15.337 -8.604 c
+-20.121 -15.077 -20.496 -23.224 -19.964 -27.016 c
+-18.071 -40.5 -7.311 -49.138 6.811 -48.512 c
+13.567 -48.212 30.458 -42.954 27.513 -22.495 c
+27.832 -24.187 27.999 -25.932 27.999 -27.716 c
+27.999 -43.178 15.462 -55.715 0 -55.715 c
+-15.471 -55.715 -27.999 -43.178 -27.999 -27.716 c
+-27.999 -12.254 -15.471 0.283 0 0.283 c
+0 0 l
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 323.6699 461.6821 cm
+0 0 m
+-0.389 -0.422 -1.334 -0.109 -1.906 -0.156 c
+-5.864 -0.48 -11.765 -2.986 -15.37 -7.721 c
+-21.457 -15.717 -21.121 -23.997 -20.694 -27.186 c
+-18.848 -40.99 -7.359 -50.367 6.621 -49.484 c
+16.365 -48.868 27.809 -42.685 27.992 -27.284 c
+27.997 -27.491 27.999 -27.699 27.999 -27.907 c
+27.999 -43.369 15.462 -55.906 0 -55.906 c
+-15.471 -55.906 -27.999 -43.369 -27.999 -27.907 c
+-27.999 -12.445 -15.471 0.092 0 0.092 c
+0 0 l
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 323.6699 461.771 cm
+0 0 m
+-0.403 -0.423 -1.362 -0.067 -1.946 -0.096 c
+-5.655 -0.278 -11.174 -1.795 -16.41 -7.986 c
+-19.422 -11.547 -22.258 -18.903 -21.583 -25.522 c
+-19.025 -50.59 4.157 -50.418 5.143 -50.399 c
+17.394 -50.156 25.847 -43.167 27.756 -31.704 c
+25.941 -45.413 14.205 -55.995 0 -55.995 c
+-15.471 -55.995 -27.999 -43.458 -27.999 -27.996 c
+-27.999 -12.534 -15.471 0.003 0 0.003 c
+0 0 l
+f
+Q
+0.122 0.2 0.384 scn
+q 1 0 0 1 319.437 461.4541 cm
+0 0 m
+-22.53 -4.549 -23.53 -35.024 -6.331 -46.258 c
+6.847 -54.865 25.642 -52.171 31.071 -35.682 c
+27.627 -47.245 16.914 -55.678 4.233 -55.678 c
+-11.238 -55.678 -23.766 -43.141 -23.766 -27.679 c
+-23.766 -13.386 -13.062 -1.593 0.777 0.109 c
+0.544 0.077 0.232 0.04 0 0 c
+f
+Q
+0.118 0.192 0.369 scn
+q 1 0 0 1 311.6421 458.9941 cm
+0 0 m
+-16.565 -9.064 -17.346 -40.196 9.317 -48.713 c
+16.643 -51.053 30.634 -50.189 36.991 -37.91 c
+32.363 -46.995 22.921 -53.218 12.028 -53.218 c
+-3.443 -53.218 -15.971 -40.681 -15.971 -25.219 c
+-15.971 -12.684 -7.737 -2.07 3.624 1.498 c
+3.099 1.309 2.397 1.056 1.872 0.866 c
+1.309 0.609 0.542 0.297 0 0 c
+f
+Q
+0.216 0.345 0.667 scn
+q 1 0 0 1 339.5962 435.5991 cm
+0 0 m
+-1.706 2.422 -2.871 5.192 -4.806 7.466 c
+-5.581 8.376 -6.334 9.141 -7.046 9.74 c
+-7.103 9.788 -12.699 14.576 -12.705 14.929 c
+-12.707 15.035 -10.925 16.753 -10.74 16.825 c
+-10.058 17.086 -7.544 17.231 -6.875 17.166 c
+-5.111 16.992 -2.438 16.241 0.275 13.649 c
+3.79 10.293 4.269 6.382 4.332 5.263 c
+4.608 0.362 1.816 -1.552 1.125 -1.426 c
+0.589 -1.328 0.314 -0.445 0 0 c
+f
+Q
+0.22 0.353 0.682 scn
+q 1 0 0 1 339.7305 438.0928 cm
+0 0 m
+-1.971 2.884 -3.056 4.472 -4.87 6.595 c
+-5.072 6.832 -5.375 7.116 -5.591 7.34 c
+-5.844 7.601 -6.16 7.969 -6.419 8.224 c
+-6.913 8.711 -7.551 9.382 -8.074 9.839 c
+-9.724 11.281 -9.908 11.547 -9.911 11.595 c
+-9.914 11.657 -8.495 13.252 -8.295 13.411 c
+-8.132 13.541 -7.808 13.456 -7.601 13.433 c
+-5.32 13.184 -2.962 12.927 -0.476 10.566 c
+2.531 7.709 2.783 5.143 2.904 3.91 c
+2.938 3.565 2.929 0.875 2.709 0.41 c
+2.675 0.337 0.707 -0.875 0.645 -0.861 c
+0.33 -0.793 0.182 -0.267 0 0 c
+f
+Q
+0.224 0.361 0.694 scn
+q 1 0 0 1 338.8149 441.6221 cm
+0 0 m
+-0.736 0.235 -1.075 1.45 -1.575 2.04 c
+-3.148 3.894 -3.148 3.894 -3.896 4.678 c
+-4.212 5.008 -4.839 5.354 -4.922 5.803 c
+-4.014 7.981 l
+-3.952 8.007 -1.426 7.15 0.33 5.083 c
+1.632 3.552 2.398 0.755 2.281 0.574 c
+1.906 -0.01 0.7 -0.197 0.037 0.011 c
+0.026 0.014 0.011 -0.003 0 0 c
+f
+Q
+0.141 0.227 0.439 scn
+q 1 0 0 1 335.7192 459.0469 cm
+0 0 m
+-5.215 2.39 -9.179 2.425 -12.049 2.189 c
+-12.049 2.728 l
+-6.604 2.728 -1.522 1.173 2.777 -1.517 c
+2.232 -1.205 1.506 -0.789 0.961 -0.477 c
+0.673 -0.334 0.292 -0.134 0 0 c
+f
+Q
+0.137 0.22 0.427 scn
+q 1 0 0 1 331.9331 460.5313 cm
+0 0 m
+-3.078 0.794 -4.478 1.111 -8.263 0.96 c
+-8.263 1.243 l
+-4.866 1.243 -1.61 0.638 1.402 -0.47 c
+0.981 -0.329 0.425 -0.126 0 0 c
+f
+Q
+0.133 0.216 0.412 scn
+q 1 0 0 1 327.9009 461.4541 cm
+0 0 m
+-2.557 0.263 -2.657 0.273 -4.231 0.228 c
+-4.231 0.32 l
+-2.431 0.32 -0.671 0.15 1.035 -0.174 c
+0.724 -0.122 0.312 -0.042 0 0 c
+f
+Q
+0.125 0.208 0.396 scn
+q 1 0 0 1 323.6699 461.771 cm
+0 0 m
+0.335 0.003 0.669 -0.002 1.001 -0.014 c
+0.701 -0.01 0.211 -0.214 0 0 c
+f
+Q
+ endstream endobj 924 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 912 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 916 0 obj <</Subtype/Form/Length 478/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 913 0 R/Resources<</XObject<</Fm0 915 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[321.996 217.271 334.002 205.274]>>stream
+q
+327.999 212.271 m
+327.999 217.271 l
+331.311 217.271 334.002 214.59 334.002 211.277 c
+334.002 207.966 331.311 205.274 327.999 205.274 c
+324.687 205.274 321.996 207.966 321.996 211.277 c
+321.996 214.59 324.687 217.271 327.999 217.271 c
+327.999 212.271 l
+327.449 212.274 326.992 211.817 326.996 211.277 c
+326.991 210.734 327.456 210.27 327.999 210.274 c
+328.542 210.27 329.007 210.734 329.002 211.277 c
+329.006 211.817 328.549 212.274 327.999 212.271 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 913 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 915 0 obj <</Subtype/Form/Length 11074/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 914 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[321.996 217.271 334.002 205.274]>>stream
+/CS0 cs 0.624 0.2 0.2 scn
+1 i
+/GS0 gs
+q 1 0 0 1 327.999 212.2715 cm
+0 0 m
+0 5 l
+3.312 5 6.003 2.318 6.003 -0.994 c
+6.003 -4.306 3.312 -6.997 0 -6.997 c
+-3.312 -6.997 -6.003 -4.306 -6.003 -0.994 c
+-6.003 2.318 -3.312 5 0 5 c
+0 0 l
+-0.55 0.003 -1.007 -0.454 -1.003 -0.994 c
+-1.008 -1.537 -0.543 -2.002 0 -1.997 c
+0.543 -2.002 1.008 -1.537 1.003 -0.994 c
+1.007 -0.454 0.55 0.003 0 0 c
+f
+Q
+q 1 0 0 1 327.999 213.1963 cm
+0 0 m
+-0.013 -0.041 -0.073 -0.074 -0.083 -0.115 c
+-0.111 -0.248 -0.02 -0.426 0 -0.56 c
+0 -0.925 l
+-0.55 -0.922 -1.007 -1.379 -1.003 -1.919 c
+-1.008 -2.462 -0.543 -2.927 0 -2.922 c
+0.543 -2.927 1.008 -2.462 1.003 -1.919 c
+1.007 -1.379 0.55 -0.922 0 -0.925 c
+0 -0.56 l
+0.034 -0.557 0.079 -0.553 0.113 -0.55 c
+0.142 -0.55 0.184 -0.536 0.21 -0.549 c
+1.046 -1.473 l
+1.441 -2.153 1.79 -2.106 1.805 -2.104 c
+2.058 -2.064 3.185 -0.619 1.901 0.191 c
+1.598 0.383 1.275 0.409 1.132 0.396 c
+0 0 l
+0 4.075 l
+3.312 4.075 6.003 1.394 6.003 -1.919 c
+6.003 -5.23 3.312 -7.922 0 -7.922 c
+-3.312 -7.922 -6.003 -5.23 -6.003 -1.919 c
+-6.003 1.394 -3.312 4.075 0 4.075 c
+0 0 l
+f
+Q
+0.612 0.196 0.196 scn
+q 1 0 0 1 327.999 213.3379 cm
+0 0 m
+-0.03 -0.092 -0.164 -0.17 -0.185 -0.265 c
+-0.222 -0.433 -0.125 -0.678 -0.188 -0.838 c
+-0.188 -0.839 -0.237 -0.941 -0.404 -1.049 c
+-1.156 -1.538 -1.044 -2.153 -0.992 -2.33 c
+-0.81 -2.948 -0.137 -3.26 0.449 -2.997 c
+0.649 -2.907 0.789 -2.769 0.872 -2.687 c
+1.143 -2.418 1.548 -2.618 1.836 -2.409 c
+2.434 -1.976 2.571 -1.584 2.629 -1.416 c
+2.851 -0.784 2.461 0.135 1.628 0.371 c
+0.853 0.591 0.002 0.008 0 0 c
+0 3.934 l
+3.312 3.934 6.003 1.252 6.003 -2.061 c
+6.003 -5.372 3.312 -8.063 0 -8.063 c
+-3.312 -8.063 -6.003 -5.372 -6.003 -2.061 c
+-6.003 1.252 -3.312 3.934 0 3.934 c
+0 0 l
+f
+Q
+0.596 0.192 0.192 scn
+q 1 0 0 1 327.999 213.4785 cm
+0 0 m
+-0.294 -0.83 -1.296 -1.345 -1.079 -2.404 c
+-0.955 -3.01 -0.239 -3.591 0.647 -3.163 c
+1.047 -2.97 1.515 -2.951 1.888 -2.688 c
+2.104 -2.536 2.607 -2.182 2.763 -1.673 c
+3.16 -0.374 2.125 0.264 1.731 0.385 c
+0.831 0.661 0.003 0.009 0 0 c
+0 3.793 l
+3.312 3.793 6.003 1.111 6.003 -2.201 c
+6.003 -5.513 3.312 -8.204 0 -8.204 c
+-3.312 -8.204 -6.003 -5.513 -6.003 -2.201 c
+-6.003 1.111 -3.312 3.793 0 3.793 c
+0 0 l
+f
+Q
+0.58 0.188 0.188 scn
+q 1 0 0 1 327.999 213.6182 cm
+0 0 m
+-0.352 -0.866 -1.383 -1.428 -1.146 -2.558 c
+-1.025 -3.14 -0.35 -3.809 0.711 -3.398 c
+2.484 -2.712 2.629 -2.655 2.946 -1.777 c
+2.952 -1.763 3.406 -0.234 2.053 0.316 c
+0.838 0.812 0.004 0.01 0 0 c
+0 3.653 l
+3.312 3.653 6.003 0.972 6.003 -2.341 c
+6.003 -5.652 3.312 -8.344 0 -8.344 c
+-3.312 -8.344 -6.003 -5.652 -6.003 -2.341 c
+-6.003 0.972 -3.312 3.653 0 3.653 c
+0 0 l
+f
+Q
+0.569 0.18 0.18 scn
+q 1 0 0 1 327.999 213.7549 cm
+0 0 m
+-0.193 -0.417 -0.585 -0.691 -0.795 -1.098 c
+-1.093 -1.707 l
+-1.262 -2.105 -1.291 -2.433 -1.189 -2.801 c
+-1.126 -3.029 -0.725 -4.141 0.983 -3.563 c
+5.011 -2.2 2.486 0.226 2.453 0.247 c
+1.442 0.896 0.101 0.219 0 0 c
+0 3.517 l
+3.312 3.517 6.003 0.835 6.003 -2.478 c
+6.003 -5.789 3.312 -8.48 0 -8.48 c
+-3.312 -8.48 -6.003 -5.789 -6.003 -2.478 c
+-6.003 0.835 -3.312 3.517 0 3.517 c
+0 0 l
+f
+Q
+0.553 0.176 0.176 scn
+q 1 0 0 1 327.999 213.9082 cm
+0 0 m
+-0.013 -0.025 -0.053 -0.04 -0.076 -0.058 c
+-0.364 -0.275 -0.691 -0.521 -1.173 -1.803 c
+-1.243 -1.988 -1.457 -2.555 -1.186 -3.148 c
+-0.781 -4.033 0.18 -4.204 1.671 -3.654 c
+3.863 -2.846 3.98 -0.373 2.341 0.401 c
+1.366 0.862 0.123 0.247 0 0 c
+0 3.363 l
+3.312 3.363 6.003 0.682 6.003 -2.631 c
+6.003 -5.942 3.312 -8.634 0 -8.634 c
+-3.312 -8.634 -6.003 -5.942 -6.003 -2.631 c
+-6.003 0.682 -3.312 3.363 0 3.363 c
+0 0 l
+f
+Q
+0.541 0.173 0.173 scn
+q 1 0 0 1 327.999 214.0996 cm
+0 0 m
+-0.034 -0.067 -0.142 -0.105 -0.203 -0.15 c
+-0.702 -0.521 -0.962 -1.182 -1.171 -1.711 c
+-1.281 -1.991 -1.54 -2.648 -1.288 -3.269 c
+-0.891 -4.246 0.088 -4.488 1.621 -3.988 c
+4.051 -3.195 4.189 -0.578 2.798 0.287 c
+1.588 1.039 0.134 0.266 0 0 c
+0 3.172 l
+3.312 3.172 6.003 0.49 6.003 -2.822 c
+6.003 -6.134 3.312 -8.825 0 -8.825 c
+-3.312 -8.825 -6.003 -6.134 -6.003 -2.822 c
+-6.003 0.49 -3.312 3.172 0 3.172 c
+0 0 l
+f
+Q
+0.525 0.169 0.169 scn
+q 1 0 0 1 327.999 214.2871 cm
+0 0 m
+-0.037 -0.069 -0.152 -0.104 -0.217 -0.147 c
+-0.454 -0.309 -0.887 -0.883 -1.091 -1.383 c
+-1.28 -1.846 -1.632 -2.707 -1.384 -3.387 c
+-0.994 -4.454 0.002 -4.769 1.578 -4.319 c
+4.069 -3.61 4.619 -0.754 2.993 0.316 c
+1.701 1.166 0.079 0.148 0 0 c
+0 2.984 l
+3.312 2.984 6.003 0.303 6.003 -3.01 c
+6.003 -6.321 3.312 -9.013 0 -9.013 c
+-3.312 -9.013 -6.003 -6.321 -6.003 -3.01 c
+-6.003 0.303 -3.312 2.984 0 2.984 c
+0 0 l
+f
+Q
+0.51 0.165 0.165 scn
+q 1 0 0 1 327.999 214.4717 cm
+0 0 m
+-0.176 -0.317 -0.542 -0.437 -0.748 -0.722 c
+-1.049 -1.139 -1.146 -1.381 -1.241 -1.614 c
+-1.291 -1.738 -1.721 -2.847 -1.448 -3.589 c
+-0.846 -5.228 1.105 -4.775 1.689 -4.598 c
+4.413 -3.769 4.993 -0.751 3.22 0.385 c
+1.946 1.2 0.234 0.423 0 0 c
+0 2.8 l
+3.312 2.8 6.003 0.118 6.003 -3.194 c
+6.003 -6.506 3.312 -9.197 0 -9.197 c
+-3.312 -9.197 -6.003 -6.506 -6.003 -3.194 c
+-6.003 0.118 -3.312 2.8 0 2.8 c
+0 0 l
+f
+Q
+0.498 0.161 0.161 scn
+q 1 0 0 1 327.999 214.7031 cm
+0 0 m
+-0.06 -0.133 -0.265 -0.211 -0.386 -0.291 c
+-0.759 -0.541 -1.229 -1.474 -1.327 -1.735 c
+-1.444 -2.049 -1.803 -3.136 -1.475 -3.938 c
+-0.713 -5.804 1.956 -4.863 1.982 -4.853 c
+5.283 -3.568 5.162 -0.364 3.116 0.573 c
+1.411 1.354 0.007 0.017 0 0 c
+0 2.568 l
+3.312 2.568 6.003 -0.113 6.003 -3.426 c
+6.003 -6.737 3.312 -9.429 0 -9.429 c
+-3.312 -9.429 -6.003 -6.737 -6.003 -3.426 c
+-6.003 -0.113 -3.312 2.568 0 2.568 c
+0 0 l
+f
+Q
+0.482 0.153 0.153 scn
+q 1 0 0 1 327.999 214.9854 cm
+0 0 m
+-0.04 -0.083 -0.167 -0.135 -0.239 -0.193 c
+-0.736 -0.594 -1.131 -1.171 -1.412 -1.908 c
+-1.719 -2.715 -1.736 -3.694 -1.577 -4.139 c
+-0.858 -6.132 1.881 -5.304 1.908 -5.295 c
+5.597 -4.044 5.759 -0.555 3.075 0.691 c
+1.838 1.267 0.163 0.34 0 0 c
+0 2.286 l
+3.312 2.286 6.003 -0.396 6.003 -3.708 c
+6.003 -7.02 3.312 -9.711 0 -9.711 c
+-3.312 -9.711 -6.003 -7.02 -6.003 -3.708 c
+-6.003 -0.396 -3.312 2.286 0 2.286 c
+0 0 l
+f
+Q
+0.467 0.149 0.149 scn
+q 1 0 0 1 327.999 215.2715 cm
+0 0 m
+-0.045 -0.106 -0.21 -0.167 -0.302 -0.236 c
+-0.487 -0.373 -1.13 -0.938 -1.627 -2.442 c
+-1.764 -2.854 -1.88 -3.932 -1.545 -4.67 c
+-1.027 -5.814 0.793 -6.21 2.513 -5.55 c
+6.314 -4.092 5.733 -0.28 3.153 0.723 c
+1.353 1.422 0.007 0.017 0 0 c
+0 2 l
+3.312 2 6.003 -0.682 6.003 -3.994 c
+6.003 -7.306 3.312 -9.997 0 -9.997 c
+-3.312 -9.997 -6.003 -7.306 -6.003 -3.994 c
+-6.003 -0.682 -3.312 2 0 2 c
+0 0 l
+f
+Q
+0.455 0.145 0.145 scn
+q 1 0 0 1 327.999 215.6543 cm
+0 0 m
+-0.163 -0.361 -0.542 -0.515 -0.779 -0.805 c
+-0.948 -1.011 -1.05 -1.26 -1.205 -1.475 c
+-1.369 -1.701 -1.472 -1.983 -1.723 -2.733 c
+-2.048 -3.703 -1.823 -4.541 -1.66 -4.953 c
+-1.229 -6.046 0.416 -6.786 2.422 -6.135 c
+7.014 -4.645 5.816 -0.744 3.286 0.54 c
+1.422 1.485 0.008 0.019 0 0 c
+0 1.617 l
+3.312 1.617 6.003 -1.064 6.003 -4.377 c
+6.003 -7.688 3.312 -10.38 0 -10.38 c
+-3.312 -10.38 -6.003 -7.688 -6.003 -4.377 c
+-6.003 -1.064 -3.312 1.617 0 1.617 c
+0 0 l
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 327.999 216.0791 cm
+0 0 m
+-0.128 -0.296 -0.442 -0.404 -0.638 -0.631 c
+-0.788 -0.804 -0.893 -1.01 -1.031 -1.191 c
+-1.148 -1.346 -1.62 -2.353 -1.623 -2.36 c
+-2.172 -3.895 -2.053 -4.608 -1.843 -5.151 c
+-0.961 -7.428 1.653 -7.023 2.586 -6.676 c
+3.891 -6.189 6.606 -5.178 5.553 -2.521 c
+5.843 -3.224 6.003 -3.994 6.003 -4.802 c
+6.003 -8.113 3.312 -10.805 0 -10.805 c
+-3.312 -10.805 -6.003 -8.113 -6.003 -4.802 c
+-6.003 -1.489 -3.312 1.192 0 1.192 c
+0 0 l
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 327.999 216.5439 cm
+0 0 m
+-0.037 -0.078 -0.154 -0.129 -0.22 -0.185 c
+-1.238 -1.037 -1.832 -2.884 -1.837 -2.902 c
+-2.426 -4.76 -2.011 -5.632 -1.875 -5.918 c
+-0.597 -8.6 3.355 -7.144 3.396 -7.129 c
+4.441 -6.72 6.192 -6.035 5.899 -4.15 c
+5.967 -4.512 6.003 -4.885 6.003 -5.267 c
+6.003 -8.578 3.312 -11.27 0 -11.27 c
+-3.312 -11.27 -6.003 -8.578 -6.003 -5.267 c
+-6.003 -1.954 -3.312 0.728 0 0.728 c
+0 0 l
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 327.999 216.9863 cm
+0 0 m
+-0.038 -0.066 -0.155 -0.09 -0.221 -0.129 c
+-1.15 -0.674 -1.646 -2.172 -2.007 -3.267 c
+-2.013 -3.283 -2.546 -5.064 -2.073 -6.276 c
+-1.009 -9.004 3.058 -7.952 3.099 -7.941 c
+4.318 -7.615 5.989 -7.169 6.001 -5.576 c
+6.002 -5.62 6.003 -5.664 6.003 -5.709 c
+6.003 -9.021 3.312 -11.712 0 -11.712 c
+-3.312 -11.712 -6.003 -9.021 -6.003 -5.709 c
+-6.003 -2.396 -3.312 0.285 0 0.285 c
+0 0 l
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 327.999 217.2598 cm
+0 0 m
+-0.043 -0.053 -0.154 -0.029 -0.221 -0.042 c
+-0.696 -0.133 -1.348 -0.689 -1.732 -1.73 c
+-2.577 -4.014 -2.459 -5.548 -2.314 -6.259 c
+-1.864 -8.468 0.843 -8.703 1.755 -8.611 c
+4.299 -8.355 5.7 -8.214 5.951 -6.775 c
+5.562 -9.713 3.043 -11.985 0 -11.985 c
+-3.312 -11.985 -6.003 -9.294 -6.003 -5.982 c
+-6.003 -2.67 -3.312 0.012 0 0.012 c
+0 0 l
+f
+Q
+0.384 0.122 0.122 scn
+q 1 0 0 1 327.0938 217.1953 cm
+0 0 m
+-1.738 -0.59 -1.75 -4.505 -1.75 -4.545 c
+-1.745 -7.049 -0.739 -7.83 0.017 -8.199 c
+1.798 -9.07 6.085 -9.361 6.66 -7.631 c
+5.921 -10.109 3.622 -11.921 0.905 -11.921 c
+-2.407 -11.921 -5.098 -9.229 -5.098 -5.918 c
+-5.098 -2.856 -2.799 -0.334 0.165 0.031 c
+0.115 0.021 0.049 0.013 0 0 c
+f
+Q
+0.369 0.118 0.118 scn
+q 1 0 0 1 325.7642 216.7715 cm
+0 0 m
+-1.064 -0.938 -0.813 -4.867 -0.541 -5.6 c
+0.429 -8.205 2.405 -8.584 3.209 -8.627 c
+4.272 -8.682 5.299 -9.067 6.379 -8.965 c
+6.692 -8.936 7.266 -8.798 7.587 -8.212 c
+6.594 -10.16 4.569 -11.497 2.235 -11.497 c
+-1.077 -11.497 -3.768 -8.806 -3.768 -5.494 c
+-3.768 -2.81 -2.001 -0.54 0.432 0.225 c
+0.372 0.2 0.292 0.168 0.231 0.144 c
+0.161 0.102 0.061 0.054 0 0 c
+f
+Q
+0.639 0.204 0.204 scn
+q 1 0 0 1 329.5791 211.4561 cm
+0 0 m
+-0.096 0.068 -0.096 0.068 -0.519 0.587 c
+-0.661 0.762 -0.834 0.909 -0.973 1.089 c
+-1.125 1.286 -1.231 1.594 y
+-1.226 1.612 -0.029 2.438 0.592 1.362 c
+1.027 0.609 0.245 -0.131 0.233 -0.133 c
+0.153 -0.144 0.065 -0.047 0 0 c
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 330.5688 216.6631 cm
+0 0 m
+-1.295 0.462 -2.254 -0.325 -2.57 -0.584 c
+-2.57 0.608 l
+-1.402 0.608 -0.311 0.274 0.612 -0.302 c
+0.522 -0.252 0.402 -0.186 0.312 -0.136 c
+0.219 -0.095 0.096 -0.034 0 0 c
+f
+Q
+0.655 0.208 0.208 scn
+q 1 0 0 1 329.6191 211.708 cm
+0 0 m
+-0.335 0.354 l
+-0.472 0.524 -0.626 0.68 -0.757 0.854 c
+-0.976 1.148 -1.021 1.268 -1.019 1.272 c
+-1.014 1.287 -0.028 1.7 0.33 0.952 c
+0.591 0.409 0.174 -0.12 0.167 -0.121 c
+0.106 -0.131 0.048 -0.039 0 0 c
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 329.7661 216.9941 cm
+0 0 m
+-0.649 0.12 -1.161 -0.01 -1.767 -0.45 c
+-1.767 0.277 l
+-1.038 0.277 -0.339 0.147 0.307 -0.091 c
+0.224 -0.065 0.112 -0.031 0.029 -0.007 c
+0.02 -0.005 0.009 -0.002 0 0 c
+f
+Q
+0.667 0.216 0.216 scn
+q 1 0 0 1 329.623 211.9746 cm
+0 0 m
+-0.004 0.004 -0.533 0.572 -0.71 0.861 c
+-0.568 0.874 -0.482 0.883 -0.264 0.809 c
+-0.18 0.78 -0.083 0.699 -0.025 0.631 c
+0.033 0.563 0.091 0.45 0.104 0.361 c
+0.135 0.141 0.099 0.019 0.074 -0.063 c
+0.052 -0.044 0.021 -0.021 0 0 c
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 328.9043 217.1943 cm
+0 0 m
+-0.314 -0.006 -0.487 -0.009 -0.905 -0.208 c
+-0.905 0.077 l
+-0.519 0.077 -0.142 0.041 0.225 -0.029 c
+0.157 -0.021 0.068 -0.004 0 0 c
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 327.999 217.2598 cm
+0 0 m
+0 0.012 l
+0.072 0.012 0.144 0.011 0.215 0.008 c
+0.15 0.006 0.046 -0.045 0 0 c
+f
+Q
+ endstream endobj 914 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 905 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 909 0 obj <</Subtype/Form/Length 475/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 906 0 R/Resources<</XObject<</Fm0 908 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[306.003 319.277 362.001 263.279]>>stream
+q
+334.002 303.277 m
+334.002 319.277 l
+349.464 319.277 362.001 306.74 362.001 291.278 c
+362.001 275.808 349.464 263.279 334.002 263.279 c
+318.54 263.279 306.003 275.808 306.003 291.278 c
+306.003 306.74 318.54 319.277 334.002 319.277 c
+334.002 303.277 l
+327.395 303.288 321.992 297.886 322.003 291.278 c
+321.994 284.663 327.392 279.27 334.002 279.279 c
+340.612 279.27 346.01 284.663 346.001 291.278 c
+346.012 297.886 340.609 303.288 334.002 303.277 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 906 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 908 0 obj <</Subtype/Form/Length 13488/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 907 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[306.003 319.277 362.001 263.279]>>stream
+/CS0 cs 0.655 0.208 0.208 scn
+1 i
+/GS0 gs
+q 1 0 0 1 334.002 303.2773 cm
+0 0 m
+0 16 l
+15.462 16 27.999 3.463 27.999 -11.999 c
+27.999 -27.47 15.462 -39.998 0 -39.998 c
+-15.462 -39.998 -27.999 -27.47 -27.999 -11.999 c
+-27.999 3.463 -15.462 16 0 16 c
+0 0 l
+-6.607 0.011 -12.01 -5.392 -11.999 -11.999 c
+-12.008 -18.614 -6.61 -24.008 0 -23.998 c
+6.61 -24.008 12.008 -18.614 11.999 -11.999 c
+12.01 -5.392 6.607 0.011 0 0 c
+f
+Q
+q 1 0 0 1 334.002 308.4409 cm
+0 0 m
+0 -0.468 l
+0 -5.164 l
+-6.607 -5.153 -12.01 -10.555 -11.999 -17.163 c
+-12.008 -23.778 -6.61 -29.171 0 -29.162 c
+6.61 -29.171 12.008 -23.778 11.999 -17.163 c
+12.01 -10.555 6.607 -5.153 0 -5.164 c
+0 -0.468 l
+0.316 -0.694 0.738 -0.996 1.055 -1.223 c
+3.817 -3.661 7.459 -4.869 10 -7.617 c
+12.018 -9.8 13.458 -12.461 14.279 -15.528 c
+15.076 -18.506 16.901 -19.345 16.917 -19.347 c
+18.874 -19.542 24.734 -10.485 17.857 -2.241 c
+10.879 6.124 0.769 1.958 0 0 c
+0 10.836 l
+15.462 10.836 27.999 -1.701 27.999 -17.163 c
+27.999 -32.633 15.462 -45.162 0 -45.162 c
+-15.462 -45.162 -27.999 -32.633 -27.999 -17.163 c
+-27.999 -1.701 -15.462 10.836 0 10.836 c
+0 0 l
+f
+Q
+0.639 0.204 0.204 scn
+q 1 0 0 1 334.002 310.2881 cm
+0 0 m
+-0.296 -0.712 -1.487 -1.168 -1.735 -1.898 c
+-1.987 -2.638 -2.003 -3.873 -1.53 -4.494 c
+-1.227 -4.893 -0.45 -4.945 0 -5.167 c
+0 -7.011 l
+-6.607 -7 -12.01 -12.402 -11.999 -19.01 c
+-12.008 -25.625 -6.61 -31.019 0 -31.009 c
+6.61 -31.019 12.008 -25.625 11.999 -19.01 c
+12.01 -12.402 6.607 -7 0 -7.011 c
+0 -5.167 l
+0.338 -5.201 0.788 -5.245 1.126 -5.278 c
+2.249 -5.476 12.144 -7.557 13.761 -19.537 c
+14.171 -22.514 l
+14.636 -23.089 15.724 -23.505 16.459 -23.428 c
+20.584 -22.992 26.416 -9.568 15.896 -1.312 c
+7.943 4.929 0.035 0.084 0 0 c
+0 8.989 l
+15.462 8.989 27.999 -3.548 27.999 -19.01 c
+27.999 -34.48 15.462 -47.009 0 -47.009 c
+-15.462 -47.009 -27.999 -34.48 -27.999 -19.01 c
+-27.999 -3.548 -15.462 8.989 0 8.989 c
+0 0 l
+f
+Q
+0.624 0.2 0.2 scn
+q 1 0 0 1 334.002 311.4072 cm
+0 0 m
+-0.627 -1.109 -1.866 -1.525 -2.708 -2.391 c
+-4.764 -4.503 -4.447 -6.209 -4.44 -6.223 c
+-4.355 -6.386 -4.355 -6.386 0 -7.408 c
+0 -8.13 l
+-6.607 -8.119 -12.01 -13.521 -11.999 -20.129 c
+-12.008 -26.744 -6.61 -32.138 0 -32.128 c
+6.61 -32.138 12.008 -26.744 11.999 -20.129 c
+12.01 -13.521 6.607 -8.119 0 -8.13 c
+0 -7.408 l
+0.312 -7.428 0.727 -7.455 1.039 -7.475 c
+5.587 -8.118 13.155 -12.018 12.674 -22.55 c
+12.559 -25.063 12.663 -26.479 12.981 -26.762 c
+14.31 -27.933 23.356 -23.689 22.629 -14.042 c
+21.27 4.006 1.142 2.02 0 0 c
+0 7.87 l
+15.462 7.87 27.999 -4.667 27.999 -20.129 c
+27.999 -35.6 15.462 -48.128 0 -48.128 c
+-15.462 -48.128 -27.999 -35.6 -27.999 -20.129 c
+-27.999 -4.667 -15.462 7.87 0 7.87 c
+0 0 l
+f
+Q
+0.612 0.196 0.196 scn
+q 1 0 0 1 334.002 312.3325 cm
+0 0 m
+-0.223 -0.377 -0.896 -0.494 -1.279 -0.706 c
+-3.984 -2.198 -4.352 -2.882 -7.218 -8.204 c
+-10.977 -15.407 l
+-12.034 -17.649 -12.409 -19.973 -12.123 -22.511 c
+-11.368 -29.203 -4.44 -35.038 3.702 -32.832 c
+16.504 -28.455 l
+19.639 -26.388 21.523 -23.893 22.614 -20.364 c
+24.61 -13.908 21.812 -4.74 13.674 -0.575 c
+6.26 3.219 0.029 0.049 0 0 c
+0 6.945 l
+15.462 6.945 27.999 -5.592 27.999 -21.054 c
+27.999 -36.525 15.462 -49.053 0 -49.053 c
+-15.462 -49.053 -27.999 -36.525 -27.999 -21.054 c
+-27.999 -5.592 -15.462 6.945 0 6.945 c
+0 0 l
+f
+Q
+0.596 0.192 0.192 scn
+q 1 0 0 1 334.002 313.1323 cm
+0 0 m
+-0.174 -0.267 -0.682 -0.3 -0.974 -0.428 c
+-3.27 -1.438 -6.363 -4.313 -7.593 -6.58 c
+-13.39 -17.263 -13 -20.654 -12.686 -23.379 c
+-12.044 -28.943 -6.306 -36.331 3.976 -34.516 c
+34.376 -29.152 23.202 -7.033 15.417 -1.844 c
+7.621 3.352 0.038 0.059 0 0 c
+0 6.145 l
+15.462 6.145 27.999 -6.392 27.999 -21.854 c
+27.999 -37.325 15.462 -49.853 0 -49.853 c
+-15.462 -49.853 -27.999 -37.325 -27.999 -21.854 c
+-27.999 -6.392 -15.462 6.145 0 6.145 c
+0 0 l
+f
+Q
+0.58 0.188 0.188 scn
+q 1 0 0 1 334.002 313.833 cm
+0 0 m
+-0.26 -0.393 -1.01 -0.429 -1.443 -0.612 c
+-4.281 -1.817 -7.531 -4.969 -9.346 -8.278 c
+-13.499 -15.849 -13.757 -21.087 -13.243 -24.146 c
+-12.334 -29.559 -7.254 -38.113 6.021 -35.853 c
+29.653 -31.827 27.567 -10.229 15.691 -2.188 c
+7.725 3.206 0.039 0.058 0 0 c
+0 5.444 l
+15.462 5.444 27.999 -7.093 27.999 -22.555 c
+27.999 -38.025 15.462 -50.554 0 -50.554 c
+-15.462 -50.554 -27.999 -38.025 -27.999 -22.555 c
+-27.999 -7.093 -15.462 5.444 0 5.444 c
+0 0 l
+f
+Q
+0.569 0.18 0.18 scn
+q 1 0 0 1 334.002 314.499 cm
+0 0 m
+-0.27 -0.397 -1.042 -0.411 -1.488 -0.586 c
+-3.111 -1.225 -7.25 -3.37 -10.633 -9.471 c
+-11.685 -11.368 -15.021 -18.085 -13.796 -24.878 c
+-12.453 -32.322 -5.461 -39.359 6.715 -37.218 c
+28.949 -33.308 28.975 -11.258 15.609 -2.301 c
+7.856 2.895 0.038 0.056 0 0 c
+0 4.778 l
+15.462 4.778 27.999 -7.759 27.999 -23.221 c
+27.999 -38.691 15.462 -51.22 0 -51.22 c
+-15.462 -51.22 -27.999 -38.691 -27.999 -23.221 c
+-27.999 -7.759 -15.462 4.778 0 4.778 c
+0 0 l
+f
+Q
+0.553 0.176 0.176 scn
+q 1 0 0 1 334.002 315.1099 cm
+0 0 m
+-0.285 -0.403 -1.085 -0.384 -1.55 -0.549 c
+-2.14 -0.758 -7.426 -2.783 -11.14 -9.4 c
+-12.536 -11.888 -15.643 -18.441 -14.343 -25.554 c
+-13.275 -31.396 -7.567 -40.71 7.05 -38.567 c
+28.067 -35.485 30.905 -13.13 16.17 -2.838 c
+7.979 2.883 0.04 0.057 0 0 c
+0 4.167 l
+15.462 4.167 27.999 -8.37 27.999 -23.832 c
+27.999 -39.302 15.462 -51.831 0 -51.831 c
+-15.462 -51.831 -27.999 -39.302 -27.999 -23.832 c
+-27.999 -8.37 -15.462 4.167 0 4.167 c
+0 0 l
+f
+Q
+0.541 0.173 0.173 scn
+q 1 0 0 1 334.002 315.6826 cm
+0 0 m
+-0.294 -0.407 -1.113 -0.365 -1.59 -0.521 c
+-3.037 -0.996 -8.057 -3.068 -11.887 -9.807 c
+-12.95 -11.677 -16.306 -18.383 -14.886 -26.191 c
+-13.691 -32.763 -6.811 -41.823 7.247 -39.848 c
+28.689 -36.835 31.471 -13.847 16.374 -3.144 c
+8.08 2.736 0.041 0.056 0 0 c
+0 3.595 l
+15.462 3.595 27.999 -8.942 27.999 -24.404 c
+27.999 -39.875 15.462 -52.403 0 -52.403 c
+-15.462 -52.403 -27.999 -39.875 -27.999 -24.404 c
+-27.999 -8.942 -15.462 3.595 0 3.595 c
+0 0 l
+f
+Q
+0.525 0.169 0.169 scn
+q 1 0 0 1 334.002 316.2197 cm
+0 0 m
+-0.327 -0.44 -1.224 -0.37 -1.749 -0.528 c
+-5.52 -1.667 -9.766 -5.26 -12.073 -9.267 c
+-15.394 -15.036 -16.522 -20.933 -15.426 -26.792 c
+-13.857 -35.175 -5.228 -43.007 7.675 -41.012 c
+29.388 -37.654 31.678 -13.959 16.092 -3.122 c
+8.188 2.374 0.041 0.052 0 0 c
+0 3.058 l
+15.462 3.058 27.999 -9.479 27.999 -24.941 c
+27.999 -40.412 15.462 -52.94 0 -52.94 c
+-15.462 -52.94 -27.999 -40.412 -27.999 -24.941 c
+-27.999 -9.479 -15.462 3.058 0 3.058 c
+0 0 l
+f
+Q
+0.51 0.165 0.165 scn
+q 1 0 0 1 334.002 316.7344 cm
+0 0 m
+-0.315 -0.413 -1.169 -0.321 -1.671 -0.458 c
+-5.628 -1.543 -10.186 -5.222 -12.509 -9.206 c
+-13.794 -11.411 -17.706 -18.119 -15.958 -27.369 c
+-14.312 -36.083 -5.369 -44.225 7.962 -42.147 c
+29.829 -38.742 32.261 -15.07 16.713 -3.752 c
+8.241 2.415 0.041 0.054 0 0 c
+0 2.543 l
+15.462 2.543 27.999 -9.994 27.999 -25.456 c
+27.999 -40.927 15.462 -53.455 0 -53.455 c
+-15.462 -53.455 -27.999 -40.927 -27.999 -25.456 c
+-27.999 -9.994 -15.462 2.543 0 2.543 c
+0 0 l
+f
+Q
+0.498 0.161 0.161 scn
+q 1 0 0 1 334.002 317.207 cm
+0 0 m
+-0.326 -0.417 -1.197 -0.297 -1.71 -0.424 c
+-5.005 -1.241 -10.022 -4.174 -13.317 -9.752 c
+-16.642 -15.38 -17.708 -21.487 -16.484 -27.904 c
+-14.771 -36.888 -5.523 -45.309 8.242 -43.221 c
+29.817 -39.947 32.246 -15.423 16.845 -4.05 c
+8.507 2.107 0.042 0.053 0 0 c
+0 2.07 l
+15.462 2.07 27.999 -10.467 27.999 -25.929 c
+27.999 -41.399 15.462 -53.928 0 -53.928 c
+-15.462 -53.928 -27.999 -41.399 -27.999 -25.929 c
+-27.999 -10.467 -15.462 2.07 0 2.07 c
+0 0 l
+f
+Q
+0.482 0.153 0.153 scn
+q 1 0 0 1 334.002 317.647 cm
+0 0 m
+-0.165 -0.201 -0.596 -0.119 -0.851 -0.169 c
+-6.63 -1.321 -11.086 -5.48 -13.33 -8.99 c
+-17.824 -16.019 -17.96 -22.681 -17.283 -27.032 c
+-15.527 -38.307 -5.35 -45.631 6.918 -44.447 c
+29.057 -42.308 33.215 -18.565 18.588 -5.674 c
+9.722 2.142 0.051 0.062 0 0 c
+0 1.63 l
+15.462 1.63 27.999 -10.907 27.999 -26.369 c
+27.999 -41.839 15.462 -54.368 0 -54.368 c
+-15.462 -54.368 -27.999 -41.839 -27.999 -26.369 c
+-27.999 -10.907 -15.462 1.63 0 1.63 c
+0 0 l
+f
+Q
+0.467 0.149 0.149 scn
+q 1 0 0 1 334.002 318.0581 cm
+0 0 m
+-0.345 -0.419 -1.243 -0.245 -1.775 -0.35 c
+-5.333 -1.052 -10.598 -4.013 -13.752 -8.857 c
+-18.474 -16.108 -18.606 -22.979 -17.885 -27.466 c
+-16.272 -37.501 -7.101 -46.918 7.31 -45.498 c
+29.578 -43.303 33.522 -19.118 18.666 -5.999 c
+9.679 1.938 0.05 0.061 0 0 c
+0 1.219 l
+15.462 1.219 27.999 -11.318 27.999 -26.78 c
+27.999 -42.25 15.462 -54.779 0 -54.779 c
+-15.462 -54.779 -27.999 -42.25 -27.999 -26.78 c
+-27.999 -11.318 -15.462 1.219 0 1.219 c
+0 0 l
+f
+Q
+0.455 0.145 0.145 scn
+q 1 0 0 1 334.002 318.4131 cm
+0 0 m
+-0.359 -0.424 -1.279 -0.213 -1.827 -0.305 c
+-2.571 -0.429 -9.239 -1.713 -14.035 -8.521 c
+-19.337 -16.049 -19.04 -23.602 -18.666 -26.5 c
+-16.791 -41.034 -4.557 -47.118 6.016 -46.62 c
+29.239 -45.526 34.04 -19.967 18.705 -6.311 c
+9.693 1.714 0.05 0.059 0 0 c
+0 0.864 l
+15.462 0.864 27.999 -11.673 27.999 -27.135 c
+27.999 -42.605 15.462 -55.134 0 -55.134 c
+-15.462 -55.134 -27.999 -42.605 -27.999 -27.135 c
+-27.999 -11.673 -15.462 0.864 0 0.864 c
+0 0 l
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 334.002 318.7388 cm
+0 0 m
+-0.366 -0.422 -1.29 -0.183 -1.842 -0.262 c
+-5.616 -0.798 -11.203 -3.577 -14.553 -8.414 c
+-20.526 -17.037 -19.484 -25.014 -19.142 -27.636 c
+-17.325 -41.544 -4.721 -48.295 6.216 -47.587 c
+22.826 -46.511 31.838 -32.411 25.896 -16.796 c
+27.251 -20.083 27.999 -23.685 27.999 -27.46 c
+27.999 -42.931 15.462 -55.459 0 -55.459 c
+-15.462 -55.459 -27.999 -42.931 -27.999 -27.46 c
+-27.999 -11.999 -15.462 0.539 0 0.539 c
+0 0 l
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 334.002 318.9941 cm
+0 0 m
+-0.38 -0.425 -1.322 -0.147 -1.889 -0.211 c
+-3.74 -0.417 -10.183 -1.633 -15.334 -8.604 c
+-20.121 -15.081 -20.497 -23.226 -19.964 -27.017 c
+-18.07 -40.5 -7.309 -49.138 6.814 -48.512 c
+13.57 -48.212 30.458 -42.954 27.513 -22.495 c
+27.832 -24.187 27.999 -25.932 27.999 -27.716 c
+27.999 -43.187 15.462 -55.715 0 -55.715 c
+-15.462 -55.715 -27.999 -43.187 -27.999 -27.716 c
+-27.999 -12.254 -15.462 0.283 0 0.283 c
+0 0 l
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 334.002 319.1851 cm
+0 0 m
+-0.389 -0.421 -1.333 -0.109 -1.905 -0.156 c
+-5.862 -0.48 -11.762 -2.986 -15.367 -7.721 c
+-21.456 -15.721 -21.121 -23.999 -20.694 -27.186 c
+-18.848 -40.988 -7.36 -50.366 6.622 -49.484 c
+16.365 -48.869 27.809 -42.686 27.992 -27.284 c
+27.997 -27.491 27.999 -27.699 27.999 -27.907 c
+27.999 -43.377 15.462 -55.906 0 -55.906 c
+-15.462 -55.906 -27.999 -43.377 -27.999 -27.907 c
+-27.999 -12.445 -15.462 0.092 0 0.092 c
+0 0 l
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 334.002 319.2739 cm
+0 0 m
+-0.403 -0.423 -1.362 -0.067 -1.945 -0.096 c
+-5.653 -0.278 -11.171 -1.795 -16.407 -7.987 c
+-19.42 -11.549 -22.258 -18.906 -21.583 -25.522 c
+-19.025 -50.59 4.157 -50.418 5.143 -50.399 c
+17.395 -50.155 25.849 -43.167 27.755 -31.707 c
+25.94 -45.421 14.205 -55.995 0 -55.995 c
+-15.462 -55.995 -27.999 -43.466 -27.999 -27.996 c
+-27.999 -12.534 -15.462 0.003 0 0.003 c
+0 0 l
+f
+Q
+0.384 0.122 0.122 scn
+q 1 0 0 1 329.771 318.957 cm
+0 0 m
+-22.131 -3.785 -23.922 -33.441 -7.507 -45.461 c
+5.397 -54.909 25.482 -52.656 31.069 -35.688 c
+27.625 -47.252 16.911 -55.678 4.231 -55.678 c
+-11.231 -55.678 -23.768 -43.149 -23.768 -27.679 c
+-23.768 -13.386 -13.055 -1.592 0.778 0.109 c
+0.778 0.109 l
+0.545 0.077 0.232 0.04 0 0 c
+f
+Q
+0.369 0.118 0.118 scn
+q 1 0 0 1 321.978 316.4971 cm
+0 0 m
+-16.565 -9.063 -17.347 -40.195 9.314 -48.713 c
+16.64 -51.053 30.632 -50.191 36.987 -37.914 c
+32.359 -46.999 22.917 -53.218 12.024 -53.218 c
+-3.438 -53.218 -15.975 -40.689 -15.975 -25.219 c
+-15.975 -12.683 -7.734 -2.069 3.625 1.499 c
+3.1 1.309 2.399 1.057 1.873 0.867 c
+1.31 0.61 0.543 0.297 0 0 c
+f
+Q
+0.667 0.216 0.216 scn
+q 1 0 0 1 349.9287 293.1025 cm
+0 0 m
+-1.706 2.422 -2.872 5.191 -4.807 7.466 c
+-5.581 8.375 -6.334 9.14 -7.046 9.739 c
+-7.103 9.787 -12.7 14.576 -12.706 14.928 c
+-12.708 15.034 -10.926 16.753 -10.74 16.824 c
+-10.059 17.085 -7.544 17.231 -6.876 17.165 c
+-5.112 16.991 -2.439 16.24 0.274 13.649 c
+3.79 10.292 4.269 6.381 4.332 5.263 c
+4.607 0.361 1.816 -1.553 1.124 -1.426 c
+0.588 -1.328 0.313 -0.446 0 0 c
+f
+Q
+0.682 0.22 0.22 scn
+q 1 0 0 1 350.0625 295.5957 cm
+0 0 m
+-1.97 2.883 -3.056 4.472 -4.87 6.595 c
+-5.072 6.832 -5.375 7.116 -5.591 7.34 c
+-5.844 7.601 -6.16 7.969 -6.419 8.224 c
+-6.913 8.711 -7.551 9.382 -8.074 9.839 c
+-9.724 11.281 -9.908 11.547 -9.911 11.595 c
+-9.914 11.657 -8.495 13.252 -8.295 13.411 c
+-8.132 13.541 -7.808 13.456 -7.601 13.433 c
+-5.32 13.184 -2.962 12.927 -0.476 10.566 c
+2.531 7.709 2.783 5.143 2.904 3.91 c
+2.938 3.565 2.929 0.875 2.709 0.41 c
+2.675 0.337 0.707 -0.874 0.645 -0.861 c
+0.33 -0.793 0.182 -0.267 0 0 c
+f
+Q
+0.694 0.224 0.224 scn
+q 1 0 0 1 349.147 299.125 cm
+0 0 m
+-0.736 0.236 -1.075 1.45 -1.575 2.04 c
+-3.148 3.894 -3.148 3.894 -3.896 4.678 c
+-4.212 5.008 -4.839 5.354 -4.922 5.803 c
+-4.014 7.981 l
+-3.952 8.007 -1.426 7.15 0.33 5.083 c
+1.632 3.552 2.398 0.755 2.281 0.574 c
+1.906 -0.01 0.7 -0.197 0.037 0.011 c
+0.026 0.014 0.011 -0.003 0 0 c
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 346.0513 316.5498 cm
+0 0 m
+-5.275 2.417 -9.403 2.407 -12.049 2.189 c
+-12.049 2.728 l
+-6.604 2.728 -1.522 1.173 2.777 -1.517 c
+2.232 -1.205 1.506 -0.789 0.961 -0.477 c
+0.673 -0.334 0.292 -0.134 0 0 c
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 342.2651 318.0342 cm
+0 0 m
+-3.078 0.794 -4.478 1.111 -8.263 0.96 c
+-8.263 1.243 l
+-4.866 1.243 -1.61 0.638 1.402 -0.47 c
+0.981 -0.329 0.425 -0.126 0 0 c
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 338.2329 318.957 cm
+0 0 m
+-2.557 0.263 -2.657 0.273 -4.231 0.228 c
+-4.231 0.32 l
+-2.431 0.32 -0.671 0.15 1.035 -0.174 c
+0.724 -0.122 0.312 -0.042 0 0 c
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 334.002 319.2739 cm
+0 0 m
+0.335 0.003 0.669 -0.002 1.001 -0.014 c
+0.701 -0.01 0.211 -0.214 0 0 c
+f
+Q
+ endstream endobj 907 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 895 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 899 0 obj <</Subtype/Form/Length 481/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 896 0 R/Resources<</XObject<</Fm0 898 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[180.624 223.274 192.621 211.277]>>stream
+q
+186.627 218.274 m
+186.627 223.274 l
+189.939 223.274 192.621 220.593 192.621 217.271 c
+192.621 213.959 189.939 211.277 186.627 211.277 c
+183.315 211.277 180.624 213.959 180.624 217.271 c
+180.624 220.593 183.315 223.274 186.627 223.274 c
+186.627 218.274 l
+186.078 218.277 185.622 217.823 185.624 217.271 c
+185.62 216.731 186.077 216.274 186.627 216.277 c
+187.173 216.275 187.624 216.726 187.621 217.271 c
+187.622 217.829 187.171 218.277 186.627 218.274 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 896 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 898 0 obj <</Subtype/Form/Length 11026/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 897 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[180.624 223.274 192.621 211.277]>>stream
+/CS0 cs 0.624 0.2 0.2 scn
+1 i
+/GS0 gs
+q 1 0 0 1 186.627 218.2744 cm
+0 0 m
+0 5 l
+3.312 5 5.994 2.318 5.994 -1.003 c
+5.994 -4.315 3.312 -6.997 0 -6.997 c
+-3.312 -6.997 -6.003 -4.315 -6.003 -1.003 c
+-6.003 2.318 -3.312 5 0 5 c
+0 0 l
+-0.549 0.003 -1.005 -0.451 -1.003 -1.003 c
+-1.007 -1.543 -0.55 -2 0 -1.997 c
+0.546 -1.999 0.997 -1.549 0.994 -1.003 c
+0.995 -0.445 0.544 0.003 0 0 c
+f
+Q
+q 1 0 0 1 186.627 219.1992 cm
+0 0 m
+-0.013 -0.041 -0.073 -0.074 -0.083 -0.115 c
+-0.111 -0.248 -0.02 -0.426 0 -0.561 c
+0 -0.925 l
+-0.549 -0.922 -1.005 -1.376 -1.003 -1.928 c
+-1.007 -2.468 -0.55 -2.925 0 -2.922 c
+0.546 -2.924 0.997 -2.474 0.994 -1.928 c
+0.995 -1.37 0.544 -0.922 0 -0.925 c
+0 -0.561 l
+0.034 -0.558 0.078 -0.553 0.112 -0.55 c
+0.141 -0.55 0.182 -0.536 0.208 -0.549 c
+1.037 -1.473 l
+1.432 -2.162 1.781 -2.116 1.796 -2.113 c
+2.048 -2.073 3.175 -0.62 1.896 0.192 c
+1.594 0.385 1.27 0.411 1.126 0.396 c
+0 0 l
+0 4.075 l
+3.312 4.075 5.994 1.394 5.994 -1.928 c
+5.994 -5.24 3.312 -7.922 0 -7.922 c
+-3.312 -7.922 -6.003 -5.24 -6.003 -1.928 c
+-6.003 1.394 -3.312 4.075 0 4.075 c
+0 0 l
+f
+Q
+0.612 0.196 0.196 scn
+q 1 0 0 1 186.627 219.3418 cm
+0 0 m
+-0.03 -0.093 -0.164 -0.171 -0.185 -0.266 c
+-0.222 -0.434 -0.125 -0.678 -0.187 -0.838 c
+-0.188 -0.839 -0.237 -0.941 -0.403 -1.05 c
+-1.157 -1.54 -1.045 -2.159 -0.993 -2.338 c
+-0.813 -2.951 -0.139 -3.261 0.448 -2.999 c
+0.646 -2.911 0.784 -2.775 0.866 -2.694 c
+1.137 -2.427 1.542 -2.629 1.829 -2.42 c
+2.42 -1.988 2.555 -1.604 2.619 -1.418 c
+2.84 -0.784 2.454 0.136 1.624 0.372 c
+0.851 0.592 0.002 0.007 0 0 c
+0 3.933 l
+3.312 3.933 5.994 1.251 5.994 -2.07 c
+5.994 -5.383 3.312 -8.064 0 -8.064 c
+-3.312 -8.064 -6.003 -5.383 -6.003 -2.07 c
+-6.003 1.251 -3.312 3.933 0 3.933 c
+0 0 l
+f
+Q
+0.596 0.192 0.192 scn
+q 1 0 0 1 186.627 219.4824 cm
+0 0 m
+-0.295 -0.834 -1.295 -1.352 -1.079 -2.413 c
+-0.941 -3.092 -0.175 -3.558 0.645 -3.166 c
+2.581 -2.241 2.581 -2.241 2.752 -1.679 c
+3.15 -0.374 2.119 0.265 1.727 0.386 c
+0.83 0.662 0.003 0.008 0 0 c
+0 3.792 l
+3.312 3.792 5.994 1.11 5.994 -2.211 c
+5.994 -5.523 3.312 -8.205 0 -8.205 c
+-3.312 -8.205 -6.003 -5.523 -6.003 -2.211 c
+-6.003 1.11 -3.312 3.792 0 3.792 c
+0 0 l
+f
+Q
+0.58 0.188 0.188 scn
+q 1 0 0 1 186.627 219.6211 cm
+0 0 m
+-0.353 -0.868 -1.382 -1.434 -1.146 -2.564 c
+-1.026 -3.142 -0.354 -3.806 0.709 -3.4 c
+2.435 -2.741 2.615 -2.673 2.848 -2.025 c
+3.232 -0.958 2.919 -0.038 2.048 0.318 c
+0.863 0.804 0.004 0.01 0 0 c
+0 3.653 l
+3.312 3.653 5.994 0.972 5.994 -2.35 c
+5.994 -5.662 3.312 -8.344 0 -8.344 c
+-3.312 -8.344 -6.003 -5.662 -6.003 -2.35 c
+-6.003 0.972 -3.312 3.653 0 3.653 c
+0 0 l
+f
+Q
+0.569 0.18 0.18 scn
+q 1 0 0 1 186.627 219.7588 cm
+0 0 m
+-0.193 -0.418 -0.584 -0.692 -0.794 -1.099 c
+-1.091 -1.709 l
+-1.261 -2.111 -1.291 -2.44 -1.189 -2.809 c
+-1.127 -3.035 -0.731 -4.134 0.979 -3.567 c
+4.729 -2.327 2.779 0.033 2.448 0.247 c
+1.441 0.897 0.102 0.218 0 0 c
+0 3.516 l
+3.312 3.516 5.994 0.834 5.994 -2.487 c
+5.994 -5.8 3.312 -8.481 0 -8.481 c
+-3.312 -8.481 -6.003 -5.8 -6.003 -2.487 c
+-6.003 0.834 -3.312 3.516 0 3.516 c
+0 0 l
+f
+Q
+0.553 0.176 0.176 scn
+q 1 0 0 1 186.627 219.9111 cm
+0 0 m
+-0.013 -0.025 -0.053 -0.04 -0.076 -0.058 c
+-0.436 -0.329 -0.724 -0.613 -1.172 -1.804 c
+-1.294 -2.128 -1.428 -2.622 -1.186 -3.154 c
+-0.786 -4.034 0.174 -4.205 1.666 -3.662 c
+3.819 -2.879 3.945 -0.361 2.337 0.402 c
+1.364 0.864 0.123 0.248 0 0 c
+0 3.363 l
+3.312 3.363 5.994 0.682 5.994 -2.64 c
+5.994 -5.952 3.312 -8.634 0 -8.634 c
+-3.312 -8.634 -6.003 -5.952 -6.003 -2.64 c
+-6.003 0.682 -3.312 3.363 0 3.363 c
+0 0 l
+f
+Q
+0.541 0.173 0.173 scn
+q 1 0 0 1 186.627 220.1025 cm
+0 0 m
+-0.034 -0.067 -0.142 -0.105 -0.203 -0.15 c
+-0.738 -0.548 -1 -1.255 -1.252 -1.938 c
+-1.385 -2.296 -1.491 -2.836 -1.247 -3.372 c
+-0.62 -4.745 1.243 -4.15 1.798 -3.936 c
+4.073 -3.057 4.215 -0.289 2.506 0.421 c
+1.109 1.002 0.006 0.013 0 0 c
+0 3.172 l
+3.312 3.172 5.994 0.49 5.994 -2.831 c
+5.994 -6.144 3.312 -8.825 0 -8.825 c
+-3.312 -8.825 -6.003 -6.144 -6.003 -2.831 c
+-6.003 0.49 -3.312 3.172 0 3.172 c
+0 0 l
+f
+Q
+0.525 0.169 0.169 scn
+q 1 0 0 1 186.627 220.291 cm
+0 0 m
+-0.037 -0.07 -0.152 -0.104 -0.217 -0.148 c
+-0.425 -0.29 -0.869 -0.842 -1.09 -1.384 c
+-1.279 -1.849 -1.632 -2.713 -1.384 -3.395 c
+-1 -4.452 -0.005 -4.766 1.573 -4.327 c
+4.077 -3.63 4.625 -0.767 2.988 0.316 c
+1.701 1.168 0.079 0.148 0 0 c
+0 2.983 l
+3.312 2.983 5.994 0.302 5.994 -3.02 c
+5.994 -6.332 3.312 -9.014 0 -9.014 c
+-3.312 -9.014 -6.003 -6.332 -6.003 -3.02 c
+-6.003 0.302 -3.312 2.983 0 2.983 c
+0 0 l
+f
+Q
+0.51 0.165 0.165 scn
+q 1 0 0 1 186.627 220.4746 cm
+0 0 m
+-0.175 -0.316 -0.542 -0.436 -0.748 -0.721 c
+-1.047 -1.138 -1.145 -1.38 -1.239 -1.615 c
+-1.289 -1.739 -1.721 -2.852 -1.448 -3.597 c
+-0.854 -5.222 1.1 -4.778 1.685 -4.604 c
+4.42 -3.787 4.999 -0.764 3.215 0.386 c
+1.946 1.203 0.235 0.424 0 0 c
+0 2.8 l
+3.312 2.8 5.994 0.118 5.994 -3.203 c
+5.994 -6.516 3.312 -9.197 0 -9.197 c
+-3.312 -9.197 -6.003 -6.516 -6.003 -3.203 c
+-6.003 0.118 -3.312 2.8 0 2.8 c
+0 0 l
+f
+Q
+0.498 0.161 0.161 scn
+q 1 0 0 1 186.627 220.7061 cm
+0 0 m
+-0.06 -0.132 -0.265 -0.211 -0.386 -0.291 c
+-0.737 -0.526 -1.203 -1.41 -1.325 -1.736 c
+-1.409 -1.96 -1.811 -3.121 -1.476 -3.944 c
+-0.72 -5.801 1.951 -4.87 1.978 -4.859 c
+5.294 -3.584 5.17 -0.372 3.113 0.574 c
+1.411 1.356 0.007 0.017 0 0 c
+0 2.568 l
+3.312 2.568 5.994 -0.113 5.994 -3.435 c
+5.994 -6.747 3.312 -9.429 0 -9.429 c
+-3.312 -9.429 -6.003 -6.747 -6.003 -3.435 c
+-6.003 -0.113 -3.312 2.568 0 2.568 c
+0 0 l
+f
+Q
+0.482 0.153 0.153 scn
+q 1 0 0 1 186.627 220.9883 cm
+0 0 m
+-0.04 -0.083 -0.167 -0.135 -0.239 -0.193 c
+-0.735 -0.594 -1.129 -1.171 -1.41 -1.909 c
+-1.685 -2.632 -1.76 -3.635 -1.577 -4.146 c
+-0.866 -6.126 1.876 -5.311 1.903 -5.301 c
+5.874 -3.976 5.345 -0.496 3.416 0.521 c
+1.627 1.465 0.058 0.121 0 0 c
+0 2.286 l
+3.312 2.286 5.994 -0.396 5.994 -3.717 c
+5.994 -7.029 3.312 -9.711 0 -9.711 c
+-3.312 -9.711 -6.003 -7.029 -6.003 -3.717 c
+-6.003 -0.396 -3.312 2.286 0 2.286 c
+0 0 l
+f
+Q
+0.467 0.149 0.149 scn
+q 1 0 0 1 186.627 221.2744 cm
+0 0 m
+-0.045 -0.106 -0.21 -0.167 -0.303 -0.236 c
+-0.487 -0.373 -1.127 -0.938 -1.625 -2.443 c
+-1.73 -2.761 -1.906 -3.878 -1.546 -4.676 c
+-1.031 -5.818 0.788 -6.214 2.508 -5.559 c
+6.319 -4.105 5.737 -0.286 3.15 0.724 c
+1.354 1.425 0.007 0.017 0 0 c
+0 2 l
+3.312 2 5.994 -0.682 5.994 -4.003 c
+5.994 -7.315 3.312 -9.997 0 -9.997 c
+-3.312 -9.997 -6.003 -7.315 -6.003 -4.003 c
+-6.003 -0.682 -3.312 2 0 2 c
+0 0 l
+f
+Q
+0.455 0.145 0.145 scn
+q 1 0 0 1 186.627 221.6582 cm
+0 0 m
+-0.163 -0.362 -0.542 -0.515 -0.779 -0.805 c
+-0.947 -1.012 -1.049 -1.261 -1.205 -1.476 c
+-1.367 -1.7 -1.47 -1.983 -1.721 -2.735 c
+-2.06 -3.745 -1.792 -4.628 -1.661 -4.961 c
+-1.172 -6.201 0.619 -6.721 2.417 -6.144 c
+7.025 -4.662 5.824 -0.754 3.284 0.539 c
+1.422 1.486 0.008 0.018 0 0 c
+0 1.616 l
+3.312 1.616 5.994 -1.065 5.994 -4.387 c
+5.994 -7.699 3.312 -10.381 0 -10.381 c
+-3.312 -10.381 -6.003 -7.699 -6.003 -4.387 c
+-6.003 -1.065 -3.312 1.616 0 1.616 c
+0 0 l
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 186.627 222.082 cm
+0 0 m
+-0.128 -0.296 -0.442 -0.404 -0.638 -0.631 c
+-0.788 -0.804 -0.893 -1.01 -1.031 -1.191 c
+-1.147 -1.346 -1.619 -2.354 -1.622 -2.361 c
+-2.173 -3.904 -2.042 -4.642 -1.843 -5.159 c
+-0.967 -7.426 1.647 -7.027 2.581 -6.683 c
+3.886 -6.201 6.602 -5.199 5.542 -2.518 c
+5.833 -3.224 5.994 -3.998 5.994 -4.811 c
+5.994 -8.123 3.312 -10.805 0 -10.805 c
+-3.312 -10.805 -6.003 -8.123 -6.003 -4.811 c
+-6.003 -1.489 -3.312 1.192 0 1.192 c
+0 0 l
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 186.627 222.5469 cm
+0 0 m
+-0.037 -0.078 -0.154 -0.129 -0.22 -0.185 c
+-1.236 -1.035 -1.83 -2.885 -1.836 -2.903 c
+-2.227 -4.14 -2.24 -5.156 -1.875 -5.925 c
+-0.602 -8.604 3.351 -7.152 3.39 -7.137 c
+4.435 -6.729 6.183 -6.049 5.89 -4.151 c
+5.958 -4.516 5.994 -4.891 5.994 -5.275 c
+5.994 -8.588 3.312 -11.27 0 -11.27 c
+-3.312 -11.27 -6.003 -8.588 -6.003 -5.275 c
+-6.003 -1.954 -3.312 0.728 0 0.728 c
+0 0 l
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 186.627 222.9893 cm
+0 0 m
+-0.038 -0.066 -0.155 -0.09 -0.221 -0.129 c
+-1.149 -0.673 -1.644 -2.171 -2.005 -3.266 c
+-2.01 -3.282 -2.546 -5.07 -2.073 -6.283 c
+-1.016 -9.001 3.053 -7.959 3.094 -7.948 c
+4.312 -7.626 5.98 -7.185 5.993 -5.583 c
+5.994 -5.628 5.994 -5.673 5.994 -5.718 c
+5.994 -9.03 3.312 -11.712 0 -11.712 c
+-3.312 -11.712 -6.003 -9.03 -6.003 -5.718 c
+-6.003 -2.396 -3.312 0.285 0 0.285 c
+0 0 l
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 186.627 223.2627 cm
+0 0 m
+-0.043 -0.052 -0.154 -0.029 -0.221 -0.042 c
+-0.696 -0.133 -1.347 -0.689 -1.732 -1.731 c
+-2.576 -4.018 -2.459 -5.555 -2.314 -6.268 c
+-1.868 -8.458 0.839 -8.7 1.752 -8.612 c
+4.208 -8.376 5.691 -8.233 5.942 -6.786 c
+5.553 -9.723 3.042 -11.985 0 -11.985 c
+-3.312 -11.985 -6.003 -9.304 -6.003 -5.991 c
+-6.003 -2.67 -3.312 0.012 0 0.012 c
+0 0 l
+f
+Q
+0.384 0.122 0.122 scn
+q 1 0 0 1 185.7217 223.1973 cm
+0 0 m
+-1.735 -0.588 -1.748 -4.507 -1.748 -4.547 c
+-1.744 -6.481 -1.201 -7.607 0.015 -8.199 c
+1.797 -9.066 6.081 -9.359 6.651 -7.642 c
+5.914 -10.117 3.621 -11.92 0.905 -11.92 c
+-2.407 -11.92 -5.098 -9.238 -5.098 -5.926 c
+-5.098 -2.855 -2.799 -0.333 0.165 0.032 c
+0.115 0.022 0.049 0.014 0 0 c
+f
+Q
+0.369 0.118 0.118 scn
+q 1 0 0 1 184.3926 222.7744 cm
+0 0 m
+-1.065 -0.939 -0.813 -4.875 -0.541 -5.608 c
+0.425 -8.204 2.403 -8.583 3.208 -8.626 c
+4.27 -8.682 5.294 -9.071 6.373 -8.972 c
+6.625 -8.948 7.249 -8.828 7.579 -8.222 c
+6.588 -10.166 4.567 -11.497 2.234 -11.497 c
+-1.078 -11.497 -3.769 -8.815 -3.769 -5.503 c
+-3.769 -2.812 -2.001 -0.54 0.432 0.225 c
+0.372 0.2 0.292 0.168 0.231 0.144 c
+0.161 0.103 0.062 0.054 0 0 c
+f
+Q
+0.639 0.204 0.204 scn
+q 1 0 0 1 188.1982 217.4531 cm
+0 0 m
+-0.089 0.065 -0.089 0.065 -0.518 0.595 c
+-0.66 0.77 -0.832 0.916 -0.969 1.096 c
+-1.153 1.336 -1.228 1.588 -1.225 1.6 c
+-1.219 1.619 -0.023 2.449 0.592 1.369 c
+1.023 0.611 0.244 -0.132 0.233 -0.134 c
+0.153 -0.145 0.065 -0.047 0 0 c
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 189.1953 222.666 cm
+0 0 m
+-1.292 0.462 -2.253 -0.325 -2.568 -0.584 c
+-2.568 0.608 l
+-1.402 0.608 -0.314 0.276 0.606 -0.3 c
+0.517 -0.25 0.397 -0.184 0.307 -0.133 c
+0.215 -0.093 0.095 -0.034 0 0 c
+f
+Q
+0.655 0.208 0.208 scn
+q 1 0 0 1 188.2393 217.709 cm
+0 0 m
+-0.336 0.357 l
+-0.471 0.528 -0.626 0.683 -0.755 0.857 c
+-0.971 1.148 -1.017 1.271 -1.015 1.275 c
+-1.01 1.29 -0.025 1.71 0.328 0.955 c
+0.583 0.408 0.172 -0.12 0.166 -0.121 c
+0.105 -0.132 0.047 -0.039 0 0 c
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 188.3931 222.9971 cm
+0 0 m
+-0.649 0.121 -1.161 -0.01 -1.766 -0.45 c
+-1.766 0.277 l
+-1.038 0.277 -0.341 0.147 0.305 -0.09 c
+0.221 -0.064 0.11 -0.031 0.027 -0.006 c
+0.019 -0.004 0.008 -0.001 0 0 c
+f
+Q
+0.667 0.216 0.216 scn
+q 1 0 0 1 188.2437 217.9775 cm
+0 0 m
+-0.004 0.005 -0.532 0.572 -0.709 0.863 c
+-0.562 0.878 -0.481 0.886 -0.263 0.812 c
+-0.178 0.783 -0.083 0.7 -0.026 0.632 c
+0.032 0.563 0.087 0.449 0.1 0.36 c
+0.13 0.142 0.09 0.006 0.071 -0.06 c
+0.049 -0.041 0.02 -0.02 0 0 c
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 187.5317 223.1973 cm
+0 0 m
+-0.313 -0.006 -0.486 -0.009 -0.905 -0.208 c
+-0.905 0.077 l
+-0.519 0.077 -0.142 0.041 0.224 -0.029 c
+0.157 -0.021 0.068 -0.004 0 0 c
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 186.627 223.2627 cm
+0 0 m
+0 0.012 l
+0.072 0.012 0.144 0.011 0.215 0.008 c
+0.15 0.006 0.046 -0.045 0 0 c
+f
+Q
+ endstream endobj 897 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 886 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 892 0 obj <</Subtype/Form/Length 450/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 887 0 R/Resources<</XObject<</Fm0 891 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[155.001 324.272 210.999 268.274]>>stream
+q
+183 308.272 m
+183 324.272 l
+198.462 324.272 210.999 311.735 210.999 296.273 c
+210.999 280.812 198.462 268.274 183 268.274 c
+167.538 268.274 155.001 280.812 155.001 296.273 c
+155.001 311.735 167.538 324.272 183 324.272 c
+183 308.272 l
+176.393 308.283 170.99 302.881 171.001 296.273 c
+170.99 289.666 176.393 284.264 183 284.274 c
+189.607 284.264 195.01 289.666 194.999 296.273 c
+195.01 302.881 189.607 308.283 183 308.272 c
+W n
+q
+/GS0 gs
+/Fm0 Do
+Q
+Q
+ endstream endobj 887 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 891 0 obj <</Subtype/Form/Length 13396/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Group 888 0 R/Resources<</ColorSpace<</CS0 889 0 R>>/ExtGState<</GS0 885 0 R>>>>/BBox[155.001 324.272 210.999 268.274]>>stream
+/CS0 cs 0.655 0.208 0.208 scn
+1 i
+/GS0 gs
+q 1 0 0 1 183 308.2725 cm
+0 0 m
+0 16 l
+15.462 16 27.999 3.463 27.999 -11.999 c
+27.999 -27.461 15.462 -39.998 0 -39.998 c
+-15.462 -39.998 -27.999 -27.461 -27.999 -11.999 c
+-27.999 3.463 -15.462 16 0 16 c
+0 0 l
+-6.607 0.011 -12.01 -5.392 -11.999 -11.999 c
+-12.01 -18.606 -6.607 -24.009 0 -23.998 c
+6.607 -24.009 12.01 -18.606 11.999 -11.999 c
+12.01 -5.392 6.607 0.011 0 0 c
+f
+Q
+q 1 0 0 1 183 313.436 cm
+0 0 m
+0 -0.468 l
+0 -5.164 l
+-6.607 -5.153 -12.01 -10.555 -11.999 -17.163 c
+-12.01 -23.77 -6.607 -29.172 0 -29.162 c
+6.607 -29.172 12.01 -23.77 11.999 -17.163 c
+12.01 -10.555 6.607 -5.153 0 -5.164 c
+0 -0.468 l
+0.316 -0.694 0.738 -0.996 1.055 -1.223 c
+3.817 -3.661 7.459 -4.869 10 -7.617 c
+12.018 -9.8 13.458 -12.461 14.279 -15.528 c
+15.091 -18.562 16.901 -19.343 16.918 -19.345 c
+18.873 -19.539 24.733 -10.483 17.857 -2.241 c
+10.879 6.124 0.769 1.958 0 0 c
+0 10.836 l
+15.462 10.836 27.999 -1.701 27.999 -17.163 c
+27.999 -32.625 15.462 -45.162 0 -45.162 c
+-15.462 -45.162 -27.999 -32.625 -27.999 -17.163 c
+-27.999 -1.701 -15.462 10.836 0 10.836 c
+0 0 l
+f
+Q
+0.639 0.204 0.204 scn
+q 1 0 0 1 183 315.2832 cm
+0 0 m
+-0.296 -0.712 -1.487 -1.168 -1.735 -1.898 c
+-1.987 -2.638 -2.003 -3.873 -1.53 -4.494 c
+-1.227 -4.893 -0.45 -4.945 0 -5.167 c
+0 -7.011 l
+-6.607 -7 -12.01 -12.402 -11.999 -19.01 c
+-12.01 -25.617 -6.607 -31.02 0 -31.009 c
+6.607 -31.02 12.01 -25.617 11.999 -19.01 c
+12.01 -12.402 6.607 -7 0 -7.011 c
+0 -5.167 l
+0.338 -5.201 0.788 -5.245 1.126 -5.278 c
+2.249 -5.476 12.141 -7.556 13.761 -19.537 c
+14.172 -22.51 l
+14.637 -23.085 15.725 -23.501 16.46 -23.424 c
+20.584 -22.987 26.414 -9.567 15.896 -1.312 c
+7.943 4.929 0.035 0.084 0 0 c
+0 8.989 l
+15.462 8.989 27.999 -3.548 27.999 -19.01 c
+27.999 -34.472 15.462 -47.009 0 -47.009 c
+-15.462 -47.009 -27.999 -34.472 -27.999 -19.01 c
+-27.999 -3.548 -15.462 8.989 0 8.989 c
+0 0 l
+f
+Q
+0.624 0.2 0.2 scn
+q 1 0 0 1 183 316.4023 cm
+0 0 m
+-0.627 -1.109 -1.866 -1.525 -2.708 -2.391 c
+-4.764 -4.503 -4.447 -6.209 -4.44 -6.223 c
+-4.355 -6.386 -4.355 -6.386 0 -7.408 c
+0 -8.13 l
+-6.607 -8.119 -12.01 -13.521 -11.999 -20.129 c
+-12.01 -26.736 -6.607 -32.139 0 -32.128 c
+6.607 -32.139 12.01 -26.736 11.999 -20.129 c
+12.01 -13.521 6.607 -8.119 0 -8.13 c
+0 -7.408 l
+0.312 -7.428 0.727 -7.455 1.039 -7.475 c
+5.586 -8.118 13.155 -12.017 12.674 -22.548 c
+12.56 -25.061 12.663 -26.477 12.982 -26.758 c
+14.31 -27.928 23.355 -23.683 22.629 -14.042 c
+21.27 4.006 1.142 2.02 0 0 c
+0 7.87 l
+15.462 7.87 27.999 -4.667 27.999 -20.129 c
+27.999 -35.591 15.462 -48.128 0 -48.128 c
+-15.462 -48.128 -27.999 -35.591 -27.999 -20.129 c
+-27.999 -4.667 -15.462 7.87 0 7.87 c
+0 0 l
+f
+Q
+0.612 0.196 0.196 scn
+q 1 0 0 1 183 317.3276 cm
+0 0 m
+-0.223 -0.377 -0.896 -0.494 -1.279 -0.706 c
+-3.983 -2.198 -4.352 -2.882 -7.218 -8.204 c
+-10.977 -15.407 l
+-12.034 -17.649 -12.409 -19.973 -12.123 -22.51 c
+-11.368 -29.204 -4.441 -35.04 3.701 -32.832 c
+16.504 -28.451 l
+19.64 -26.383 21.524 -23.889 22.614 -20.364 c
+24.61 -13.908 21.812 -4.741 13.674 -0.575 c
+6.26 3.219 0.029 0.049 0 0 c
+0 6.945 l
+15.462 6.945 27.999 -5.592 27.999 -21.054 c
+27.999 -36.516 15.462 -49.053 0 -49.053 c
+-15.462 -49.053 -27.999 -36.516 -27.999 -21.054 c
+-27.999 -5.592 -15.462 6.945 0 6.945 c
+0 0 l
+f
+Q
+0.596 0.192 0.192 scn
+q 1 0 0 1 183 318.1274 cm
+0 0 m
+-0.174 -0.267 -0.682 -0.3 -0.974 -0.428 c
+-3.27 -1.438 -6.363 -4.313 -7.593 -6.58 c
+-13.39 -17.262 -13 -20.653 -12.686 -23.377 c
+-12.045 -28.943 -6.307 -36.332 3.975 -34.516 c
+34.373 -29.149 23.201 -7.033 15.417 -1.844 c
+7.621 3.352 0.038 0.059 0 0 c
+0 6.145 l
+15.462 6.145 27.999 -6.392 27.999 -21.854 c
+27.999 -37.316 15.462 -49.853 0 -49.853 c
+-15.462 -49.853 -27.999 -37.316 -27.999 -21.854 c
+-27.999 -6.392 -15.462 6.145 0 6.145 c
+0 0 l
+f
+Q
+0.58 0.188 0.188 scn
+q 1 0 0 1 183 318.8281 cm
+0 0 m
+-0.26 -0.393 -1.01 -0.429 -1.443 -0.612 c
+-4.281 -1.816 -7.531 -4.969 -9.346 -8.278 c
+-13.498 -15.848 -13.757 -21.085 -13.244 -24.146 c
+-12.335 -29.558 -7.256 -38.113 6.018 -35.853 c
+29.65 -31.827 27.567 -10.229 15.691 -2.188 c
+7.725 3.206 0.039 0.058 0 0 c
+0 5.444 l
+15.462 5.444 27.999 -7.093 27.999 -22.555 c
+27.999 -38.017 15.462 -50.554 0 -50.554 c
+-15.462 -50.554 -27.999 -38.017 -27.999 -22.555 c
+-27.999 -7.093 -15.462 5.444 0 5.444 c
+0 0 l
+f
+Q
+0.569 0.18 0.18 scn
+q 1 0 0 1 183 319.4941 cm
+0 0 m
+-0.27 -0.397 -1.042 -0.411 -1.488 -0.586 c
+-3.111 -1.225 -7.249 -3.37 -10.633 -9.471 c
+-11.685 -11.368 -15.021 -18.084 -13.796 -24.877 c
+-12.453 -32.323 -5.461 -39.362 6.714 -37.218 c
+28.943 -33.304 28.97 -11.255 15.609 -2.301 c
+7.856 2.895 0.038 0.056 0 0 c
+0 4.778 l
+15.462 4.778 27.999 -7.759 27.999 -23.221 c
+27.999 -38.683 15.462 -51.22 0 -51.22 c
+-15.462 -51.22 -27.999 -38.683 -27.999 -23.221 c
+-27.999 -7.759 -15.462 4.778 0 4.778 c
+0 0 l
+f
+Q
+0.553 0.176 0.176 scn
+q 1 0 0 1 183 320.105 cm
+0 0 m
+-0.285 -0.403 -1.085 -0.384 -1.55 -0.549 c
+-2.14 -0.758 -7.426 -2.783 -11.14 -9.4 c
+-12.536 -11.888 -15.643 -18.441 -14.343 -25.552 c
+-13.349 -30.994 -7.597 -40.716 7.05 -38.567 c
+28.063 -35.482 30.901 -13.127 16.17 -2.838 c
+7.979 2.883 0.04 0.057 0 0 c
+0 4.167 l
+15.462 4.167 27.999 -8.37 27.999 -23.832 c
+27.999 -39.293 15.462 -51.831 0 -51.831 c
+-15.462 -51.831 -27.999 -39.293 -27.999 -23.832 c
+-27.999 -8.37 -15.462 4.167 0 4.167 c
+0 0 l
+f
+Q
+0.541 0.173 0.173 scn
+q 1 0 0 1 183 320.6777 cm
+0 0 m
+-0.294 -0.407 -1.113 -0.365 -1.59 -0.521 c
+-3.037 -0.996 -8.057 -3.068 -11.887 -9.807 c
+-12.95 -11.676 -16.306 -18.381 -14.886 -26.189 c
+-13.692 -32.763 -6.813 -41.824 7.243 -39.849 c
+28.687 -36.835 31.471 -13.847 16.374 -3.144 c
+8.08 2.736 0.041 0.056 0 0 c
+0 3.595 l
+15.462 3.595 27.999 -8.942 27.999 -24.404 c
+27.999 -39.866 15.462 -52.403 0 -52.403 c
+-15.462 -52.403 -27.999 -39.866 -27.999 -24.404 c
+-27.999 -8.942 -15.462 3.595 0 3.595 c
+0 0 l
+f
+Q
+0.525 0.169 0.169 scn
+q 1 0 0 1 183 321.2148 cm
+0 0 m
+-0.327 -0.44 -1.224 -0.37 -1.749 -0.528 c
+-5.52 -1.667 -9.765 -5.26 -12.073 -9.267 c
+-15.394 -15.036 -16.522 -20.932 -15.426 -26.791 c
+-13.856 -35.176 -5.227 -43.01 7.675 -41.012 c
+29.382 -37.65 31.673 -13.956 16.092 -3.122 c
+8.188 2.374 0.041 0.052 0 0 c
+0 3.058 l
+15.462 3.058 27.999 -9.479 27.999 -24.941 c
+27.999 -40.403 15.462 -52.94 0 -52.94 c
+-15.462 -52.94 -27.999 -40.403 -27.999 -24.941 c
+-27.999 -9.479 -15.462 3.058 0 3.058 c
+0 0 l
+f
+Q
+0.51 0.165 0.165 scn
+q 1 0 0 1 183 321.7295 cm
+0 0 m
+-0.315 -0.413 -1.169 -0.321 -1.671 -0.458 c
+-5.628 -1.543 -10.186 -5.222 -12.509 -9.206 c
+-13.794 -11.411 -17.706 -18.119 -15.958 -27.368 c
+-14.312 -36.085 -5.369 -44.227 7.962 -42.147 c
+29.823 -38.738 32.256 -15.066 16.713 -3.752 c
+8.241 2.415 0.041 0.054 0 0 c
+0 2.543 l
+15.462 2.543 27.999 -9.994 27.999 -25.456 c
+27.999 -40.918 15.462 -53.455 0 -53.455 c
+-15.462 -53.455 -27.999 -40.918 -27.999 -25.456 c
+-27.999 -9.994 -15.462 2.543 0 2.543 c
+0 0 l
+f
+Q
+0.498 0.161 0.161 scn
+q 1 0 0 1 183 322.2021 cm
+0 0 m
+-0.326 -0.417 -1.197 -0.297 -1.71 -0.424 c
+-5.005 -1.241 -10.021 -4.174 -13.317 -9.752 c
+-16.642 -15.38 -17.708 -21.487 -16.484 -27.902 c
+-14.771 -36.889 -5.522 -45.311 8.242 -43.22 c
+29.813 -39.944 32.242 -15.421 16.845 -4.05 c
+8.507 2.107 0.042 0.053 0 0 c
+0 2.07 l
+15.462 2.07 27.999 -10.467 27.999 -25.929 c
+27.999 -41.391 15.462 -53.928 0 -53.928 c
+-15.462 -53.928 -27.999 -41.391 -27.999 -25.929 c
+-27.999 -10.467 -15.462 2.07 0 2.07 c
+0 0 l
+f
+Q
+0.482 0.153 0.153 scn
+q 1 0 0 1 183 322.6421 cm
+0 0 m
+-0.165 -0.201 -0.596 -0.119 -0.851 -0.169 c
+-6.63 -1.321 -11.086 -5.48 -13.33 -8.99 c
+-17.823 -16.018 -17.96 -22.68 -17.283 -27.031 c
+-15.529 -38.308 -5.353 -45.633 6.914 -44.447 c
+29.053 -42.307 33.213 -18.564 18.588 -5.674 c
+9.722 2.142 0.051 0.062 0 0 c
+0 1.63 l
+15.462 1.63 27.999 -10.907 27.999 -26.369 c
+27.999 -41.831 15.462 -54.368 0 -54.368 c
+-15.462 -54.368 -27.999 -41.831 -27.999 -26.369 c
+-27.999 -10.907 -15.462 1.63 0 1.63 c
+0 0 l
+f
+Q
+0.467 0.149 0.149 scn
+q 1 0 0 1 183 323.0532 cm
+0 0 m
+-0.345 -0.419 -1.243 -0.245 -1.775 -0.35 c
+-5.333 -1.052 -10.598 -4.013 -13.752 -8.857 c
+-18.474 -16.108 -18.606 -22.979 -17.885 -27.465 c
+-16.272 -37.503 -7.101 -46.92 7.31 -45.499 c
+29.575 -43.3 33.52 -19.116 18.666 -5.999 c
+9.679 1.938 0.05 0.061 0 0 c
+0 1.219 l
+15.462 1.219 27.999 -11.318 27.999 -26.78 c
+27.999 -42.242 15.462 -54.779 0 -54.779 c
+-15.462 -54.779 -27.999 -42.242 -27.999 -26.78 c
+-27.999 -11.318 -15.462 1.219 0 1.219 c
+0 0 l
+f
+Q
+0.455 0.145 0.145 scn
+q 1 0 0 1 183 323.4082 cm
+0 0 m
+-0.359 -0.424 -1.279 -0.213 -1.827 -0.305 c
+-2.571 -0.429 -9.239 -1.713 -14.035 -8.521 c
+-19.337 -16.049 -19.04 -23.602 -18.666 -26.5 c
+-16.791 -41.035 -4.557 -47.119 6.015 -46.62 c
+29.237 -45.525 34.039 -19.966 18.705 -6.311 c
+9.693 1.714 0.05 0.059 0 0 c
+0 0.864 l
+15.462 0.864 27.999 -11.673 27.999 -27.135 c
+27.999 -42.597 15.462 -55.134 0 -55.134 c
+-15.462 -55.134 -27.999 -42.597 -27.999 -27.135 c
+-27.999 -11.673 -15.462 0.864 0 0.864 c
+0 0 l
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 183 323.7339 cm
+0 0 m
+-0.366 -0.422 -1.29 -0.183 -1.842 -0.262 c
+-5.616 -0.798 -11.203 -3.577 -14.553 -8.414 c
+-20.526 -17.037 -19.484 -25.015 -19.142 -27.636 c
+-17.325 -41.545 -4.721 -48.296 6.215 -47.587 c
+22.825 -46.511 31.838 -32.41 25.896 -16.796 c
+27.251 -20.083 27.999 -23.685 27.999 -27.46 c
+27.999 -42.922 15.462 -55.459 0 -55.459 c
+-15.462 -55.459 -27.999 -42.922 -27.999 -27.46 c
+-27.999 -11.999 -15.462 0.539 0 0.539 c
+0 0 l
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 183 323.9893 cm
+0 0 m
+-0.38 -0.425 -1.322 -0.147 -1.889 -0.211 c
+-3.74 -0.417 -10.183 -1.633 -15.334 -8.604 c
+-20.12 -15.081 -20.496 -23.225 -19.964 -27.016 c
+-18.071 -40.5 -7.311 -49.139 6.811 -48.512 c
+13.567 -48.212 30.458 -42.954 27.513 -22.495 c
+27.832 -24.187 27.999 -25.932 27.999 -27.716 c
+27.999 -43.178 15.462 -55.715 0 -55.715 c
+-15.462 -55.715 -27.999 -43.178 -27.999 -27.716 c
+-27.999 -12.254 -15.462 0.283 0 0.283 c
+0 0 l
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 183 324.1802 cm
+0 0 m
+-0.389 -0.421 -1.333 -0.109 -1.905 -0.156 c
+-5.862 -0.48 -11.762 -2.986 -15.367 -7.721 c
+-21.456 -15.72 -21.121 -23.999 -20.694 -27.186 c
+-18.877 -40.767 -7.134 -50.353 6.621 -49.484 c
+16.365 -48.869 27.809 -42.685 27.992 -27.284 c
+27.997 -27.491 27.999 -27.699 27.999 -27.907 c
+27.999 -43.369 15.462 -55.906 0 -55.906 c
+-15.462 -55.906 -27.999 -43.369 -27.999 -27.907 c
+-27.999 -12.445 -15.462 0.092 0 0.092 c
+0 0 l
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 183 324.269 cm
+0 0 m
+-0.403 -0.423 -1.362 -0.067 -1.945 -0.096 c
+-5.653 -0.278 -11.171 -1.795 -16.407 -7.987 c
+-19.42 -11.549 -22.258 -18.906 -21.583 -25.522 c
+-19.025 -50.59 4.157 -50.418 5.143 -50.399 c
+17.394 -50.156 25.847 -43.167 27.756 -31.704 c
+25.941 -45.414 14.205 -55.995 0 -55.995 c
+-15.462 -55.995 -27.999 -43.458 -27.999 -27.996 c
+-27.999 -12.534 -15.462 0.003 0 0.003 c
+0 0 l
+f
+Q
+0.384 0.122 0.122 scn
+q 1 0 0 1 178.769 323.9521 cm
+0 0 m
+-22.528 -4.551 -23.527 -35.025 -6.329 -46.258 c
+6.847 -54.863 25.641 -52.169 31.069 -35.683 c
+27.625 -47.245 16.912 -55.678 4.231 -55.678 c
+-11.231 -55.678 -23.768 -43.141 -23.768 -27.679 c
+-23.768 -13.386 -13.055 -1.592 0.778 0.109 c
+0.544 0.077 0.232 0.04 0 0 c
+f
+Q
+0.369 0.118 0.118 scn
+q 1 0 0 1 170.9761 321.4922 cm
+0 0 m
+-16.563 -9.063 -17.344 -40.194 9.316 -48.713 c
+16.64 -51.054 30.629 -50.189 36.987 -37.91 c
+32.359 -46.995 22.917 -53.218 12.024 -53.218 c
+-3.438 -53.218 -15.975 -40.681 -15.975 -25.219 c
+-15.975 -12.683 -7.734 -2.069 3.625 1.499 c
+3.1 1.309 2.399 1.057 1.873 0.867 c
+1.31 0.61 0.543 0.297 0 0 c
+f
+Q
+0.667 0.216 0.216 scn
+q 1 0 0 1 198.9263 298.0972 cm
+0 0 m
+-1.706 2.422 -2.871 5.192 -4.806 7.466 c
+-5.581 8.375 -6.334 9.141 -7.046 9.74 c
+-7.103 9.788 -12.699 14.577 -12.706 14.929 c
+-12.708 15.035 -10.925 16.753 -10.74 16.825 c
+-10.058 17.086 -7.544 17.231 -6.875 17.166 c
+-5.111 16.992 -2.438 16.241 0.275 13.649 c
+3.79 10.293 4.269 6.382 4.332 5.263 c
+4.608 0.362 1.816 -1.552 1.125 -1.426 c
+0.589 -1.328 0.314 -0.445 0 0 c
+f
+Q
+0.682 0.22 0.22 scn
+q 1 0 0 1 199.0605 300.5908 cm
+0 0 m
+-1.971 2.884 -3.056 4.472 -4.87 6.595 c
+-5.072 6.832 -5.375 7.116 -5.591 7.34 c
+-5.844 7.601 -6.16 7.969 -6.419 8.224 c
+-6.913 8.711 -7.551 9.382 -8.074 9.839 c
+-9.724 11.281 -9.908 11.547 -9.911 11.595 c
+-9.914 11.657 -8.495 13.252 -8.295 13.411 c
+-8.132 13.541 -7.808 13.456 -7.601 13.433 c
+-5.32 13.184 -2.962 12.927 -0.476 10.566 c
+2.531 7.709 2.783 5.143 2.904 3.91 c
+2.938 3.565 2.929 0.875 2.709 0.41 c
+2.675 0.337 0.707 -0.875 0.645 -0.861 c
+0.33 -0.793 0.182 -0.267 0 0 c
+f
+Q
+0.694 0.224 0.224 scn
+q 1 0 0 1 198.145 304.1201 cm
+0 0 m
+-0.736 0.235 -1.075 1.45 -1.575 2.04 c
+-3.148 3.894 -3.148 3.894 -3.896 4.678 c
+-4.212 5.008 -4.839 5.354 -4.922 5.803 c
+-4.014 7.981 l
+-3.952 8.007 -1.426 7.15 0.33 5.083 c
+1.632 3.552 2.398 0.755 2.281 0.574 c
+1.906 -0.01 0.7 -0.197 0.037 0.011 c
+0.026 0.014 0.011 -0.003 0 0 c
+f
+Q
+0.439 0.141 0.141 scn
+q 1 0 0 1 195.0493 321.5449 cm
+0 0 m
+-5.275 2.417 -9.403 2.407 -12.049 2.189 c
+-12.049 2.728 l
+-6.604 2.728 -1.522 1.173 2.777 -1.517 c
+2.232 -1.205 1.506 -0.789 0.961 -0.477 c
+0.673 -0.334 0.292 -0.134 0 0 c
+f
+Q
+0.427 0.137 0.137 scn
+q 1 0 0 1 191.2632 323.0293 cm
+0 0 m
+-3.078 0.794 -4.478 1.111 -8.263 0.96 c
+-8.263 1.243 l
+-4.866 1.243 -1.61 0.638 1.402 -0.47 c
+0.981 -0.329 0.425 -0.126 0 0 c
+f
+Q
+0.412 0.133 0.133 scn
+q 1 0 0 1 187.231 323.9521 cm
+0 0 m
+-2.557 0.263 -2.657 0.273 -4.231 0.228 c
+-4.231 0.32 l
+-2.431 0.32 -0.671 0.15 1.035 -0.174 c
+0.724 -0.122 0.312 -0.042 0 0 c
+f
+Q
+0.396 0.125 0.125 scn
+q 1 0 0 1 183 324.269 cm
+0 0 m
+0.335 0.003 0.669 -0.002 1.001 -0.014 c
+0.701 -0.01 0.211 -0.214 0 0 c
+f
+Q
+ endstream endobj 888 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 958 0 obj [/Indexed/DeviceRGB 255 959 0 R] endobj 959 0 obj <</Length 428/Filter[/ASCII85Decode/FlateDecode]>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 869 0 obj <</Private 870 0 R/LastModified(D:20091124113554+01'00')>> endobj 870 0 obj <</CreatorVersion 13/RoundtripVersion 13/ContainerVersion 11/AIMetaData 871 0 R/AIPrivateData1 872 0 R/AIPrivateData2 873 0 R/AIPrivateData3 874 0 R/AIPrivateData4 875 0 R/NumBlock 4/RoundtripStreamType 1>> endobj 871 0 obj <</Length 964>>stream
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 13.0.2 %%For: (Gilles Dubochet) () %%Title: (type_tags.ai) %%CreationDate: 11/24/09 11:35 AM %%BoundingBox: -227 -99 143 234 %%HiResBoundingBox: -226.5 -98.5 142.5908 233.748 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 9.0 %AI12_BuildNumber: 434 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: -59.5 -62.5 -46.5 -49.5 %AI3_TemplateBox: 40.5 29.5 40.5 29.5 %AI3_TileBox: -239.5552 -349.6377 319.4453 433.3623 %AI3_DocumentPreview: None %AI5_ArtSize: 841.8898 595.2756 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 5 %AI9_OpenToView: -472.5 308.5 2 1589 965 18 0 0 50 75 0 0 1 1 1 0 1 %AI5_OpenViewLayers: 77777 %%PageOrigin:-399 227 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 872 0 obj <</Length 7432>>stream
+%%BoundingBox: -227 -63 143 234 %%HiResBoundingBox: -226.5 -62.001 142.5908 233.748 %AI7_Thumbnail: 128 104 8 %%BeginData: 7284 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD0AFFA8285353FD7CFF28A8FF5353FD7AFFA92EA8FF537EFD7BFF %53282828A8FD27FF2E2828A8FD51FF847EA9FD27FF5953AFA928FD7BFF53 %52FFA82FA8FD7AFF847E7E2E7DFD7CFFA87E7DFDFCFFFDFCFFFD31FFA9FF %FFFFA9FFFFFFA9FD76FFA9FFA9AFA9FFA9AFA9FFA9AFA9FD1AFFA87E537E %A8FD2BFFA8A9A8AFA8FD23FFA9A9A8A9A9A9A8A9A9A9A8A9A8AFFD17FFA9 %7E28292829282F2F7EA8FD26FFA8532F2829282F53A8FD22FFA9A9A9AFA9 %A9A9AFA9A9A9AFA9FD16FF7E2E012806FD0529062F7EFD23FFA859062806 %FD0529065384FD1FFFA8A9A8A9A8A9A8A9A8A9A8A9A8FD16FF7E28282F29 %53292F29542F54292FA8FD21FFA85306292853295329542F54295384FD1F %FFA9AFA9FFA9AFA9FFA9AFA9AFA9FD09FFA8A87DFF7DFFA8FD04FFA82801 %292829295453542930292F292FA8FD1FFFA95300290629292F2929293029 %2F292FA8FD1DFFA8A9A9A9A8A9A9A9A8A9A9A9A8FD04FFA87DFF7DFFA852 %275227277D27A8FFFFFF530629282F5AA9FD04FF7E5429542953FD1FFF7E %01282FA984A82F7EA8A9A87E29542953FD1EFFA9AFA9A9A9AFA9A9A9AFA9 %A9A9FFFFFF52FF5227527D7D52527D527DF8A8FFFFA8002828297EFD07FF %7E30292F06A8FD1DFFA905280153FFFFFFA9FD05FF7E292F0684FD1CFFA8 %A9A8A9A8A9A8A9A8A9A8A9A8AFFFFFA8527D7D27A8FD05527DFF7DA8FFFF %5328282953FD04FFA9FD04FF7E30292F53FD1DFF7D28282953FD0AFF5A29 %2F53FD1DFFA9FFA9AFA9FFA9AFA9FFA9AFA9FD09FFA8FFA8FD06FFA82E00 %2828A9FFFFFF7E067EFD04FF292F2953A8FD1CFF5300280653FD04FF7E7E %A9FFFFFF7E29292FA8FD1BFFA9A9A8A9A9A9A8A9A9A9A8A9A8FD14FF2828 %0653FD04FF2F2F29FD04FF54292F28FD1DFF2828282953FFFFFFA829077E %FFFFFFA9292F28FD1DFFA9A9A9AFA9A9A9AFA9A9A9AFA9FD12FFA8280028 %28FFFFFFA82F292FA8FFFFFF292F2929A8FD1BFF842800280153FFFFFFA8 %29292FFFFFFFA82F2929A8FD1BFFA8A9A8A9A8A9A8A9A8A9A8A9A8FD14FF %28282853FD04FF53292FFD04FF54292F28FD1DFF5328282953FFFFFFA82F %297EFFFFFFA9292F28FD1DFFA9FFA9FFA9FFA9FFA9FFA9FD15FF53002801 %A8FFFFFFA92984FFFFFFA8292F0653A8FD1CFF7D00280159FD04FF532FA8 %FFFFFF7E292829A8FD1BFFFD04532E5353532E535353287EFD13FF7D2828 %282FFD09FF532928297DFD1DFF7E28282853FD0AFF54282953FD1CFF5300 %280028002800280028000053FD13FFA92828062853FD07FF5329282828FD %1FFF28280053FD09FF7E062906A8FD1CFF28000028002800280028002800 %53FD14FFA806282828297EA8AFA87E2929282906A8FD1FFFA8062853FFFF %FFA8A9FFFFA87E2829067DFD1DFF5300280628012806280128062853FD15 %FF7D0028052801280629062828280159FD21FF7D0053FFFFFF7E012F2828 %0129012FA8FD1DFF2E01002800280028002800280053FD04FFA8FFFFFFA8 %FFFFA8A8FFA8FD07FF7E062806FD0728067EFD23FF7D53FFFFFF7E280628 %28280053A8FD1EFF5300280028062800280628002853FFFFFF7D52FF7D52 %A852A852A8527DFF7D7DFD04FFA9A8282800060006002828A8FD24FFA8A8 %A9FFFF7E00280028287DA8FD1FFF2806002800280028002800280053FFFF %FFA852A8277DFF7D527DA8527D7D27A8FD07FFA87E537D537EA8FD2BFFA8 %28287D7DFD22FF5300280128062801280628012853FFFFFFA87DA852527D %52FF527DA852527D27FD3AFFA8FD25FF2806002800280028002800280059 %FD04FF7DFFFFA8527D7D7DA87D7DFF7DA8FD60FF53002806280028062800 %28060653FD72FF2800002800280028002800280053FD72FF530028062801 %2806280128062853FD72FF2800000600010006000100060053FD72FF7E2E %53525353535253535352537DFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF %FDFCFFFDFCFFFDFCFFFDFCFFFD9AFFCACAA8CAA8CAA8CAA8CAA8CAA8FD74 %FFFD0DCAFD18FFA8A8767676A1A8FD53FFCACAA8CAA8CAA8CAA8CAA8CAA8 %CAFD17FF7D6F446F446F456F70A8FD52FFFD0DCAFD15FFA84B45446F446F %6F6F696F4476A8FD29FFA8A176766F7676A8FD1EFFA8CAA8CAA8CAA8CAA8 %CAA8CAA1FD05FFA8FFA8FD0DFFCA4B4B4BFD066F936F6F689AFD28FF766F %446F456F446F6F76A8FD1DFFCACACAFFCACACAFFFD05CAFFFFFFFD047DFD %0DFF4B44446F4B6F6F9A6F9A6F936F6F449AFD25FFA84B4B446F44FD056F %686F7DFD1BFFA8CAA8CAA8CAA8CAA8CAA8CAA8FD04FFFD04527D7D7D2752 %52A85252A8FFFF764B4B6F456FA1CAFD04FF6F936F6F45A8FD24FF4B4B45 %6F6FA1A1FF766F6F946F6FA1FD1BFFA8FD0CCAFFFFFF52A8522752FF5252 %27A8A82752FFFFA84B204B446FA1FD06FF6F6F936F6F6FFD23FF4C44444B %44CAFFFFFF9A68FD056FA1FD19FFA8CAA8CAA8CAA8CAA8CAA8CAA8CAFFFF %FFA8A8FFA8A87DFF7DA852A87D7DFFFFA1444B4B6FA1FD05FFCACA6F946F %936F6FCAFD21FFA14B4B6F4B70A8FFFFFF76936F9A6F936F9AFD1AFFCAFF %CACACAFFCACACAFFCACACAFD12FF7644444B4BFD04FFA1FD056F936F6F44 %A8FD21FF76204B446FA8FD06FF9A68936F6F44A8FD18FFCACAA8CAA8CAA8 %CAA8CAA8CAA8CAFD12FF7D204B449AFD04FFFD076F936F6F76FD21FF4B4B %446F6FFD07FF9A6F6F946F6F76FD19FFFD0DCAFD12FF7644444576FFFFFF %A16F6F6F69FD056F4476FD20FFA84B204B446FA1FD04FFCAA19A696F6F6F %4476FD18FFCAFFCACACAFFCACACAFFCACACAFD13FF7D204B4476FD04FF6F %6F68FD046F946F6FA1FD20FFCA444B4B6F6F6FA8FFFFFFFD056F946F6F76 %FD18FFA176A176A176A176A176A17676A1FD12FF7D4B444B44FD05FF9AA1 %766F6F6F4B6F4BCAFD20FFA14B444B446F6FCAFFFFFF7644FD056F4476FD %18FF4BFD0420442020204420202076FD13FFFD044B76FD07FFFD046F4476 %FD22FF444B4B6F4B6FA8FFFFFFFD086F76FD18FF76204B444B204B444B20 %4B444476FD13FF7D204B444B76FD06FF76446F444B7DFD21FFA84B204B44 %4B44CAFFFFFF9A44FD056F44A1FD18FF4B20204B2044204B2044204B2076 %FD13FFCA76204B444B6FA1A1CAA1A16F6F4B4B76FD23FF76FD044B6FA8FF %FFFFCACAFD046F456FCAFD18FF76204B444B204B444B204B444476FD07FF %A8FD0CFFA14B204B204B444B444B444B44444BFD24FFCA4B4B444B44A1FD %05FF76446F454476FD19FF4B20204B2044204B2044204B2076FFFFFF7D7D %FF52A87D52FF7D52A852FF527DFFFFFFA876204B444B4B4B444B444B76FD %26FFA8204B4B4B45CAFD04FF6F6F4B4B76FD1AFF76204B204B444B204B44 %4B204476FFFFFF52A87D52A8FF52A8277DA87DA85252FD04FFA87D4B4B20 %44204420767DFD28FF7D2045204B44767DA1764B44444BCAFD1AFF4B4420 %44204B2044204B20442076FFFFFFA8275252527D52A85227FF52A85227FD %07FFA1A1767D76FD2CFFA84B4B204B4444204B444B76FD1CFF76204B204B %444B204B444B204476FFFFFF7DA8FF7DA8FF7DFFFFA8FFA8FFFFA8FD3AFF %764B204B204B4476A1FD1DFF4B442044204B2044204B20442076FD4DFFCA %FFA8A8A8FD20FF76204B444B204B444B204B444476FD72FF4B20204B2044 %204B2044204B2076FD72FF76204B444B204B444B204B444476FD72FF5244 %204B444B204B444B204B2076FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD2FFF %A86F4BA8FD7BFFA84B76A144A8FD2EFFCAFD4CFF4BFFA14476FD2CFFCA6F %6FA1FD4BFF4B4C7720A8FD2CFF207DA144A1FD4AFFA8A176CAFD2DFF4BA8 %CA44A1FD7BFF4476A144A1FD7BFFCA4B76A8FD7EFFCAFD42FFFF %%EndData endstream endobj 873 0 obj <</Length 65536>>stream
+%AI12_CompressedDatax$u?],WmϊjMhV4UUU"k;YjJXfY{Dv}]zϦǧ?ڋ/޼{ɯ~zQꋮؿ^?>bO?o<~ۧ{Ӌ><g?ǯ?>|u7ӥ\p|Z.~Q_qݫᄑ~_lt1Ns}~/Z_,e{2/c뫧ۼ-n^~z/?|?û_<|[yo<6zUgzӛ%ozzEͫ0ݮOcO(/֚?~_ͯ:Z}}ڔ8n?}?mrQ#7{ݯ~yO~?S\gS:mTL;M/ul
+~O\U>~˱e߼{-GX;Lxz=:(~x{|]y G=Oy5 Ƌű־[,Ŷ}CDOm_ֶo_Ϧڹk'V_FƋOċ=w}?~||Ǣv_2Wm޽yz+mAγK[{.?}wt\㧧<֯}z(~ẏ˫˛* .^~xk.[<Kto/_7r^c?_Gth>Mc׶55t'{퓽))^d哽S{S÷>|U?z/?|||FŇǗ.Rw|˺ۇw~z׽|]EʷxYOWr
+_g{o..NQ]e>]t^}z:~zǺo>F
+%_=y/ boY'U>A䛏dGw?|;uw$}ݫ._ڑ!֝R}j[Z:H8=kѻO[K7Q>Oh[j>}]ty]pwvh/rw"^K{їi|/W&7+i^_!>|/R__RO;>]ӻozzց._>NS._G5Sw^>I 󋯟.oh,koTXԜMX=㧇7^~M=W>>r|5_
+9+>~x7\/V?buG^~\~ۇS9J9.ʱ]>|W7~y6c'3=byڷoKN1em0NNI_TO7OXˇQT=>Hxa[ڿyOVW~u=YY7>諗2B~.~&>_T|LZynwvjt]꫿~PG!_|x'{x޽lkD37_
+y^y5xɤæwwCFM.~hLs;Oo\=|_n]Ź.?VH"~_ 8sG VsQ~zL]exqi?eyXu؆cn/Tlu8U.7܏Xqy\ucǛv=w4L5#h>]Mt;MsMkYSyfeX2.2/-{ˮrܭZqe]mcZכv[a+۸۲5ٷ>f}؋>}>˾uWu}~~c:;W~ȟ>nzNW\Cp5]sU?zU?UUJ\M}^zP:]׃r\;ȇַ}\˟Z7enƛzofyֶ-|m<h+O!-F[w)|Zx/tRk럾}yO;yg0Ut -SxXOX~qsB;gƢ]:Ǖvwsxߘo~qҮk.q]:] m~Z_k۾ui_i]kߵ;OgژVo˩6vk];?omNkkv?y[7@p =@kzx:iwC')&t :]CaЈqC:uJ,D:ϿK<o՞*}uj=VqN{3k/>j)Rz6!;ʀ#Ykw[]=n}ʦ]I}>S0{$7]Ӿj8kNr$뉽궞c=sڨ7wL7K%W777w7ֶw7L?jj]~/u&ڹnp{{w{{{S%Tݮ\7ޖ澾m}G}K:BRR~ҽ~޵~rCB~z+Jḯ]vځz z8ɧ1NySϒS=n{=zk=z(z wU=!zfzΖmg]mzn_Նk󬵑Te*j6-\kεm|_s[Ys]PFs cNU\Kg9U-Mik}RqnCrhmiZVUlWiۮUQOLVecg?o?'k?] sgnm⯾~_!RAj:שéX)r}68Fhd^3&G6*wݯ/ꁝ :lꑐS]Ex7igQޤQ9;4KIB> a ޤhDh12_ϖj<({
+OJh8jxx(!aH2Y r:k77Mݪo9G^<+^?kE?n6v-ggQ=n5Qf]#[<2j/~C/yf?i=NF̟LkϦY<]2}VG$1@e?iN!*#c\ChWN`]@h+utEc;z(}Ϧm8kv-XO{o7LNTiAd葁Fl&7 ;6#ϕfA20eCx^3$cJ2.$cƕIbT(d :dA㖌\7:z%#a2m:z9?6ztlMFۓs7JC]=V
+k)IftZK^NMJqN'm e><ȩf3/crv.>R8)#%d#mѱtNΓsC<,᤿ "  Akԣts, 4]1<:d!I<T OqqhЩ;! CZHba W58٣ssrp,Day]\B
+=q
+vu|Vd-"%2P4/~ ij&E=њ>(eFtYϸ$m>Ӊ,k^[XKǔQGHWG'q]wq=8銗㢅?~\ɏN?&VC#~Fy㯽kɸ4y&|0h;_IMƥIl4A]tCU<F/c[/wm]Eww>肟XoWguD珇YV/u"XB<̭OQnsiBڋ:KY7iOrl2Ǫ2YSc9yodbgw>v_nQkM#Yǻ4Pɇ'6._Ÿ|t{6";-t~EzɃ Œv=$-81
+Fr
+@)/';Q7aJ|,*szt=.#d-䭟 $G "u-9
+a
+]?g۳Ǟ$~Ϣt㦻ɧϖpte6YShbn)Z[f oNiqaUi.mBO, tliSӾ?/;_N>UV}jvᢜ4#&zF>|tzMlYG±x"_5hQ_>ۧH9]/ʸ\QT(.MKKtZ;(3{-Y+bݯ_'vVo7Q5Uyw>_
+-Oáe h6e'҃N)H'26PtR7'ԓa\5VH'4IyZz-rZA:yɸ4iyH{jٰғN9|tyI'_pFZ|AZWHW<5-rR閥etHWxup4>ntKґVk7ѓMJx']-/HWuP7VzIݾ6ivQPWElF @]-u@Gls ui:)NK:+SCfkڣN릆:)/cC|z
+v uڞNz>uZ@ңNVj ufIAekޣN뎆:=o:eСNXs uZꤼQWy::Iղ.:)Q P'2unZ9P'au<ZjM9=H'ھA:)ёn^<c@NрV9 'bRIy7Iu% 'N'"`|m:qz=W˫PqnNWGqk'ժ WUWj!T05{ ыq<MA-g)jY urnsv*j[@nϸj8r\7ݠ\-ac('uG)'bB)'erRWäbRNӴuF\ڇPNw<(omRNʛT)glBdJ99"GY;ɑ,?@9iQ9PlO'̂CnAtiǓ1AN;<s@N:n޷e I09-Ms@0CӚ!2(<GdiJ]K\)qyZU9qUrZ]*ϟ'%IN\u}U)qrN\|J]N\Wd牫|᜸AKk-?K\O\kK\gĵVĵu'K\O\k<q>q.qg\ĵu.ZZ̉WˉS:牫 'zJ<q}(u.}⪯IWKMJ\e牫ǜJsU:y*(%'W)qrN\;''z
+Ug֥U9qrJUN\W).qUR*ŜUr: }*U̠J9'<q.qU}{M4􉫖Wˉs*<O\ UZJ\<qJrNY:9q.qgkZiz֪.q.qWJN\kK\kYZr:]*Ur唸NUrZ]*UɉkڇN4&%Z>K\.%RΉ|UdN\=S*=<qJNO\ߝ%7s:>qg*[RURMJ\E}*ɉS*%,qJ9'R>O\ǩO\Z>K\kMJ9'R>O\ ɳ9qrjUJ\W)''򚔸J<qoW=Z)qgkZq~֪bN\kYZu\ĵ%K\kK\kYZĵu\''%,qJ9'<q}r*Ur!yoW)նWKMJ\刜'r$s*-牫sj;K\sU9q}SIW-%ZWLK\C}⪰JS*%eyJ]K\)qyZU9qUrZ]*ϟ'eW$'>qժJ9'Z>K\.'RΉ|UpN\ĵ%eZײ>K\kUJ\kK\<qu]Z]ZkZZ~O\kK\kYZrZ9qy*u9qrJ\<qu]*圸J<q}xO\5)qYu)qշI<qWiΜJ9O\ĵ}*<qծW)UyZ>qS %Z>K\.%RΉUr唸Js.yu%oZ8I풸.G]WGoGnuPI:M4q]:m]IjRmL:٩mBmOdtRs'H顛trvB)6[AM)HkHk:v9b#%.yv[v@L@!M\YZ̵U?\ge3Z~\K2W)gR3W-̵癫̵U癫l3״e]ygj,sպJ9g<\gҞa<q5o-N&Wn#Hu˹#mlJ]1H?O[S@'g4n׬u̠5kmݮY5kNz*LAֹM m$s>ӟ9[:Hꪇi7H:VcƻAWox_g GƝ9`Gi݈ 6 {yg&F0ޠ8Meqo\V*q#lt1dst٬,/,=n!$SިܲYIff%56Z6lV,d6xkf'MfK?eɬy2Y%d6glisv.KhZ9;ID?ٜ$FOdmN٩i1Ɯ&s?g'춴9;&S?g'-粓{BeZWc-rY0m=vpsNGEߠfm0'[ E栟
+eVp(D3洖AZfn)Mk_:/}}xת\r֋MVr[/nzK}9_`}1OoQoj/?9R4|O/XYz63)UyfRO5>L
+!KXCZ'}L*.Lg&|>3iYBx63UifRf&qg39[Y!}t3R<og&hIE̤6LֿI̤LL,p>3)G*L
+I̤̤4q&N3z>LIg&L>3)I1QaQ|fR̤)L*f&n/-I)LJ]}J|fRzkQ̤mLj]M#rNsegIZg3r4Ixg39̤̤̤uR̤M 3Dx63J3ZN3R3?D#v.@_*D ۡOcЗu׮SY eK$V2'k7e#N%US>zʒqlS0}] E=96G^OR>kS aO rl<lMΕ-Fa-VI1:XTQ^xҏf0<JMV-H_ / 9Fɱ'_eOWk8nxgn=D_c>Y@m~>B_mMj9r -}9UkszҕJ
+kl;8ډ2{}c)Cm*y^Ěb}\N>DEǸظzd%E4׎kNRA֞"%+ ,fϱ{#{ẔtfP7IyZ@-E6-6Gx8Rft+QdV7ԤQʓSpZ,g-SF<-&!9F[_h#pKn=,`Z̭قf EݚPK-c %jbf;^PT9E&n eahBj0خ"qE
+=J YC@]ϯBG@]vaƯh@]˕}@] RO-^5nѱDF#j)ut#h})DjpαFRC:}m[H2Zϐq"!t91MpٻZ΀z5^[luӉv"ZBDn#j[hH-АZ$PY
+CUkqdӈZ]5pn:v; ӈ\
+J9zcGR#Hvs@H:vPDe
+JTyjq:mM=8FպU{XK0UշY륣ƥkPTu01O1t0*n^zJǜDh(Zlrzo, *eۭAT3j"*ech3TEI;nսNepISG8ӫJ8#L¸|6^^o*F[9&fMMS75x^IxS{oaoR\t5f=J6b6fe mjOu[`h[|WF۲DXh;MmgHz:rΈnmYcLRxeYV갳O[Mu칣TɚgeK n<6tݤn-%&47)LZ֘z>oܙoޖXSڲ&msdixw3Lw|Sb/囶I&=Xǎo"lY=z:|Ӟ7OߴsZ樝U5
+x˔8'6o9a ͺti{^Hۣm9QgK
+&uFm97=8'bpuo$ks"(sn"IaqM19usRQsh/cWy[p.ᜓuuK\~yn-L9JTH?sr sڜF-27#M$slaIWX0W;brÜ,k9˾5I冹N`9]z4Ήmƹ rϹQ%s#?0꜓f:)-P Љ-⌁NJ^:QEndA'*U>szZjr3WoK\UIWZ6q:%N]ʕV, 7.%-Љ:}"1etʺL:Qr'KntIt"n tb{K\ƒ@'ֶ_QЉ k
+Љk @7F\UӶzc?G'uK8s"`%R>)0'W n--q}8<}omYl}8
+:-o]UsK\q:GʁjstC$-q:xcJWGtcVai
+)XjӤaNvC1 : F_7)+se["U:椬}W3fTԥ9)ڼ`0Nmn <.m_"T·M)<Utv9A]6RƩmL0N궵V1qIy.'٩+k0N\}\܂q.)g* 6~)̺jWq+`إ̉qc딗3NioUyg^0rVѵwq\_(2**_E\!H+̰8
+ 3NӀ{[R$*k@N/S9Z%ᐓU1 hslӭVѪVQy|jU!'*ڞ.r\_ror~tVhaiꗫH/_"bN*Zd90ge9#S rЖH/`+<<[=ulNspN~pEXp& yF:S:nP'bdu\[ںٹNʃ!*P'K*'0(u*cNqky&˞>o_䐕ΉຯW\\Zު?K9yrFnƭ@+v!␣V裹eӎ:Yp4Ɋ/D-o_&+_ԓQgYc,N_ƺ] sNlBXW|1N5薷j̬zoy[YjyuYC[cNW,P'/imZ5U#]=Viqhsc֓$ND:^UfNjIt穂Wvg(,.fw2.킫fi YZkȔs^Si\ws΅@:ٳlIɬSd*S$dܩ rw!
+ +
+9sزK4ڰ_ZN\bf˺9"~A:|UG^݇b[lIMˢ5Dl+.sC̑Z6;Ĭ,[]I)r9OU)JIWŬ2LDY8oG#pjB&-H{~qdߗtyőZ'c"∬_,czUҀMҴG#qͭ jƋ#ѽo.+%yҕ#-9$jȁ^&jHc1GtXJa>t#Y9+Kl3җG>4ڔ5G1Glb7]Lt||9"v#rnu F]@98"wT;!T%螳ދgG~bJ)5GdբnP7Gd` &KG%K "MQ0<PG5f+ڲ;#J] :(uwC#RGt,u}$XHRGfOxH#O =@u{#TG
+ C!q($ q$ ƹAA0H@IF qnda@87Hp.d@HI xC o$o$ !d¡@8B B L8' s$a@8 L8A0H20H`\ڇ2$3@H2 q$ $3@H2H` C ɌC r$@$Ca3 r$N9HI C r$ ɔC!r($P$Sa9494@FHH
+;, ;, C"ɰ"vX$$iDH2H C"ɴC"vn
+"@K2C.!@KQ.e.$%R7N!ʊuo7%n٥r7k8(yz3DHU]dM0ܒ@.O[Fv?YTV4T-T-ezWK<L5T-uzIWKl5K˟A.AhWKjysGY`fRn[vYD?%:ꞁrY
+ (.\Zm,A~K] (.bwpDWU.%RBqDҼZ"fgi:D;v?]rIM4Bt]'e߈%i'u0_}ln62*}s<]NG˟te#f`]䤒D&ɽ{}5KtѱZ2v+$WKd4wUKni$=y,L|?:p,TDeow<k'%g,TIѲڍ5XiHy_]BVy,6)̦,0f u$0bIQK.F],u$8^IpԽ.
+ C!ɠC!t($$С
+ GF?ڈ徍i#b6Rl!`h#%{c6mF5Ҽ9jH(q"d"8FqF(H(EH#H#ԭX5YHԵ`k#K] 6L`Hԭ[#L 5LF2LF)44ꍀRRP6JF2JF@k#m$k5HF2HF
+-b.27fFfF]ɜ]sk#pm$ka
+Fr$ʅ7b m1H\h#Fs$̅6 m9H\x#ιFst kq.\X#ƹFB1҅3 g$.G]H#FFua8ICuh#m$mԡ8F2F@ɨuX#k$mԹ7F2F@Hν:FuC@PH:FuvbM ֹ5smck#:Futs#XHεuh#mֹ7Q7t+G2F H&ڈ.']h#th#Ft$Ѕ7b mAH]h#Ft$Ѕ6 mAHވs.\x#5@פ']F uMIk҈9#N$5iyפ^F4kֈCY#zh#P/H^h#/'H&_X#/HHynDH6q^"zt{#̚7{#95m$RYF"umKeMLֵsm$Oٹ5SvnĔk#ݔk#1egyMع6ع3vČk#݌3vh#);FIsvh#١0g6FHeFFr6B7B7ވi#N$5mڈi# Mq6lHB`Fq
+6o_]rq6"ueC wYN7"ҹ^7"Ǿ82䝋#A:A G#R ~Hi]0r=ذsz#]od+ፌ6ۘ72OjƋz#2;=MiQ*#fcH9F;oH v((a od꾉 Le 4n sk∜W9G+eAn8"i?8Rlq5[& Bm5 ۨ82∴Kđ2ğԩGe)x`slވt)6ѷѡMD@B"yVӦG<<]ы.sx#AroD/, }@oDQoDsatYUM8"e9\YTKh\bI\m&]
+ !ɔ!rH$p$s!
+9]u\& ԹLҡe@$:I2% ԹKKpI@$$@:dL:dHL%ɤ%t$C,?JօKƠ.\DpIH%bV\iIu2Ib݄LbpIu.Ib݄L Y2Ib]$κIu!$օL Y2Ib2 KIzI2\&q@:\L:dHLI2&Iu%P.I:wI:ԹKs$P2I:Iu.\&P2 s$P.I:wIuJI2I`: 'ɰ'v%$!
+㠝%A;K:ڹX+vx%v{Ky%$!
+$O!0\rIC.a
+ϓfK r 3x%!<Kbf\.\.aݒss$\.9<K9<KHk-hݒ.s$=wK"s$
+@pK2-@pKQ.#Q]Ls Dr`8<5D&$.>%R,;[\"_˲\")\knvL{%26"r(jװ>mY ̏Hy5*25*,tKtB. m/r8!\R5.>Xnn+nX2V-;^LʝJt*qW愨WS"YW3~+'^Hd,+ѹTJ D^#bW!|>?E,1^&H; +efx%Rޚ,zHkFT+ް8a QDܲ.K VZ/@Y©m#VcZ*i3F9'&U"ӰV2Zӑf{Zʻj%ɱU2NZVGu7)VɸنU2;aȴEX%2?VI-Xs-D^# DVK $*;,R#VI ԭ@[%B* Uu$3ԥ`K%PJ:UHM* TqԥK%QJ:Tu$@RIRJ.H*@VIԭ@U2Bd@RI(>I(> '$$`ԅ(P)PE](qd
+F`qF^5 k$'k8Y#8Y#8Y#qFqFqF^5$$$'i$HNȋpFpFpF^44k]ysH".'aE-Tp" _"_ዀ8|8|0F*F`ˆ/R/E`HaCq"q"0C,Bd-E*E qEqE^.`*R qEqEqE^---BlDtDt8"8"ɸ}lʸ.[u"@FLu"@r]H\,d %Tu"\,d
+E\,R!Q\.Yu"r]\@Er["@oQDD\'R)]8><
+.O3IN'R!
+P<@CCqeK"qH"@KaTa
+C`vdvHevq!r!P;a!90R1';DCs!s!`9!T!90R1CvHvs!-sB^H^ I yaN^HbnK䅼0'/$9'1$9Đ8'/9y!9y!9y!sR:sBsB^[B Y#H!BrmOrBrBrB^BZHX&i
+9 B*BV
+
+rh!@-@NV
+qX!K+B.(VK+r.@VK+.XRK)..RH%RK)RRK)!TR
+{iTadNVHdоBPxA^ < ف $A^W*$A^A*!$$$䃼3#tR9rN:HIyI_$dd ctA^ctArN6HytlIyк ; | /mȗ6HE_  R6C~ 
+}PA^g]mpAOkzGD3Ao5OtNJ1 q="e r!Xb"ib pz2 ^wAZʡaK:D\n8$X&%eO~_${!>氝iH[R#}ڽ)LD !/կB6lbG#!Į67B,6d،`ؽZdD_xVq%Ğ볘KvRHj糍Ԉ==]sB 8MqB5 NsM޹%ℴk "';ܸbz;.؀uH<|?gNs͝W9ZCXbcGGo(xl'mMuYk)}>E<
+R)! R)!TF 2B
+8
+s"_]С
+F
+9(F*Fڈ(5R)5FH\5嚬(dT5#P],u#r֗SrMH\:(פTʵPG\:ԑ
+&u5#@)krn(T5`IsMH\<r\>R1פ6|Z߼rW0F:쑊&{5#`kG\#]kGĹ&{5#tMkG
+;`<G*G`;Ra;pGHv#v$N v$ ;$vHv²N vHvHvۚHI II I yNININɋv?vRHvRH^Bc.$$$B"Iֵ촜yk9CbXCpH*ZeW8$PDRQD"᐀::PCpH*pH@ !DH !)K֥B"إARip K/  K2/ 
+ KrBR!KB"aTA ~iTad[OIdzH=y$ƞ<҆G=Zy$GuJ#4W64J#ɡ;i$;i$9t'$䑼Нz7#yIɑ;$9r'5r'$G#wRI^CwRIrN*II%cw2IrN&I$y$Ll$yddKO*ITi4I*
+SL`*bTbR$bRLR<P*$ $kRL
+RL@IH1I
+H$H$H1I
+G$ H"HR@"@" E$ HG1I(&IL0IF1I*F1IQD0*d{d!@QD(HA4I
+R%R%%)KDL"¥LRL"!
+0I4I4I
+$ ¥H"¥HR"""I!\$B\$B\$qiqiqiƥIC$R$)KDKDKqiƥJ"ƥJ"ƥKR.2(2I\$2 C&Ia9L0IR9I0I&I& $s$t$& $)C$u$N" C$u$u$I$$t$a@:L:LPI0I*d:LPIRQ0I@&IE& [aTa:LPIRP&X&X&Ia]$IĺI
+R$R$R$)KD$$)KDKDK.M@]$b]$K( DKDKui֥J"֥J"֥KRX.X2X2Ia]$b2 C&Ia:LXIRYI0I`&Ie& $u$u$b& $)C$uI@"IE" C$II$yN"I.DDDd$6,օIBLDLDLd$d$dP'$Y'$Y':Y :$:$/$I>:$/$I$Iֵ$0I`& DC$R$)KDKDK.E.M.M4I4I4I
+$ ԥH"!l/V_IDI>IIRIJ
+%R&R&)KDC&u$:LPI0I*d@:LPIRQI0I@*IE*PP0I
+I@" C$C$u$N" C$u$u$aTa:LPIRQI0I@&IELHIdTa
+0It)t)l/,RII>@&I]$]$\tII9dBID9d(LI0I&I& #aTa@9L(JR)J"a@9LB9D(HI*ID HR!HI"I& $r$r2I& $$r$@Ba@9L9,0I0I*0IG`ba9L4I4I4I
+$ ̥H"̥HR0"0"8"I\$[z7atiХI"ХI"ХIR@&I.E.EBIDIDI>H&I!]$"]$"]$u针u)u)إL"!
+$ ԥH"ԥHRPH"ҥH"ҥHAe-D[*`\BwK&LRd/e2I2/M& KrI$KIPI*R%$~i!d[O"I$zIlScO"ɫ'$!dV8zh$L$yuh$LIICw2IrN&kN&IE&GdFdȝLII#w$y $ɱ;$9v'a0vI&I$Q"Im!C$HR"Lo$$$IRL``$bI
+H" .D\"?"_Ib[?+ _^I3էJe8+/[yDz XxtE,_lǕZIϸ4_-c_7χ2I}X5J|'|֗9%?_<TQS< {KB0=mBFg%6߱@%>\bNil&R%}{~%ffè@أ'O-ܫ*~o=PE<޴Rs ݱꏭ۸_d=L L-vg2Lj ty띋b[b%7AXf:OobJ~>IUb3-F] [$1Z%?ס6pC{&ⶵTI}H0oPd؇l)D]=2TLl/b G'n> .Z%{,abZ |0--g&|bEk,ĉ{3p9)bbbbd +&ee??嗿GuQ^𕋒𕋒\+%+E_(I_(I_(/FIۜ@0 T fa&,lYIa0 `(Q ,%%b0Rʖ:JBB%!BJ#E`$0NJ)'% ,)%0Z]*_N\7W8s7W8)I_V8 Io.p"}sB_+bT@_+--
+r.8rº\D5N:9Y5N:)I:)/INIa$S^OLIΡTΡ$pSu)/a$Su)u):d0Tu؉Xb'u؉PuIA].T"b'\.:.vI`T*d: XRaPTJ
+CQv(*v(*
+PPw*CCIQv(*w(*Eܡ|EEܡ;;CaTa@< R\JW;;)N\DN
+r!/;rż\DCRIaCTIa'UeKI%RCSISyAQ%CU)TI衪$pU^CVI'^{RǺ'^{"'zfrٓB\D['z*
+UCV{*`YbYa=l=lU*U=*PYRY!@=dJ=dU*U
+VJ
+V{*{*
+CVCV{*`Yb_칟(\`/W>ra/W>)˕O\D˥Ora_%JbOJRiE=-}= +/m^+zRVؓ%V*$,ZYԓ򦞼E=@z,R(`%PKT| c aP*X.=V@ؓ$]=y+=y+=V^ГГW*W
+C\C\VJ
+[zx+zx+PqI\C\z+@qI\yAOJB/ĕdĕ$<y+<y+/[I[I[y1OJ2f$Je<-X"EP@<VA)c'ue!OyW,慿F-ՕDJEJ"y%bJ2%RC`Ia’P\ @/WCr5A/WC)˕L\ %b(E@P
+y, "䡰<
+='%'<9,<7'<9,0O
+K2O
+ˋyRXyRXyRX^̓’̓Ò̓^K az8,z8,
+ CaCaz(,PR깵sA\PP\EP
+r=Q/CrAE\EbIꡱȒdIꡲ˲ŒCcؓƒcI!ɒCeIꡲ$pYz,/a$raQ/F)caA/FX0/5ra`^R뢈yk\@ECfz,z,PaTa@=tR@=tJ=tQO6 ffz,@BO6 Cgy,y,0桳|22桳Y*YD<l'a
+< -.˥Q
+ri/Fri\E˥Q\e/FZx-/$ZxX-/ࡵl-;;JK<VK
+[z.ٸ ^K%b Clx-x-aTa@<R"!<Ė<[*[f llz-@z-z-@aTa{-`r!=Ė=-pҕ#[!*)^"*){J{L^"$[^CoI$\^pp[{-{-==-ooY = . |2\(r)R*X.\
+c
+>:|,"ZJ
+-˃1<_ӲX~yI5ۏO<~~ǿ!ki?~!Rzb!Og%>;?X kZO qg?|)q|o{5H_#vQ}\/bry?ʞ˄)6uYGuS<Tk}obiV;OOG,gזj2˹Ge3{|1zmgѢWIN{"I2</E$#2IzɵIzڕx,icedoI+Ғ8_tmuI6\wgTƲIڰֹ5N:ǾIZަIͧ^96o+$mʂs|%<[='ieYe>-=N^~'?ϧeuzJ?WzR-sLϿe;[mêx1xo)fݲ,YǞt[8;|ڭ:nl?-Dc!ϱNS?,[o_U<Wg9\2k0_2D_9w\3o"9ٴxqͺcukVXNY79Ys567lQ̆-kf!ݫrlF׹f6be^ul~uMfƙ׬8e=[J YWX
+vK੐;/sszډq18FmP+vaݣ%6sN8{JDpPǶ?/mqמ }|3v`7lG%mzs:WDW~Qi){dMsӡbګf LО8Z~f_q3k{?h^F|3X\ӬSeR#ŃQZ
+JkWE;8ؓt"?-8q("v EgS;h)>c^/InU֖Ų_eɳ-MaYG[ <=)6'OW<bXВ.f.a#8Mhb627kyd DY5wqvmoX"?5ă+܆8mr=y5"L`/L_cC.9Dk6=ܦvzs{ch#r]^l" <;Uaz؁\Z;ljܗոH
+}ss&Gl<߼M4kzz|N,hi3L.{GmEx
+F(/{OLkOEО؁4]xJkWpSϱ}rN/N:pO m.mzsFo׵Zx .C;ػ~ldc}6טZWi
+<ٶqXЋuQm/` 77NXϿ`PG3y=.|ftƌj-91?W;"uYΑ s]Z2Eo ׏̂!]|Px{OK␶GpxqJ:&ݯjxDе 5S i{AzVwX{,~o+#u`)xe?xD(~oOmןnPO]m~#V<'[gbg4t/539j֦x*8䐎,όş:1tѭnAvegtl|O/|h)d߱_i l19P95'd&Iw!`|oFIT1: 
+lw/Pv78Dfʂ.,ǎh=ƅՍVod?y+(n< x06?\{'1qI_b8KETEpkƯJ_w(ƪsm)vJ;*楳}{^VՂ>^[t,3]\f:=fWVi= g;42^[L3G8pFhm
+} ܷ#*~mtM6nO khn!M6>E}\.k4hVr>_:Ղ6#nÈf}c(OԳƭ
+V
+pS,D*iǝ7<s Hl-:˯/9qw"z!Ak vMP=ⱟxPi5i#NwixQ"dZLdڜ}mC%
+^c3]lO
+mO3
+/A ]A>>޶w22Ϫ|ϸKc1v#84GP!%eEf{$F-H] +6xF/d?*Y 3|OtfVOw|Q럜'd(ǡK)]C}ܙ Qƶ3?VnRk/ch8rrgtxuWm0B3̢666]c*A%Qҗ$|fZKn$ӲNfRʇs[zE{qwARݍ5,Y YSm!oFܖ5Fh\ݸ=^UaMmcg> 6޳WuƩmYnVCi ~ tm?Xe8(iU4 0NkS6GБ"\G1efgc &wڏF2fW+]K xNnrw,8ߕ3 Hf+qƳleܫ~D3^<߶#k'tcNЃcPY\/1l K[YH[!8ٮ|ZdjBցlzstRʶ3h $(O0wp䠝/#K'^fqi5#
+
+þfAca=*
+r{=j.EkDH BUNqϡ*+s#/ ~v3,h_>Ac[W} #?
+ #6$Š
+Z@zj:Xd_N]o_)'?O6m{tĊ</aaNDoǠs6`A5_Cf=g>=&o{mF}C(Oޒ] p4RY뺂LhuX!c엂T}l{FY8
+:#C+ƒ;k#ck;Bm=fq[|jepr2C<zG (tiqH*x3e]y}
+2v?վΛspc[x0 ~*ݴFє-~U=Bg6 2(Ȳ`ʭ $;[٫q-9cqy{Kˏy}Sm_{>T#$ZK0$ʲW'Vg-GDqjR&濹jU{>PcfʛOנLx
+-'c,QCcv?vkD|FMRR/6D: x\ M^x _ǶJM'lή=XKsu>Zs XGV}4m49/, Aot5j u
+KXG'+[?6;esȝ*_tFxLe5C{ Ld- MH1Z9`Lɼ4ۃ^<TKo׭}-JWn>У[Q.VvAϖ;8"-®Ķ;c#(.%/٢
+>ˀ&ֆtyrm e_4
+EVH^l>tyݒNΈ9Y:<AMJ;4];8g׶^?J;ڬXJC\&/;&~U5-2eD =A/}ۥ։Xs!%cg,퇺E4uwJ}]{w=_3~?U0Ѓ^,/6;R.9*153F[Ц(f%i]2lu5?G^4)~دM"#BOpDVNIJKV<,F ky-v;hlhK!1nm\:q۩fFSkRވ>99-+-ՠf,#;qoܸyǘ
+=ض{YC*O߂ ;D+efovԇfفb:1`s3rc^(^Mgm# qv@&-HZ< AWk}a /ќuxz5(,8cxPC<~Ǖ;8qm<VȯMBOVuAM۲R;Rt8\Z<,w~Ov4joX;r^-y_/L*dcG>C1ن38c\kХ|}Fz-;;o?DJI8es
+vL`oߔO};K@3פ)Z\(gS*ܤa„|ona~`*a~S~+hRO vWަƴ|[uf-xF>}^t7tثʣxf ;`XnGM}zX]Y'Nj7T(ǂ;or||7:42ia_Z6t;صV<d=r q17i31U9MFVRh~0Mej$aCъyOe޹|o<)覹davɪSG+>Epӏ)c A4-UX ^U%vM# _gЂJYx-[v0:@[ާ2*W![1%vTE״#TK۩ #^'\۰JSa>GGk}c`Nwۑ#"7')vpdhF ̟ڈ.6zZ<3<x*Lt́9
+w-ss%Γ"r)_ |̄}V7abc(̔s쎠C/ޝ)3;)W`Gfצr;{qZae}%*5sxG*prK-)OhoHwz/(Ua/U52vX o`lY6];iq\Ÿv͑x*"/m~(=<tlÐtg|9ܣ^/h;ɐځgZ>*Srvb `X ;7Y
+7V;c=3)ĩX̃ɰ9Yvpm{v';P~ݤ4RiƩjǎf![#Da;ȎƩ,s*Dб噋{;msU<8KNnsC;͠>wJ8f܍1]-O> v [ţO倣ف1fG+0<]%-W v\CJWkj (r,i=|T͂X7ښ.|=|1{NI`HΨO``au`rͳ{~4]
+ov_ dT"}E԰3PkUp@TfAުx3[8Z*Zi c9`e%rt_'ˁQ-efʛ
+3=Y^l45sd21~ܪǬf[s-۟۱4Î:>O03pS腎T'm#Z!N_|-rx_˶eT,d){{#SQs%m"5لٕ=*Rx۵x5ws-kYƖit۪3q<xkPe
+ҳąu$H4g;(ߓZ";+@;F^nw>D+ G"zMI^
+vM<Yf;!@-1 ('z͝y2H8sʱQJ:
+mv
+;~fU[W_*/KI>25qwނ~}l|JVf 8/^C*4Ca逊/]T›U 9]3M6چo@`+u j ^3ە8EI+u0'~(c*=[#0kZ!{:GN9+}<v0u~Uxey5yvCMEi35Oz}$Ù,Ȃ++zn޹d{&Y3J?V8M0ձ:|$/ ^l;t\.jJB76g/S2ᇪ*1#Ьu(N$r.C5*5bpYsߧMz:NRJoXkȪDdS&G?xB:[Xc)+i.G`NloL-h}sc<oY&Pq12cշMG%R,xR jMr2Q%[75c9b=z%*m,&`>gFpN>v ݑ oUyo;a`0p rMh76z#sKc;}gY霁 |ɉUmi۳.Bƞi{}[u/+d#
+a0`1rΆAVvbo?v[dAL_=$OU~diS+5dDU\,=ͧg~ANC;Um^sDV ض'ըϽ~3^bھsdqG?ӂ I{MXOlAI6oǤȌ;
+]ޫi3:́wwݙq($i6lN:Z}塡gL_,T;1Z9ǁuO"
+Z $gC WsǼW)yG 8C_{̰G0,gB;ZA?yzoiKI^OgUĽ1kl5o Iw䫒ofV3
+-
+2L
+ N^@[Ymi;@Jޓߍ5#?k!y|'O>=!8kA[[Ei}26확51vFp׳iIUl%UJX%`J؂y L{3;<#x|3‹]?*珱,O)UFH$ؘW*UV^# Dۊ0lyOri`"|ú%?l.V2>FWĤ l>VA[)e^vҖu,
+s[_D,[ t:o(<0Н?rJ++%)T/#PM/-zefAWg#PLN֡Y$1fIVJ޳ft\]}H&2EH_ݧN/FdLR|{ZG<pɃ%?"B*~V.L鼫}:Sg9`Ѯ[:X>yn<2uKԊkaDK#G>r&-/&f:烔3>>%[HB߁_ 7΂`Ɣɽ&1fLޡz(gJW97[U
+8AQ2bزw{1|w@E,^7%<v
+_ F|w3\ Z2#b zp;R.o^YyUrƚdd\8*_{V8EUB}*6>3/b:kc 0ʶgM}M>BUMk
+iZ{fk윺lH7a'ZU(k[JoF57k@ZKp'ƽʖ,rm^=ZaVFCey ;@{mKj ~
+^<;\Bڨ+|y_Mgyl{cћZ'H:uxb,u*l˜faD5hy)>+V+\֖Wdfwi刦K_w3:`?iN.תb%*pjmO  /j%VR-qQ0X:md4?|kݢ. J׵fu<IRXZE%d7UΒ^zO,[4ճ΄jU|GO<*S G
+uJUBRLZRbdҶZxD-V1oZe3㰮eX{/PTǺMlJ=%۹vL'[)=^^Y;,Ӭ?+ځQ'&SPϱV+pGo`1UƖ!EL*T=UuiYH֊1yVJy:Hm EnrUa˼r
+k,N]ѠZ57vJ>V+Qg0:p7kurʫ:ڲW Jte *`\PX/1s!jEeřʦWZsu}XgjV|my6xw,mpq_Q
+ز瓉Į,ӞoMER]jCެd:>;9u|̯ P \7rǧ<WD>tBG1pq H`SYqMOL#lE7/+lѼ`W(frʶT[ ;0]KJͶ]EWP3*kv#zVBd~#[^Wk[
+{}.B˒l%|dfG歿G/A@ǻU56#<c1xڵ+Lor?/W.T_$UdٲGP zaL3ZS
+ǪEU9Xyŕ*n?P>seBQpፒSQгբ}x*fS%J7BA{L[${DR9R` R>&63˿{Vd.
+LK֪ H6"l3A6uψ)d~%O(5S_mRZ$
+jr/Rsċ|?6`V JހG5\biLn)X *@B^@!!&ć[A If.R@ۯ6Ċb,N9ͥ
+VIѣPE/DXĴâN3PP.T$%vl"\Io0ENoc2(*9c] HEKkLX:059Wfl +%&2qF^w*>X YRR_GVzta*s5"ǯ 9 17ՂMӴ;(5ŵpn1%CfÒh'[W 2YWQ8ULm:aMgn?u 7QXw J yB!`kY!)\G#J7U
+3N3{YKb1
+99=9A":hz9(9WXL0`m%4T6z2ZBq5VUd4bi1 l kM:h* 1܈r@e+BXHL
+ى>(MGyF<műU6"Pz"l\ N%g 0Q:(dzo4țF C*n=vSfҶI,BC67VB]D~4@iNK.ˢwJQ k<ZBD.- #i%X{K
+;]TM6~~WuP`8,mkQ#qAnRU:cjoN>gJSS4-Bߵ۴$j^sM98 y,0j,+4*ϦHm*OҢeQu~
+>LiU//8LA$1̉f
+N{B~ Ua̔$Y De`Uٺʘ(kE[+qU
+j̻Xً`2. tKFD
+ J:pPC;Ilڀw8ډ';>mZ!#&V5:"@A֒\
+a!h&GhkYWÀDuVNx춚xj_P\Bƌ/df IS4 ka̙}Vk&B%b=5Wc޶-AԐR
+<YM95ٓƻ"EZfϣzՖp&N@՛dz՜ Z۔|C11(5k;'Z)9qNΩ^3<Vdmg;JD,A)Vm9vFԈ|*%ϪVqքAyKT 2L
+i ٰs"G}gKez*.ĩ:ݮDŽy*QOyxĖlV$/'ʔz0xA\%YLC88-BbPiOWJ[uFd[%jeB%C ;dHo&Xpe6Ry
+kD1P17p2M
+'fi,lv2k8]sÐA.[>S+#t)YjuY\ArZR QVjuYm52nGWV JCk,:dNՉ@ٳ|gK2?irٷi0c!?hP6zL) ĸ| גׅ.Qᡠ.^S~F\P1{t#ȒOiN4\P{eN|2O5iN`0#' &AYDfmF+D.φe5hi @cõLN^fD8<,~eubQD}M5
+&09(AʏA' cC!SKA};k 1g3LeIRw՚q[)W "15׆@*
+r` `u4)p62BQWhX^rZn%&SQl=$Ι Y-b.10F1pP(I,D3Т3 IkFr/R6A:<3fLQ`V-X!A ¯gS|L-(rh5+#U- FI{bp (h " 8+Ѣ~'f
+|| PL'I:;UwYV+ ׂcc @3HaqNDZRcޖT qZ<1?I spFKwXkJ(3WB
+DTZ](z䲭Z;`N}A}4Kx]0+;fnݕ6>qgAۤ1p3W;00
+qkaڂ4{=eB3,Vƈҁ2+mQT1Nh䚀ҁCWGU@y8L
+
+ÎemNi c
+F04`EAﰻVUU
+&Z>8$nfVbMbkRW~d |.dpB_<IK =ZbZR
+ܠiVuND*advjɌ6Ҍ<Ov).V$ peE珖5_()2fꖬT L^W1w.s>
+LNa`I2mΞ5k
+[ .=Q)$94ff~؃'!u>2?=/>/'逿Twg^}n/;x@]J>"!h[7cЮS O0d՗/pƟ͞[c7ž={un%ARӞTy4V/Qon&O=f61:2#3E&2!Omy4LlmGqTsZ~7*˱xF.EYEa
+?wY{ꇳ7OnOژgo=@#gWy `9v:;?݇<n'(6ޫWwbr$gח4cCwڎ0ٝ?`gX`1n?`gt!yec8}&c8̎gcql> ݭO.fz 9e p-8^O.f= ;yr0%C 9hbn<>ƪ[D~j"#|xEϯGNDCY~jѓ}sh[pKhOю"ڑ:CzgG~ ?;
+hG~vgG~ܩv>'6/ȇw<6K>6Oxl/ُ_o/w1 3q [PxL͇Ǐ^h Ve ˊ<TY?yS پ~u殓ۋ7gwb{ې?1oPMx,s,s`bEzЋl6X"ӡ zV77o
+9ha;YxñؼbÁx 'r54 I=KIb\]C&wgkg΃ȁߝSvwUXcݩ_x[cͩm@?$jN}٫EߧDB
+ظ1#5_}
+O'ۛכO?t6Fy6mqa?\զ']hX'w,]3]E?onywO#>+[(GZ{c[ďdx?#61~)ٓqRЬq=wO&q$>MGuI{۰wT
+Q
+ƲQ;yǯ=ոm\qj|O5wgrӣͫn6?m3U' Dl~<vNJ!xD/?}ŋƩ_Sr!???͛˻c ۻ6qkOý c9M[MF|Dgi6nnoo苟+d>~-O yust/nޝ}n.;)ʞl {O>"G<Hl>$7{۳>Kɀ+s_mᚳcn{2.lel`2o/TWCD 1RQ{io"".+Kon/_<\QcZ](/}Q\:K+ePP^z;NGYdИW??u}
+jz??r>
+ϋQ:9ݟ:qDo='?Mrz>E j\b9)Ycyk: Myk
+ٻMػ>1ѧjJ^Wϫa-5&!E7}>o5:5ȿԗ,%"m:(ڪPB_mF߮vy{oFO5{ih胹5iCJ>i2i~^2>
+EUmb=;kǝxE,nLGleL/V?>'%i
+z9}|^m$eZ?.V=$g
+s"߮xKy[R09蛠0;.b}'R/SӒܗ]Y]ֽOrٕa0ӏAYO(Y˧El9
+KD?L'?QoR}g}h=2{އeA V%[DMVm
+ҏE Q(*Su&Z'w((c[:w9XJ2K~X)~ttvV&
+[Zejy]m9њC  עnW4U악J$Kh{խۯ RmusmE7'xZǤ9(qS,tzcˢӉ%@X&>離 +i1x?HaqXV'8X`Yzjl%vT:(Qށ5/zHEem}wrrZ۠Iua>^]+vK5-t
+lz*^"KޅE>b}цOiÕդD 맡RdNDaY4\=IgF& }IXsBFBMԔPcU[8<m WŜNL]nY[h.@d(=J\LIFa,d֓ji5!X̒w1~VEި
+X>.B,ZHжC_ĮA
+bfIdF),DGLL{¤]JՖ|iY?bM26u}
+Bb)zJI%׬7A23 ĘL9X+N.\DI57G]@ 1~/@aR.EV&|Dݝ$D]lߣ5)s=1C)+v^)1WG|JG&̺LwW.s+&w wE%-Wg Gx_$R`IѴ*n;Led,xAOvb )qQ3OT OcaBSK.Oȁ)ERĂiP^AJͪmq4u5
+8DʗPv¾w|lkxuYz=Q!5t7ske)<Vl~# g&jTSYNB"K}b}\M|7~~H[]+wvK:D
+}} |'/OuDMl ?d7KĜ]=E䡫9bֻNcgMlUE6D4 ߙ : E&w{wOJNBkrd턜D'ĻGЁpTni3SpubY^֏_z?'SyQyb馓E[J:hL0p6Ms",N"퐈)1D8L-iCT3W)Mp7޾UF%H\ ;L g%OSFY΅Jvhpc+欆>R@7bw@ֶ? ޲zID],R >+ŋÜ "tbp.4QS,B9iM>eCu-m)Z:"Wm,<1,Xk.}vҥVDdcS(K!0"Gܓ3bu }q9v`"] Dg^
+BufS. U.b4>ܗ1xP&^Io`8BFPS-BTrmM|5ODsP0F6 :R$h4j̛<W7M ,Ce iT^ddpi[dq n 80ST+LΪiVuRB=NVON b^TC7XCCgd?vOU]^*֨άɩωj@dr5DJ"4I,
+ʶؽqc[{,bv9׽[9x:9KZ`\";Q6 &OCX7-tSfh+١=ެ܋1V@8ku8UtPb.[}f*Eݯ5
+1`r.2#c<Zq-2z[\Я6 -Xj%1KL3ɹ&9D<jI&(4F S8):PHbaIzYEצ޻8 ɔ:ḣU$[5&I;9HjE$Lá5ymLCq}ʄ45drӹH(IWƛKel"2ӯ<|lv'R"Yr92j%F cYm`}N^ݑ~;AE~ ֎"'uR)DSI'1 0o"trĜ
+0~cm
+SBVZFY"d?e؈.'U[
+5}HmfA&`I "TC%bG3+OPJEò5Jg
+4P |~E&n*Nd4Gv "G "l8@MN3Kb:|iZ?ev:z}Ɩ֐q[pcm
+6Clp]3'Rʮ SLMHZE!A'XPCd"T ԥvvJĊ9s:O/_nW)5 O>hl[dlٱDH2_8 4+Pz_CRƽZ#h[/; ; d(8#m D[Rw-;I|sņ0WU܁3LAnEzo`mG$g+ľ|Yn2Ē
+c@l,Xn-f)dk+|ye
+ n6aPO\\CbTsk 'a+ꦭxBJSz"28p\ X.af,L(۷һ-, \<
+ur8&ԯkJsqi!`p/<f Od5<4ͪI0wk6 ^CJF~؃xX-=HڴY̋0RK2!8k4'11 |U6Av,P{ۮ'0L7Nv
+V0bzFJM^c'Hfy %N8y.>`nQʃHϠY6jlS6u3( W{7@Ns
+ڳܴ0f56z2q9?٤X)=ɱQ+YS̆(P A-׶@133cF9 ݐ.OC
+;:#EC,DE>m&6NDf6d
+_dF3Wv`v$t!Qap
++qp%9&jb486Ym
+Tbj<e7l 4cml=0@5焕
+5lMhYD~=64G X0l;>ࠤPptd~WTCwN9.ˣ"y[X-fٍ8f#`H~+v?>67r [h~U)y.},tx3Ta嵒3jkȿ3nיYTJlB(s/QѢ\;`I(rSt̏τy
+}čyDPW Zb C ;U*@0Yzk̆JĠ,QB'nLe}MG1"&i#JgSlacr13hH%Q!"MTY6NFaZ5ňG+Lt,\
+-.X PJRCA>eފJ E
+@jC0s5Ͷ
+AD\Q 1S%gh;lD5ن0frbqS
+`)C}uKBpB"BB D.q[6Jd5IQNCI;҅4d&hnӔq`u:7ggTlV(jDǀGD
+ ќ,ܼjQ5՘ب9Ed!BUy &-[ij
+o㒝uB.ړ+q)Z3OZ_ӈgj<
+uGnI'lL4H[DdQ#4#[5|dKٮҘ"b'>Zk*VO!bdh,JeF!\U`qTi\u(48Jԭ z"]eZH>Rۂ˝=,-W$
+\j)"!#;N!k x`: <>ͳM-q凑gKRP
+e2΅Gd)E^MEN|y.ڙ, β(еQgk)nYHg#U Lj`!U1f'b$,cӌ\l),٠)KGE%!q1rdI>8˨yGŢCuł9:۹ ҼmQY6Sg1NFۜSQ=ۮTgYWq
+uig0+#* 4+KdQeVI֙}ε\'uK[D$.veBX]6{_ 2P$8f!!gy 8C&ar̆ IO ~o\96gaA&)3.-CߢyKaɳo쪎VvqeS& P5g+:mSɳCCE: R\$q.3ۨ<c?!sOG"+iМ_z6LkL\V[L;ۛ nB݃)l{l
+^H3֦ڦuަt;榼&f;{[޺;o^p S)>}08SmNv qYp,Nb/4Nb<N ȉS^}D<9="s9wD#?`Gk Eoxx>Udk,O9'hy=A<,==YCă=0>M4ӆx'a},1?3'5O9#`蟐wD#J{aʭ
+tt}@h0ʬB] *
+*= 2t6}A
+F(("*]
+ mgPt;Z^(l&kx e~z 7rȡ^ءX=CeC^w0"
+(,{ KT MŅ.B܃){\+
+{Ȣ=آxbg|Qt(t1F(Cg]!bp{`μ;(Xq],1G;(θ^ȣ`cyʃGF=0HtTt3)LkXh>xN{ bI*)8.)L
+aglR뻣IP
+~ PJ8VwG*ҡ/J`W*KY.@-.-`wRaRKVTLia*^()d*]܃e
+hPxhj]1Mjj;rk{ y覠pjPNt:\edw7Z 6 IzϠԯ?NXr"N#p ]%.~voOvb@RC;H0»(.ݡ`>p}{
+@0b HTݡ4-pʦ-ΐʃ,@ րgLzu5{W~1rnb,]<d{8zLsE G|3z<XE6==5t`mC#z>5cl=kx1=o25`mV` =;~)Ki{ĐKdSuwǑ6M|$mݱ.Ѥ3m%`Ⱥm1]JۃqG di3-mk3}/m?"8fzY MɮXӐ&@6v7mbΈ&/1`iSۖ<eI=mӦC?m_lgj6;cPQmwj3-qMzKXvvG]Q[ϻ#R[;cR`;*mvƥ村mKlj{DcsPmcQ=v(v^8`wj5j{vE6N;^u@}jtjb[kfF]Wۃ]l' k<(&Oc@6Ьh d jm&%=dk-`gtk3-𭍾DKkk(xck:Hv.`gk=;c^^^׃,ǃUkh_]_ۃ>Xb`+
+MKl{;}XvmbC\Z`bۃ%*TVqc9A?a(C\d獣7>o>qĒ),#z^%zWVpރm8`W=x`}
+KlV'D*
+Liղ&d2ԉ-2AK{Lcx\Yy0U:D _-cj" PDFLRVSoL߇~j5*.Wt&(? WBf 8_8Ofq0Ի<3 rQ*^dU$W*5=nl
+!pϳTRQdEzȚW³BςһLV_z(vtš-6!
+&)"7;H0|'Qg~]$+,[tv2J9תAq wV(")}nl UӦ*a켩Y:=q&qT0|fGJx $ʑ O 'v@qf4&7Z;WZ5ɖSXj\^WH)fĹl8N[}4DH
+%f&@0/&څ>\Ddg-+ͳ*#BbInKʁTKI,V#;ɘ-@ T~V+hB5
+B.0"&-WT~d>[~g1u-$U!pq ]Lr4cMrxTI_tr
+gd|(iR >E )]:##o`K%iUjS={
+%oF֚K.AEqS(x2co T4s\DG/559
+S-/EV$/Kz>C%/z3sSTs$(S1U8R2))9_V?\@| XPGHItLq̀ʹ7hv:IVC%:
+h/T%T#
+(cPL ֒ulpd+ТDDBVnB0Z ؓ7r
+UUTV& 8wHj
+PN^
+,J#wJB+|CK9]WNVoP40Xd3MA2c𒢦 o|lRlJLzYqEF-\QV+!y1
+`V
+mYY" կ2Y`&1Vs'2Ϸ*FH)d .rOdxjÆ zbgV'К
+BQb,޾.YsJ)GpLؒg"DtX@a\5SAtbM1I2i9ZD]&z'H QSHע,$- Ѧ4DQ CnL$pGiwt{4$]|фu,B4/ՉvD!@4Z %:Bl,LUI=
+,iA$>qt Y >Yhv#B( @ RJ4BX2MkWҨh|S<SǹU\Df>͕`x1Dg.{F~IJg0(- ǕtD/L@eFR[t1̐-D]ӜzGr]<0幎ʤ@Π3w+$ B/,!~,*qM9O,xmkii~p6IIQt*K5*٤Uu6r2PIh
+K^E{t
+M]H
+dEKeFitM7mPN؅abSɅ
+T߮pQ~*.JehI*"#
+491aD<.6yq3%[Yp"Fc aDbT#X`(
+-7-"ixj})P4"3"9UMXrj,߅F\vFx(RHghSd䯽r
+Xzf6{N)Edh/tC,v#B-)#4#` yu3fr a ˯9T
+%qCܙt$X6 +&8`qW1^+
+rL+Naq*j:1r,8Hq #
+/(,Zw: ,:
+MD:2l
+fC$ȯ+ ɨ@WHj3,;\E"xR~77/iRz.8G0X iQAr2*>?а
+<blcK?%
+F8@뽇\$ b5 #
+Ze9
+ .c))G_ 5yX4nI]f\*۰"9s'~ٷ?x~5H8
+Nc-HG:\$?vHIoDLrW,J`re0̖(1:nzQQKHL"IK)|b IF胄ٖ ZA
+344 d_TFdCZK7a<uUq#K@+Eh/89t)S:Yd!%"^,
+2?BJqM_$Jw6|&^2&Q 昢]L}Y}F"45il@^8djy /ۿmgWTR #NX3H&Gy<<$fdr+ ei( RHuuծx݅OYQ yp mD%|իз.Fr,כV@RV$=j-W#0<c3 zЛFӝQpUmXB%aBhN%\o(L
+O:Og+pN_&eOe+ϷiFV:kDo6ЛjBo:k@oƺh>:k<&Λj:o缱::h8o߼vƺk6o׼V:k4od'VΞbFoQYa5EzA7*΅^p:4fA~՜y<tT,SUB)5A+q.UGmZX6MRq E~%7l9Vxtn(SI.I  Tv}<4ME?uù 7S)u8Ws3]ԉeԎDl&`9mvȃ; (φ: $ӤoC^ݐÏtNͽBp<o7~ot왻ҹ3l#ShD7-V!78Fxwj^-mqB\ѝ8zrT=90lnTqgyW1wbDEШ
++(UDP!"Ĺ/6iLH0X眧1Lh"!qo<RDr(uGjc{d7u\t"F 1 ǬpԼU'<mͳ*'d8YiB]Bq p(}n%9dСWc |aO>=
+ĒQ*ɍ}; pM! JİAM9,Z2u,8$@R7GNGFώtsͳ!4xId5gn2yZ /ԉ{xRl8*,!# )}jTl'.JbWNvmyTx&0R+RVO9҃,U0k ט1)Ihd=cp}/Z[BQ 4mhRIp5II|R$Ӄy!ҿw <l&5dWVhIůҋeM_&#:eWIR>BN''V5d-ۯ󛒯^(KGP~X&Y"p6l!G/ҤBTc{(VmG!dA?o 8&L7TҴN6Iװ*CW.Gqxr9iE@UajN a\1ޤS墼Z$1ڑtrL ^i{rºj91O0Gz^ޡa4H|}`'%=<)"fU}Q4zG3[kSlľeړ~r
+:8-& zYljGiӤQ1.jRi ؂Q}C{ lTִ̏
+Xp}j"%tlR0;y pg9gy
+F=NQUl=wFD(8GeT)
+ޅ!TǠ
+F#Ѻ/jxf[H%SJ0d'$Y&I#H+8SkzIs&P̦P ~m2ush5L^ 0yYB*o0R9W!ζN/vҰ[S*GLR *⏐]1eTYX\1n
+GGx>yV<n ͠ʪ$ PnDw'Ӹ^"Ȋ0YKɥɺG əJ?Ol'+ J #ϓ,'$\U*Eg&F_7馽y.ZqHJW3ٮP%A`7Ƒ
+$#ۈќP;ـ ,O{2A^bu1#{4%<3}m{T,>C
+|t:62B9Ye5E$)d'ͰlY YkDz073ArBT
+6MpL/Jn&^
+?%;.${;xb憪4&Fѐ@}d*81^0FUQF@Az"8GGq\ߨY7sAXEfIfLFY^sʦȚ
+>ˢ3m>~V L(v1"̦Y:
+!`U(IEԃ!Zuі%.(T$j^ `* GL"K ɣ Xb^fTd=ÒbW;5m07$whu̡<ۇ:0KW/E=BZV ]}aQ^'Y)H`bVU k{rXV8r$ce0ϰ>|.PuSGzï$JId K2k(  m,k8t.:_b=+nq^߬P
+2bICPc#~Npb)߻tIM`7;dX3guZZcܕف9}#uBBz0u#YpXv0pUaŧȵfu/`޲ 6_zä<+w 1 u%O`q3I t$C`f#=V-GG?^RՋF"HjKKBAڋB^Oʢf=bՔdvp9#ngBu<; "v!3h ݂΂cis Uc- ko<;ZU ,^Td⾩?<l
+50ͳ LF_U]r> :q eyUGj5kbUU&# / qPOE"9h[RLnͥ7MĄ,RbfSUpTE&@rryڸN@edH2E6d }? {AUD;hru9,VrU'# tXR =iJg(vR}/ZCݽ04IJ,)Ķ;l0Q$UWq^&] ql{ )uHQNʹcqW'נFq¢%Aځ=d(yP%2/Pbj(D+(c%sY׭kc(
+1 7
+&
+NѶ}w8mkyaڰY?[f!nĒA+Pl"T~Bd}0u݆R l%Jb]nj9'LUqʮ)ѝ飣2᱈J Y*2 tU@")ee_SrP1o-vO=ڬ1;ѷ}VF2l $&rxCfs"V|_w? kwv<B_i ֙E;2p?ID]r7 n9g֫׫xf>a2Uj 8ixh tj$nRΛG7pA[iP84Ħ~)uhv-f8`Kk˳*BAƵVbUB^G5,у(4[%9=R]TFB*U1xۏr[z]XΌK-=_MHi}LU~a9Hy6|JE4*0G̽g,]gqν <9KKJ&4 YNPt
+cg淥q#lp~LZxf\8 amH.s ,jjTM3$J8)[@H U:JnI n_!
+㹥 >;;;;;;;;
+ݔ#a}$DGZ8!\-Z1WP` Ym`D}1*\
+nɺp+X缈!Cy+܅c}(E@+k"rԳ$q+rBfRaM
+3ʗ:n==}f*% 3[ s
+BӠ᰿Qd%I]͌{4NEnD٪+)Qe w5@[[\ v~xX+"^ylpKrJ43yZ}Wb9X4f;*jf=m&s"BY32 W+@ ]@"k_% ɜ@GeVI..'J:~3hN Ce?uX!"Bu˪<.!Yyjo7ܔ#U4
+LBبt:QE=9.&K #D
+Cp f(*Db#NEC(Qኪщ<9629"i Yu%y)98;uq(qdn
+ۛ\P;#Sv-ӚBegNTjh5$i"
+mJ1%-BfO^8Mt3ƎV1,#WvN-z qf1')(N1I!Pϼ6pzzv11*0J݄@q꤅D4
+@P o$u:!Je$#Om-iK-;Gvlh [*
+ާ |f4Zc6m %E0O5Y$WI^$ۢ+]H*ST0'B 'e!{M^ p)&eAx]kG -P}rY$aXM0#H@ѐTɲ| =9VfU| @fJɣ@ ȷ )bV\7pĻ4L|}ԃr)aTOYw0 bGѴxJXa꾈F/DjdJU3wq-}g:a5
+iAZ>rV$zZ t4RC߲N"QD8BmpHئ&b*@3hAԘdo{|l.*Sok
+c7a h(沝0T1D 7Z[b͍]sS>=
+f]GveE[2<r|N1L!vfhiC(C(57c#f˛`
+nO0/<)ìIj8
+sМ4@FRB/#S(hQig= !5;dW@)
+|cV|u1.T8%Jߕ  QTf6Kd96
+T +Dd~tjhpRh>ںd/Mh$%RT`nԬLkzQ)w]Gl&rgn_R;4T(PL$9,M 8Qf{m{w*U6A`Aϸx,rفA?ϛ 93f?`ffͩ}jq ׭iՀw6
++f;@d4\3Qѭc[ 5t9d$#Fӝt@b7޳DĞ [;>D`r
+IBy\ f0 {}렍,`94l^veA]VC'
+/D{w?zm= ߝ4Y1o%=< ).ٿum
+Ø[l+oMC6[vo5.5_~z~E#W!Eİ4NPM~߮aNiF |iHԬ.zX!aᣴ굗\236n@:&vW||{к|YɎ8r@r& uHu!Ҫ:05ڶ2FIka06jpq~n &Z?e)d[:6j]H[`CM:9װ܄զ]88-\f+d~LV +b%^A(5ݍ9ɥDk*}M puGGVvXet4(CW"d1Sd"<u{*{9o+KSRIE@*y.`{nڼ]YͳFʇ1.In-
+77'*
+n)mvƵv @|<C#IO)]Jsocp{=M{=x.e
+Jsuɷe1 CH`q
+h+#
+{%NΘ(kqꡍ:."YcSu7{X]:(Bn Br'xEYsI)aBK.Q2c`v6|RyysT  .x{7a@lm +BU6sA9y nb<HѓU:@u.GG@ ~azvޡDM4YPe+ܶ#\g qsQZ8_"uZdp
+6ѡμk1T}AAԡYWK_Juҍa$vrt&"6Gj;jr (nW5v u ́<qٽhdkg_]]HIg<7ēzލ c?xj]3B(Sk,ZSft 39>]E}l>\:,fWorKN ]HЌ 
+/xH-uL
+DvM*LPc&.M.)0HȑD2IGSZn d#=)kbe"beBƱ-wHV}:\rnu}$қsuYӷx
+*i-=(H\׹UvƂK*-]*SUOpt~_v0T)8@;+%8̑j^YW<fRD{7۫\rj7yRͭ9>݁5{81aNK6pr(
+ xOI̥@r4i U@QȄ͑#u-)fp=j(^ZIǴ&=pPScSYDo[FӚIQY?QQ ^~
+c%s¸RDGv }%Su& KJ))E>'
+*$fJmf Iɺ9piA4 [4#TvME]p›G4Rf.tkޘFUԓELfW$".U
+.u `–*<\t&hSkxnM#9JK
+$:R$wc-aE=Cא
+UȠ;".M]-4.y h31+?Jt+:y2YL JuA<{7V Bn}xhr*z΃{T8xiCJK(=P"^,w)*;EN}D+0oui<:n AY{rdAlԋYW#pdfqxÜ$x1]">b4H@/O4(Qbd./8VoUt%KHIaSo^auCP
+O}6\yqz@ԤuNb?:&?(טT
+q5s$NBd"7rff [ɜnLgCUV' gn,ȬE>W]!j ϥnÆ6f3-F_aP[Ý9R2ifucɔ_!00yBL [$O)v-ȨCk؆n:Fi|gV)Olo`iE pcRz"wp9
+&T#fлv
+x}f9hswmzRɻqs\@׎;S *vRхcS
+xC+ _*ٯVqzv_TQi ȲpDϨUK?."2+O2s-`(ScXKg$$^Uh#ܩ9a#Eb}eVբ·yo@vCerИj NJ-,/RD愞l60BGidaVtE<BrNYTo>(`ЈTjH:JT^:jt5X; 7RV>\ A`9B%] qqP`0(PTNk8)JOkc
++p3Ӫ?
+/Dw p_ Cg]t$q&>Я X&'IPᡅ~ .\T,v&XoYTĴg2$+ d ~ `F(>,MQ[2;DU'P{G =ަ Bpa7h:rDힱ̲ ]SR J~!m鲈۔lkvEU0(#olXoEd= q3 %]? ɥ:6jƿeaNaOQk X>5xG"Xdt-eouyJqQP_Eл=e ;MJdnfSs5O
+0hBBwBvK=Mq
+`F;XeBNٮ~A k'\X ^<($g|j~Y2Z~c8Hj)c >loLgع-sYJurS|EΝB]ܫn +s~vXe'LL!ՊYqюڜ4*9DG;#c㵐2ʡR
+_ǘP2#x
+|RWY0DdJO)) :&zcpuv..ǎoHv eX„ɶmE
+o٤L%:E)[CFO.Ԓz;=?<{&:BÙ Giَ uJ#:61hBa*V7Ш7's)[}UdG :!y\w/jLrNqa~rt[p
+J}_(L}KcY C2 RZ,5Lj‹z-Be9q <y
+R_:,
+ *+\1ܩRwnߴ&Qi e< *ƫzv!$_CfAS.I11
+jDZrjӓG6p=T_0[_[`bO]kmu8w+J2{3{
+tQ hX% zйH:oIP4&X+D" 禔+\=VUϸ3 VҨ)Q!E 6TW8>95^?H]JqgXɵY#v5hS1CK#e,m}3V('
+n<h _ [#$nAg TFaX!t!v>L3OՌu8?$*JP9h MLyZ6hLv:t(hu@ MưYp3AW&uZ&}Ic5mQp55Y,+)ah`|:r*˱S$ۭ jvTOC
+)}#͚JS"5
+dtrE,lE-;7Zd;+?t㪐kE][g_ `DzG,wxIBrd:wk NGS!X᳜`zו{dO( (>iX +e1.N y68/]^
+C4,?7Y.˶u-/j,œ*Z
+x9uc;]jD]gy XwFSgsH͏C@Y2&eTF|]㚣PnGsh\gF)'5JXA!8
+(H+2z$…KhՉY*VFj'%
+(#Cu /pM=CBt%dޡm2䰙A`55Mx5{F&'cOՎ.YXfW%a
+
+ѓX)q?@ ch?]_#g!ᮩU!3j3Dc- E,6(Y=И("1oXgvḯtfhkb
+$9{sjmX70\Aahmn7=w>TQWtFGcpUrA_Ϩ&miC JtEt?9QaM5wBU;Vu5(/fq
+Ia:]CGrTE4岰 3Ç=J;!B(p Sæ
+S1s1ѤuJuꢖTdwaz\oQe!NS̟( NѵSIX#/Uj+:+־ *-_#G~?A|@:$ "a9{%,otfG1{VE7hD& fSךD\00B4~IdE[VHpGHKs "JR0m,P.mL ^ ^ M\Vf1
+5H ,Ok<wrpfvkbq= 4N)4hy!,#wFo93xu~A xSӅ (+3Iq@ XS+ 7ѥkwh6*p0;A:@!ΐrDG%PkE 9MqDZ^MuN.Ůi-]h+!Ce{z5
+=kj1VequC%5сb@D ˙03,йb` &6ӂ:L4B4|Y)QSBKl(mE9uchD!;Mf[f P3p`R,g(&eqhPzݔ}P! FB9I<+p -F5JЃa"[/İ[uqr`.#iDY:Am7YA*kzJb|?=A5/Rܔ.gSʚ0#a屾IdIJQ 1;8wJXv7.W/c8Q?ѹ
+HY1gs%2YؓM@ʰZVLkT;ADu+ruq/东.SvDa? Qӹ
+RChc۰!8CXXγ@6^pV<əa>)P]gLF[.),28b!Nuo{Er
+ 3tJ%Ϣb!ζ`@*g==*K)֚GXjb}vp@99<` Ɵ^8 sY`͒tc+KKO=T,Q4֖:l<FYo%A! ^;vȚ,56f-&\R9ʿWME?7Q)eF'=JAHqal^n>`n$XO?k1#xvJ"nLpk bhUy+Q^Ac] UgyܲLD)8s!S<vbYuq2 r'Uqg=|w2Q2GiL:fNt͇En"z%bqi|
+J` YG2w
+ZQœ~Qļ4jSi0/a)kd 1*EMFv* 9:TV91mWOelWa6idPrdTcKȆ*˽In4,3'6]+ NSwLVHvkӋA+6نr*ݽrU]KC# U&_1K\YWW5y@{y.
+Dd><)n.0 HC/]*n^^n31#rk[@rAQCq/Ǡ8 $ /@3 E)+EXS/e8Of-,%an-i
+&# ?~)_2ҐC/^Cxw LHk*ՆMˤ2bS;l6Ǟ颌v W-=!>YO.g=_x'޻OOŧ,U+Ws^e@{?G/{
+$oˏϟ]oӣ'zo.C]./__^o\c8*t{le?:u{?^:e+bSUы*@ns1&F<0
+*^9ۑP;|i!4+E~|E~.o7ׅ_~bQ_kQsqx٘Ϗ1|ϗNW9hJi|l*7jtrtS}-S󋛝hٔ7,7/{Nׇ~I}`'_Έغl+:_w~/9)zz_u9ts{L;S3EL?)LoÝ-rg"wȝ-_l;[El ܙ"wȝ)rg|.2E;S3Ezq>W9rg|w;3>;;3>;{c|ܡ;>skYqg}YwǝqXw;3>e:G;3> }Ywǝqg}|nײ>qg}Yw wȝ-rg"wȝ-rg"n[%BnDns])Yب'i᪕pQA?ן.{*}k-J,z=\fuyÓXZ.Tz'.Q%rs#ݮkn5Vg/gr[ |p}rk_x_\^Zczӷ`Y05;A;~'޾A64T
+}^*)vjk0SBZ;_]=ZZMVol{_\<
+voԎ/o>x>>͍G9ty?<ZsK.O{q_B/<98쳓5W7/o5#VR#632eY3e$ccscnӗxs%kr]~qɢ`<5&t?klMC}C}2.w?UH2׿ \.`Ss?uh\Ӱ3xv|qgw7{M|w({3/׾jA .^U>yx?an"﬉J&5|
+IjʟO'Ul*8-Jn&]s /i7wk\O:˺:N7\ǵ;|-{=s:>_K_n'ǧO:oꯓUͫཏ_}p %k_G˯~d$W(>>89: =j-/<}˫ Zu|?ܻ~Yz?_7="ˊ/xd0)ϺHg> @%o?S&SNܺ]+JI;yS?8::/fLFjۗ ;|~7~3Ce [N^'m<e_ի~|Ձp>\YF}Ά-?Z~?Z?׵UғZKьƥ:wxѭ]jBW/eFWF=v't5tU5 +$khxj9Ѵy '^wr}2Mzꗞ8騬E";iv{սJ˂DuoaӼi]}~vvzzf˅X
+]G =k:qqOXԌ-KawZbsT4ǘ&3SfevlJ.^*I-JT}C P0e~@#,snU2d)Ιzn*qB!UVNbrLpڵE9}=͑Vk&Mvu銾;߼^*l[nR,tnbH ;bA(,7w,{\$rlG ne; ɖ>KӆZa6y$!xخmekw]y6(]ctC,J[ƎPc/zyJNQW)Biin{q+P ebei\]\U}@tnXUq^׀z
+l'GW?K|m g"L,U6׮×|跼z/.O]Iۇpy(刽v' /^~m-˓,.s3P /{gf+~xͿת p_Z V +䥇.C_22 ?jQ}~$BڷO!]<]T7_O{xݵy- kG9g{Ǘ'WG{,Te֚}4}|tlӃ˫h⋵KbB`'//|uC'KW\<;9/Y*Ǯ.., peO.p]~AtKW?[6?Na`ۓyg!zO~w㫃ώO\o`yk}.7֢۾x_=>kw]֖]k[9;|~~}?_n6}
+ryC(qxBԡ3|V?{Lae>~ocmW˶}NG[^|m^Ë]lNQ+xo_ ב;f;;_~qtޓ}4÷zy~X.~G?y뭋Homϟ?|OW>ŋg=[ooz{?G|W*to_~qo?s< w?G}P=<}o|ǿ|;?_z?7?˟'/.ʁtr~><g6pgg]?wﵦ:,> L9眚>/γI6N4=7go-TIU*4۵gާa_:5kt0yYňSqZ7L~r1B$Ct(pD|cLɜdO~bҶ4'%v7eOau_4pZ+j /!HRB:!5xFvh٩\x:e-}cEDOYUN<2&PJs2{蹷B={:U¼؄~cTEϑǘ*n>n]<yaM{%F<U:7@f+T+0?ƸW'sVwѝ#s3z]9byfp{(kyx5OWb6FYk(+Jash ̘:cEÒ'XE7O%5WzP3f hy-o%1ѫ _4R3c*S{Մ*.~"">O5`ƚ2ڣ6f~0̬ǬߛF5v,1siymR0m|ђYFX`>34+XƢ I,WsTX|a)>j96mFZD?J{4qh -6ؤ2av-'5Z8a[ ;V,<ɞUb]:KJM\QݖҘJ(4tJ{tJoYS2KL ezTp*sNYd+ʢTwuk7=vJ币=
+M
+\q Rw{45櫖iƩ^CcVs혵極umhㅣS4 v6vt_+wϨscm
+zfN jKD\4UUD;!f58
+i%PУq{FkPߜ˞:Wqk|ҕI$pWZѻou6<n!q{m;6zct;x /@eFo=.l)U:`6{q+({7OU}ek'_-&K5ޠoj~Z{ɿi
+<.g"$kN^MNЩ\hg;ϫI%BaB*Oи.Ny#l.Pr6 \xU>mNٜF0R9iڔ\NS_ZX1Cmp,oO1l4&Zc*'‰G*~̍
+<a)N4n|b5˴}Tdb$u,y)&IŽ}5baKk;?tm+=ܮ̯e\f(ӗ2g%|D6Ylu*v9S\?O~|K^ʘo4 t ~uK
+ uS۰v)'J^.ܩ~R YҁJrD+}T9ڪ}=UUs:n5l׼飲Vp^[Z%ǏZ#}oXV#cĔcیUf-üj.l:\j4>p*N{|yqe
+[1mi3NԞ^rؚ} nV_u14_ط~=/F@c fZ4
+|(gVQ;9uFk5x Js:g<ﮍ3w$dԿͧl0D۝Wژs,PVgE:f|k+yjϏt6},jsط3OW|K+G<_U:j:vGЌ#vuպoweZE}Oc`sO[lɘg{9MwTͻm˽~?Χ=an%BGr;泎q= Ov:Uh
+을]Nn` ۗ ?6;-\hBr6r/LM@[75%ݱ6݋s{5>=,hlRՆp8g $^ -uC Dxn[ M+lb_S;TWYPqZ)\|8g7x|+,kn
+6;:B_wHAĸ<PIƙ61*0qNZЉd{߈ %DHIt[q92"Zu6'\B]@ CG wΙy?$j==<YaY΀=95:@=BȨvaT (n;I
+q["Tz=
+:]|Ą?3s$7 SlѿydftaZ%ӹ<,K`-OGtKkDS(B Ψʗ YKX:S mhP?ԿQJ-KR(/Ј}A(X {(F:a7x{4D V'%n"D0&< y*nf`*0EEunwG6v*hNU1^
+3LHgRuUi6bn"D
+RNatzmiܝEfN^G{5
+ GK`yVڪmJx'˨&"*`b6n7" 첄"8J-:}dp} 3dv؜,@F)} n<izxݥRo vBk;4s<zOc&6Zjw+rV&\rFŁt^*&&B ,htFUGEhſb4\6PxXOIq+sK /)?\6ݪ{:Tw?;mG'WD~&L<Zk&,mqva4MeoL{ZY8"Vztr5x`y׿o!Dۊh0p@>i0X?Xì:}Nw穹K@0;4x4Qtby7y:0OƘZ$faz.Ŀњ/=Vlhΰh v(pw=s* m4y2myKOA,u
+V
+̦e|x4 :)uUaO82ۋ>S 
+ *8%}w];@:[L-H؆R: jҘ(pb9gc8>;<aJMH`=n0)=Qp:``S; U.
+ h2BuhD\X<9F9 Ngk&ɕpNMZu=kՂ8kXU=/ŚvgS,RIN\e:2;%1j
+C#-nNtƉ͏Xol&S_ǎ~DݐV2O@o>B"9Un!?5W\:ql-X4c>ƞj uHyjq:"fTh:g6@5sVG}e!0'/yVO {Y⃭aH!XvRKZ ]H;YPH5
+jbʓ tpqK~Фy1U`,}2=<V+7~x,l*Q,N9ؿ`^73ce -`-d}uY?[{c^Ў
+=%0v%,~.h 9@3KVc&WL`M55>f@Kka9쮝2WbִwDzud4w;0o>Vn|^60(J_i3r:w7Xi}uH']_vc74<CaY7^={R_jCr g>>]ZJu. QrA1o+a 8G_khpXYwp)ժ77UvwlP$&mwL#4Y%9@ry:V*̞,4KJ+6Sc0LɕO{SNS(7 է\vYm3?w>^̾{Zwfc
+\6w{bWzg{ h֎F|KN,X39w^ΛRۡ cqU'Bnld)VoFkCuMlBkԟƧI) ndn^ƝiG* #E_vQJ05
+@A[%UC$:10GALͬ_'MԨJ
+M%`jš6 :j
+
+j &1k8;W~Hd>.nZs?-{X:f^Ԓ~dnQ%:]snGQa;ƟעK;Sf 98~&X2oˣ==p9/R
+-,9Ip+InxgrlFo0W?26y?/4j>[`y3 
+]nڍ^]eHL'N W'>VV5Wlz|Qg2V5{W<
+xUuۚ,ȣ8dR< =@00F\1U23p
+K е.!a0 Y7=)P`$`1x<Vc
+${^_(C-/qCTG k؛ v,㗳 WLb(,u͘0
+2$A
+A{՚Jfn:c-<Rez$uJㅨRJ}C"H{#"*7(ޕF[~DڛY;p?Ϫlzy|ZJE"N!j<.~|b2+D; ׇImHGI] )j.0k^Ue]i-Rc`3Hp!#uzDG*u}o!UDz8Lխ·RB Ș&ma"]<=T |S"ҞY#p QM iү QmT_]
+ߴpҮ U?vG Z hv=h۽֪
+ȏNJ,QPŐ.H `#z BQ1HO#u zW6ZCvQHA
+A`,E_H/TC-< fBZԊ"E:}ZS49=УOD_v"-ݪ(խlZSq0AO[wCYp~xF71'ݢI'~h:"˪P/¾L? 41;Dpꏩt -AB'^ܺ^&qO1S>
+8 dÝ#O tU4P!vFPp H{@  ;\+IS[_)vw-X%]!X~4;p=^xEt<i OO3#DDg1 S3PkLhPymIK$- Ē
+ѝucxwӴ}'뀬*wɹTL- YOpF] 4b 2GsQ]b Y83 2J,o-<%W2>O"J zޫL2tF1f7Qߙ I}Ih/2\>-@ґ]E򢲲R#G]WS %W:?gbe{?
+3#7ʠ#on<-Ş3xCΡΠC<rD :l7s3قIgqr38قIgId C'A N[qdіŇ9ttH{C H0jBڶx x&/EF=ׁyRi`$_p\iԱ_)`,Wn(-ur?+'
+O
+t!_߫9y|[H ϕTRXJkRP&[ d`0nc11cUϬBf7] Z`?nb6\+U}*})`i I8qCl'63U<5Me])f!oܷ̬׶= Y6=^9M~ ʼnUFTciJ<j<7f_Txjx* Ub
+hxQ ׃)8rW91RY9Ly/b\{&* GŸ_{3szL.y̢z]o)/!`JdL$wwVG[|/lcO
+L3례H
+EF*<#BTG5<X(mKS2қnې
+':KFE*y*\Ioؕ± BpT8!N?&>I)lV?Y*i-*Fx>0zAP.YEdLf7uK=\`edH XcNn D wT@<0V3
+R'frbvnĒRYg{ c)TS\bHj]qr?#J^!q3Ь K}ֹ_fP;ҫieAtd;Jtha%_Jer5X 猨9MjUDYFXbz*΃^P;Udx*ɽ'eHȆDwBd\꾽*6"w|k &:#>'dⅈD]&w~wG-ο˦y?̇tB>A~<N(tBxHO8dce zqC/~)̦:ee ұɦʥF6Qfyz4NHaǎM6P.md=wiה~M'*Φ?h^U6nt)I6L~E$s,N8
+pϕ#ҲIO<Ÿ(
+\0^=^Z0ϒxYtr"3 Ń8d,aoAꈺ+Y^-YKSE,t7yOeb'
+,ಣ
+wR)e>Jyѕ>߆yIrC~SN+q~;kgF^e'`EMZ~S/, Cw tG'%B-x.,/I T.v$&(dm׽~G7iLreI19iLA2yMcdeKJ9ILЁ|֮쾕$Ak'JH.<Pn9 b~y"[)]MCo}fv}Jy_渲'!#u+gW'P`[6Lnm5IOFf81Le® +A]I+Gl|8~U{U[͟DIxod^asԞ~(7E
+ƢLc%2(Rmnfægҙ\ .; )75h:^^*pH`~9Nޔ&o!XAVrr`qc [iByJ>ҺTB[i*Js"
+UHds%
+cN׉:`7gJ
+E]?l8$3R[O@dUcWg >ۆήS˼?']Տ^fe~T׏Z{~]OH~{uQ=>4^]~4n6S]?ѶwIkƃ'&'ߒ?N_mWuϛQǥ6Zm=4}^ONӫc5+HDZTՏ*%UW~j{tUom}YOFv=_es]'ó|Tٕ̮'vٻuûxRux>_VU?{ߒKsD1K߯yu$WguCztB,%?$ߓ>&&+n]?q%a^d%,~|>Ȯٟud%Ēr* tJK8ԚQ'+Sq׮t=/mk9 N<x7Eq$Vne%Z7unjv̧ԥpBu?9u> }Ags~c=Ӆ|Dq7Ք*eqνtR\0W1Vd(;:u˕;?f2;Ǟ3~eSh]ƍVO}n5mbE1m :Q"/ĉj'2nMrtF5WL˦1d5w,OH{^#,6S<_*}y j$'ypC,Z   PccEvYUabMkj04H J&N dW\>`h+i񷲆ؚn<qWɯ
+h&z]N,Q-Z@ڧVScvgv uc3
+ib8^7W;]*/ڠ 6gL]^*Ob` [!"&p5c>{o)X/1Mv|SCMhSt-{N.{Гʶ}$o5 #_,2=C
+rkTLd> ˺,bc,j:  +B/Z
+6Nnlfu=S&bJ 6nsoo@ L1h&kzFEϔp$C,Cr  \(VWe:3 ev1FQd
+G0;4 캤ɖQ{dEOo[S P$2qXJKUhs薨.7ЕE_Yz1{tQC#רyq R{g&YaȂ }*3Fj@k#K}O GLB
+YX=-cXچ(pxSPm#>MoJ)#v'wD۞1EGݼM<|e+[x9=6>2uQwg#0_PbgC$6 X_LdW
+e ֯rO&"Nܘ.)+6WHpf`@k,̎fRpYz|{ߓCLK+-kKu±V^y QCсq>U/+kb@9 z-(H:9ѡ%[?ʜ#6枅 |Kj{\d…RmY)e`2#51dy&*`oW{$|4Uȇi[CFb
+$s~C<ky_U ~a9t/UHQs2w<2#Q QXq[L r)0*$QH\v
+ veZCx|oF|R 't_(_3rցSzLUV;LaVI`opH3QÅ<(_}ɚE'bߐk(G0øGYgԉE̼30/
+emny\6ߛ?"r6[8/esܒ}<YcD.u%bǺ&uJvibM|mVUM+zG6oys~Mg d`UrySR_Hrfs+u~|R7<hHAAgb7 pm$:b&}4Jהex"^/"9X`R7Ϊ zGPQGoLWzWT/Mz_PEEꈴ0e`Q~xF`K qڐQ^TYS[Xx_[62$Mw
+SŻZ^ Z^
+BVZVjϺrO}%[f#{(`fS ?Lo{$?rΧp
+oT#$E$(x)&;;a:#!c 5R xGF%5la\BDF$3'/AuvK
+ e[BALmn
+]|z]
+|l]n9GRK@?1h
+i 6Vb_ |( aw
+A2ۚ0ks>;#̉OPz9ص)L^~|Ͼf?˾z_C}ׯs _Gcb|R^vjOaļ> rM ,y$߷|ex˼yE}ᙙ|n<j+{Z7!={
+oz<|Md#}_5.wik?" uĺ/\Z,Ka^&[OGMӷg^< 6An#7ujc$6-H[W}^o2'i^%T<R &o<K^Ge5ǜ#uOq(d/ʽ:'h4~Jk52j|XC Q5{I_B>NM(c 2^5^^,O!X>J<}K܋$ڇK) b^CpN^8jkK9_#ϡ(Vp3{Li.xՌ2V.b\1Z[i\}F ^.^bSK[cAZvF/CuL)-FPj)/ ^cY]_vvYNC-xY gS)21RC0_u+Ʋ3
+Y5K
+޲衪fB&Pl$ p*1D6&q؟Kg*;:F\Hsa`zLۥ%6R_h]#].TFւVX#kr)7VKOּ8U9nHKZoi$+[>7A771&K'Ok/?Ƶqk]z\}@__P^X~$8KԨc <e& Xci-I[/'Hܥu_ߵ׋bS~,^ LXRZ|ؿxQc7%~8>%g6
+`&y:1ROKu䖨L.יi#.]58/n)o k1isaV
+E,-?}ߒҏq)iRCZ׬+#e*
+<|C CgXPmX1kÉ<֭4^@O/j`
+羄y-GYW|^)H*K9<COOÀɏA<M)#n$ڒK?rdN9uRѳ4g
+IաEw46^<O/jp O7v`rV)\!:1\u(P2fbIψU`'VxY\(
+]" s pm ,0^YLJMw3:d2^Z Hʷl6/E]Ytv͡/</ArӦi2-ZD& ڑ9J.5:1Pϫؓ,
+dX@oggIUHiE&YE '
+(k8 g(_p[(z[#dmzjG9;L-0ҥIٺ|yIStGs-;eJt;>ONxKE6 g@ݒ3_ .F &% |31&^r7I-kN(:؛9p<]nxB/$NXX
+3m057wc&f,pOlMRF΂g3 cxFw;?s`a}KEDq#nf\lI*|$l:tIΥ ;sQ/XRӋ$8:eWCEexv|VUgbfqd <J$~NLh!u,veh|/k% Y3=SoHb#:ġٻu}#6tůMk#Ğ,:BB' S: us\ɣ.WJߗ΋$:p't8QKщC'.g ޗ6b8i+: gBGM^s)E\G Dhk22ȗs@
+$)=JZ#,.Z*U
+4 t>褀Fk05)9
+@>$K$ӡg瑌lu.dD(Ըpʁh&A8鵹њNp(L<ocAv['D͵A7 -E6
+c|i)2-
+R :R
+PP5,}N2&d*=#o\t=>6L(a\(J읾yI=(І)EA(IBaŃlxHM!QSS@ 21kVGP)<6h3Ӄe5!j2WTU(Ł1v^F7=0JmL ʎ04Ac19g8dx/L#ضJ08S5 Mg;fiB*9fҮkh9#D3*Yl̋<-JMpc%Pt
+"oghi|۝+o?pu"GJїH0sֶPi.
+-jV|f05EfL+~rxShgR6:(3vp %;A4:k0: 4IChTyGc&Z])p$-D8SU7,9 h,4\atϰ4#+
+XXr>5rϳ'~xU/X9`|Td9۬0 uY:
+ 6R|F}GLAb-C*um@dϰ?޾ӝ<VWw[a Z
+(D=Dvhv'ؠxBa<TYO~H?>w_/>o.H"ó7N)~w y{)"K]m?_k`]##o-)vaPRt U#P}[|gqM'?W>+}fZS7?_տ|O.Z+o=>䧿ǿ}_>{_~ٺ7?__OO^ 7{?{?oo/g_>}>ggWW\~ָ._>+ jU'VH)Ϭl -P7 >2+IJi1U2Ax!=Γc"u&*Q";NR |̘n>;c(B˪|+%,U!|
+xTI5=~ol ` )E=՗a JD/_|~L }_ ِQ Xu= 4l6^hxxxcX"g55~c=v<վ~{9Dóԛzvop 77zt3<~+e^?9xy:Z`j/y޺M[0:CB*S0SY)<3k^۸jCO>O>O>O>Wr=lJ.CZL6*1,Fb2yQݯ2VsNZˤ~CB"W%=^*]sZ.A}<n$Wy?ʈ",(
+J,ȖH7 fxw7.YǏO'*>RT>}|L݋o !7FȜw)IJ*SCVy`)d
+Pm/b\CxG P#\e QLL8'!
+>\~.eAv$LLc~2 $k2Yi *B 9#ӵg.bFgR5u%:yHg٫ueO9q_j.sS ͗`jXHP.b0pixoBh:PInPr;O;3-_ i[N j6M"ʑ-Hܦl&I|iIF }_-Svd_ρԽN㡚;`W(,Q\7ٽN&*S=a8:Wķ p619@W1eh_
+ffA
+a"2\=s8 ĝ:)C{I"T
+Z]T٩B(B>SO^
+˽(Jvx7
+g>D{Բ?`"I_ݳG/g>Xj2,ꋫ<>WRji$˖Y\R^]$.JF) DT*+w֎eOv;62 YV< 橏C -aZ~[*/3? <^p=w*`(5i*:׵i?
+> 6FƲN[r "ږ2 ,=>Fwz6[V;?0-diG dߎ*
+g%6A@? S
+?IOJ:F(N刎Ӕň`OJY'/`>Z嬺tXI"^H0r
+WnEι(ҕzv9z؝Z,uMb|HF;T9uk~n($q/ *.g>~ӊpHti`B였LƃoDR_&1_:^Xէ(kW7Z)=
+Qpe"~gEJJmz:M<Ut"p~L^E,ɸ+h,pβvF$ |f)I&$$m hcid/$wmv
+dHˠoMRMy9[{D/
+ \^MƝefE8 QlyyLd-sI OQT7vZ-P+QⲲIr-\&8E❕b>-`ɡB <FD
+9-sΨ"`)ĉ}҈T8[;Q
+ɔz/-T̓Bנ.S  <d?=3f421n@
+5 bZ ݢnaj҄!"EC^?rP :v1/ШfW3
+ws}yF櫰L1_Jl37# mN*|SmZjrP,~{/*Ω
+45#؇섹Ht+k=
+z(\9xCc '*$#?!^ZWc*FNS_H4A8{-vm?,!-q6 &]ݾ rxc5W0A
+*} ijN$k7f cN;tKL3'}ٴ KҾƓfx=cC+O#yIS'Xw%n(ߎg%}VL3HGke8^zq_N\t5\=3Hl? =5a2Ĕg`ircC5EqH'b`Y-O>>(abrY ݡːMay.D&"/A9ecUx>>_dH{Ը`߉jn K~f g
+<i}T/
+.'[bwsRF?Lfcg`PwxP%:c=v{VNEӮM}f@qMc
+C}&[~ޫwzsCzkGqchn17i`|bT==ǐ?f?[̈3jo֡>z.%,<<t oPqEq*?eNo^Ա LRPJ^T5vlUD$=n#j
+۷W=]P&pKԺ#l|t0Cտ.ii-M]6qņiab`ma]kI7)W5ȉѼV^WOljq vּUI_KA:(ďPYQWHĨu>xa;mft-#ښi^ۏ!!h@>D'F8Ŧ0otpO,vaV,c
+:ݖ%B!-alq^p6uWYsN(8$QGy3g5%z#O&q1.j`j49n5v[^ih<KKe8Fzvգ֡RT8K˚R#˫Q鶬ο䳷cGBX!Նl{(
+Qy өUHS`<%(ASWfFZzUJ*I"5VכXvk< UjTv6<YNt9 >2Q,(FIV:o:5%dV\6W t˷鮬scPrhْ4FdNdݩ&Y58
+*yK[܅hh4.ۡ6B5S#dw.um[- LV8&ii4ÛsVSzIg}ݚrr)+3Cv[78vZ* C%s,kއz2/WQ/ Wom3s'&mI`loNrDL7>i.Lus
+M™oNTDknzyr/npRmj+]e1R vIr'#t朳|nfJqtͪukd 3yݫ[\KmA%
+UO2fE!P\<.($4MdY0ʬ x)Vt2H=͗bˑkNdsda]x92cϚs_21\}NwM;n'>_P̵? $+@-0Fb6BE`ƭ0dE NUIƽ߬C5RwhQ93]\9佞l>(GQty^pɿ ޼5.G[SE$uŶ}{-lJ0P{Q!Œk- ?wP{^;P^/uPCpZA
+,KH4K#ߓېo!̪! 5L*۩*)
+VֈRz}1K؟Y:l/fNG'ۖHp&#LLۆf
+Rb8\r$"fm1kR%H޸X:Y`SUw ht9wIPnTwWўXaD8J0=7q4" <Q78,.47Kp-Տ˗yYFz!~w=%M[`.<nvm@bl L~A(vs!"Ǎ+GN Qv2JBRQ#M}*Qg<qyX ZsD:
+DJS}J՜
+cÖsqŨV 3ڹQc! wr:1n!6 8,].ԝ(f c1[&ӣqU
+x悲qzq|Vt(Z:Q6TL 0]`P9b
+. *{^:/H׊Ċe)Wn-W%'c3
+7vlQyƼie),݉ކyEߴfN e>JXwp ]ΐ_0k$7}$CR|hKDWWq ST0[-%ܺ cz|,=B*cm8-.Bb`+T!}(VCZHTWYˁRԣzqXDVR<<w0T3^C<I}S4$+6|qUG[45bIԠ r̭8}Ec_adx0Lj}ItL3]t{mt# [VpG
+W#ѿqDT2*NwtaT]$U0OQ}]f"ꊠ{%Aj{Jd
+>7h3(F?jOⓟO߼쏟~/9 Jkc|?-}Wx?x<
+zBտ^0!w5wwɶU+Ic cyo7_>0)!ZwwyVϞju
+XW] _*o<zWM)v1;I<أW즰LRaO5)Vqbh.}o(;fW}1M%Ef)LSm6Gf:5N/a"|Tn?Bd=}zQ"/ӣpWv7 ׹8֣Q@h\3(uɬcׁ.}{)
+Ƒ!v<Lf FhGd@w@r#7t>!;mm<llȈ=jh_ %{cUUhâl[;uwB&*Ԯ
+ݱHdr|a9S\G)~JM{{iZbcy QvFҚ^ގ|o^Ⴋ;`:ew<,t- )#*JTL+.Cv\vRvꄾvn6&D+5{pY# B.%! D~̌ȀS2"Ґ%Sb*/>FG#)~͆rwuŬZ`d:ɼXI)%@߼OaxS)d&go>$'2yLpE \"9rt\:Z5:R3 a]4NGl})3B1E@`Q+@xvhjY& 09q~`E1Y °s %25.=7iK1`Qp<e>0ך$yٙ^^ܧ@<'xmpfbL~q=10A]#r&v{@ \3:ҫ$$n]e*2h!ֲ; +C$IWC0Q&0^* sùZ+{RIh9(⻫0zӺ iN؍{NZ͉ST^-.<_O|$i:Rpsռ€4J Ϡ)1#d:H
+Q
+Qi`Dee*?[8@[0!<'~; )fM*K4fJnT8,P>Es6pYIv&q^z_~_ܦt둽W* e{oւEvJ(@cB1P& #ˤM8b$ ^Z
+Kc
+4kA%X/gHGK0] %"@ɬ_bw&]*31h*y>Cn Hg9- gZ"^sA/fEYg@5ӆ%F&KwX9jR'MVQ#2G-Si4@a/-crsVřKB7RI$a`]삂[,ß3QZdă3aJpjFƙQ\}8\˻_23)d7ΆDƪ+Z g"oT'$DsX.-:@Klc<`k$$[WTAg7*ŵ2Q{;or` y lW.,r2T~H|1
+5F20'POP$wTE rSG4l,[Z%(iybalBl*G|SVHqb`dc3?6DI\4d
+ ~-d4w&k7 CBq8tYy'4/'EGЎHHIBy$*ܒe*m%[+sBRMΓ#jBlՓ8.Lob}zVTbf kS@O^Ԝ*Vx)0LH(20$3 rWA*|WJ]#Qsr:|MƏ1x{&F#fи=Y`Fxs43H6];<:e8Qźe: ^p%p*5(eDFT8%U 5Vg' Ϡtol2p] E{Sق]?[0`CD/ i"8#:f
+1b^yNJ1w : i,9u8^Wn&Ib$
+5ָhvjv;PehMK3!= %7 
+5D>cD;w61֓t}6I HܻdbUXJY]'Z#$i^
+Jw)V-k]j\dN3-nV>n1>ZQY+Eopm/,>k>n`&Y<$qHJNfk8qbbx5/[pOPȍ x ]x3OwqeAvI%!/2H1?ӣL1c">P1 g׿tg Vin#ep_86ݳ4<n^}3-0E5L| JT.HMEڡm'S'a:蚯O(d͊$.5V4cE;TsI:mi [74a\9V5=dd3f폄fg[ܯ_6̕;oiWz}=b$wAz{2It~}eya+/s]LBgft~l~{d~{\;Ŏ6(df98Aa
+9'4Tn(f}ZVAH .4}lMeS6nP$V/'1tTm4ʦ:dXocOțg' 󃬪.XU|嵘+3hlΆYS
+B0~H6Jzey("'w
+/c\AQU;_"CF
+#*7 o{^+oC#D^Dԯg*BLgY^6H
+C(p @x#@1BmgR)?#[/ӷ^z9ZnhHg=d[Zjc r82(U{>Ȕclr_'nl9'F4֋͒+9F#7e52Yg9H^Ez O $_i/<{(yq[ȳMRB& F1IhD? ikR~12tEٶPw%TVr"YHܙg$'-1B5"_`Acх:Oح: . ň[cնh#$b96M.U8/sOd0%Αb]Y[V5bLͪ(I܋V5R\-01`3k\BR^&Nli" • ._1eZb'2!k: ĒvB:_QA ԌdqDkd,ZLnVKB2)dŵHjGC+& j92V]&M\z&p\\xf.Êvi^ȱ:F.RQ1ueؙDA0Db\M$u6dS-c&X+J#^5+rv$3IDiز+dYD<#]1gǛ\Lɸ@) ~5)3?F:le0]}@Fa؈<|)A L/tk$qسc|iUg)+LzU^b2
+q;=h< 2w+)8 \NIP7xjz6w+;ݶeG
+I 'rn
+eWi1eCkuOX yZM fM:Lue ^ӒOkby`zQoۑ亮z!y(/3OR[d`Cc@7{8y1H a0>DDVV,%G"vgFFΎ}]6adB톥XBlWU`cMp
+6"뮫[[9Q&D4H3N-hd6{QJ).gpd:4z`V`\3"rI^Wď*Sn(#4e*~U*r:ǭ;紥Ѵui0;-E2'YF0[J%SfV 190e۱yЌ4 R,1eIc+Ov A˳Squ5iGm1?/@DwKZRJhv
+_f U#
+XU]~NL(5ʥ![<K(L; %]z-j9D"C}WcKP[F3 jbM3k
+V# NtgM@G[z1 02S\va䛦C6JegK6ux‚3' [F'nZbKAMBj5i4o"N,z JC\ڔ VKkTW>ILr8[p+2X U-U5b쾙lu͏YEhIŌ^33m"8 mhKYS, y .j2eF^q7a"ʵ\
+34G3k>TꮩS`O.#16zb>/^;+dDЋ6kt+Qo"%}Ջge'hJ>AXV)sԇV8 BqPc4^WHCa>\cWڱU3uX^-`4)y QFR=FK+뼖7b-"/rh~qi bE4ɪk7eGF
+yQ'2~ل bvbư]ŬOa<W@تn 4
+^Oa@P'N"~qjTDwj؊3P8Xk%YҔA,zX3/2`kIlk"ݮhIJAbSߋe6HfMc@ߣY\bp8]q U?QuT "ybڋI@jhV}f:yZ2敞dl(lV?~g3Vr_i ”l!i׮o9$Kwn
+Y"^ڄ7kROVol e7(O݄~{7rw+os~U|M=EZE oU'o }{ywߒ׊c%\FJ*RAXd&{zx
+bp*#( ks^EYL{qMfsZW,K#+J~DWհR^/rڬBBjqLab{>
+JXW͈dȻh znC
+tXjJjN?mAQVWWc6KzO~Q?~џ~N]4%v T_ÿ
+S_?~}xU_}gSC]6m"jj"4Bs1kS6HH% $[5lT~s
+D٪Ѻ)$Eϥ0SWCNq9]͹)닲CDJv&s%jYqޠ6ğb;%KV>0.YOhf2oukb?zW߰lrwm#n嶾@L4]
+.{v/iQpV/c?= (
+yg<E<E<{E<Eܽ{I->\Xe3,hz4@&P$NSBCx
+nJ:c)bvP:ʏ9=.Cq?2VDZANU@T`HQ'EQqSͫec%Mdi#j 7tIq6a L-NtC/>Vz.|l]ٺͳu7-/>7CyTa1v:'
+<T:AscR)"Ss(9JD?3qv1ā^ߠȘ^N =a\$'a*ok\P略$WFB(4Tn.MMJ4JӱȅÃ8kCǾ>CREUuڜJzL fǃ9A3nNjJ3@ <5|bQT2NNI)ɷ]Mϯ;hMrrMr.D's2fu{@ا]8"MEH*fD /ե4s 9mؗGu(&Gc@rEr:ߞ-rR/+Kreb[A]֐ևx$nӎvgx04K 4rMY,4'D5؊3mM G9C#'Qvi0Lih(;G3^#99B<*xVO,/sKWBhk 7\^vM,”84Ԍf UV Yv>x`v`,W65 i9$ R{HARBFt~m0(3A
++))CQ殰"OiY#D%1rkQl;ktL_Wѣpg;fDlШI"bHIǕT<wo
+u
+YݩOYeN\wӆ3֖A%v͢q"x|&r]t'pv#HD cu@6f%=mW) $"1`v
+vx
+WV~a:H/4Kנ^eiս]V>`j݈8xz_B3Q,JnOLi]f 5ۅDM²0EtcrEMP-K{_)Nh"O\9͋~cCjKAm&VFHqShB33؆8R:pҞ6ˉ|Aav#Ӆ#uԆ0<rAݦj$=њj3z=!9nSa}%>qι.^ŒX/"lxDq7'AQF7),o}x3մ&ѯlåƅkӐw@ivw(9
+)_Y%' ܟ\[k|hPs 4:KVjp6(mb<1e;AfY1
+e p5/vy`nv{*w˜m`ZyM_e; ڟ\[[ʮVd^!zYM= 7;e <;a9`ŨdD XLEvbb.ERjC|O%*<u Yϸ2D&c&{ 04PgX-r{]JUv$;ҕ^;e9cOZXSBiNf ODA`Mni0c.hAL3cM+j2id` C)VL|s8A񘼋U<%a Nd`HEp<d&))jP η,du+Ïh/E:b rhϚ3bmw[$pGtIcy
+*>ïtbh|2$[⠐E8F Œ2 f IWAtH} "Ksuq1Q¾<:6K^m@e EA#}[Nqp V*V}*x_#==Pd9j:jx
+RQ_JS ~eHW FEtMBӐ1ZZ(֝ l,kPn/ ~1fE1U.grsɛ'Ö6QSǚ% 7^/IWW pcLmA(b p5n#u6zd
+=8A51 aV
+f\-"a%b 6 EX€Žb¼s9lnC{)8Q*0ZYIfᯰ>h6׫rGUӋ߃Y~c\J
+L` ,AY!/ƪT
+LQ
+GX]q-ղjCqɡK1NM!Ęæy(hjI8&Dذԕ(m ^ylTz1NIA *8  t#!xzX k'%NA˗4!sum4,Vbx`򊪍h_Unjb3czԗM:jcMƃ(ތdA?2d4F@ٵxC"Eӱ8ޕq6|{ZSl ے`,YYW&
+/tg&b"ʡgH A#2r$nO,s1n/䉻ƺ40)9ޙQl0,D#"S?S.O\Q{FFxyoDˊ!1!IݘGлR'2?lzxPXѹqr ,NJo2B٣q`:`(ʌam]XIaS
+(%$DPH/BICM4E>ft0Q[^E
+jVS@1j4)U윎ǻ祍F
+Y(rukj?ՍHEPT}@l`yq3Ft\kqo1Ι?d6KV3DQK@/Y 2~WgaP4Da>^qS!gwk-fWdVv֌|chZ
+؛b4]ʒ0-ozi]m JSL(8K .ٟrw ʯ MfTش+sc.Dme^2*lL{g]d?GU|EjnΣl(.;EňԋSXND1~O
+Nm.3 'ag~U;9 1RgټUm ' F?6I%i݊k!ru_t= ]o@qxw2 g+
+ ٲFk'[4
+-0񐐤 *y
+Y-29´b
+,pL<𓍗 hee$&ٯEZLu5\,i+a4?H2?2t"E:9jZAw(,6m]+˛?meek.o/n^sl_٘t垮l0!:_%/1sA8^#@!ȦFfI49i.aoվiU+imgt'zsF*痟$8?nӛnӛoӛgn<^:)3eJѴk씢V}^,$Y%kPdSrH Η)n7j4AH`)Q3hN'0/&iJ>ÂKH6.t˟8<Oqy|,+|fBI_C_F2iE7wHH!,M&yZf5v{O1N@qV;!q> zd1mI$%<7BpawkHb~fR*-7i[ɣ)OEk
+ND BYxur粺zigGZkVzH9Z$gnq]Ccllλ`;fKCaH.tfN
+;_^Q3CHX,tfҥ6dt]fׅ\g@<y߱`
+>  b<حe31Kr3yZqK2s
+5
+RB5Q\9JRɢqr%d,煼gPl7fw1KG(8opᘩC<fx QVBtٶ䨢pt/*INGPJ6c}5:@)fc$NGawi_|8k"6L!hX5e!RC3K}9Lk9[6fMmeWUgѩɚXg\LQ`fo8^W"&g?͏Lέhyy5fd1=p^[E#֟YuƵf|F1>zt{aGN <H([xP]X/.Lnٚ}39Mp^?Ot-n9ꋅِ+W9Zev+9ywi: ~b,BmIxt#c7fu[5ͩ`}yfV3=DjNf+Ti8d/=,HGVc(BJ
+
+0000000016 00000 n
+0000045654 00000 n
+0000000004 00000 f
+0000000006 00000 f
+0000054890 00000 n
+0000000007 00000 f
+0000000008 00000 f
+0000000009 00000 f
+0000000010 00000 f
+0000000011 00000 f
+0000000012 00000 f
+0000000013 00000 f
+0000000014 00000 f
+0000000018 00000 f
+0000045705 00000 n
+0000054715 00000 n
+0000054746 00000 n
+0000000019 00000 f
+0000000020 00000 f
+0000000021 00000 f
+0000000022 00000 f
+0000000023 00000 f
+0000000024 00000 f
+0000000025 00000 f
+0000000026 00000 f
+0000000030 00000 f
+0000045774 00000 n
+0000054599 00000 n
+0000054630 00000 n
+0000000031 00000 f
+0000000032 00000 f
+0000000033 00000 f
+0000000034 00000 f
+0000000035 00000 f
+0000000036 00000 f
+0000000040 00000 f
+0000045845 00000 n
+0000054483 00000 n
+0000054514 00000 n
+0000000041 00000 f
+0000000042 00000 f
+0000000043 00000 f
+0000000044 00000 f
+0000000045 00000 f
+0000000046 00000 f
+0000000047 00000 f
+0000000048 00000 f
+0000000049 00000 f
+0000000050 00000 f
+0000000051 00000 f
+0000000052 00000 f
+0000000053 00000 f
+0000000054 00000 f
+0000000055 00000 f
+0000000056 00000 f
+0000000057 00000 f
+0000000058 00000 f
+0000000059 00000 f
+0000000060 00000 f
+0000000061 00000 f
+0000000062 00000 f
+0000000063 00000 f
+0000000064 00000 f
+0000000068 00000 f
+0000045915 00000 n
+0000054367 00000 n
+0000054398 00000 n
+0000000069 00000 f
+0000000070 00000 f
+0000000071 00000 f
+0000000072 00000 f
+0000000073 00000 f
+0000000074 00000 f
+0000000075 00000 f
+0000000076 00000 f
+0000000077 00000 f
+0000000081 00000 f
+0000045984 00000 n
+0000054251 00000 n
+0000054282 00000 n
+0000000082 00000 f
+0000000083 00000 f
+0000000084 00000 f
+0000000085 00000 f
+0000000086 00000 f
+0000000087 00000 f
+0000000088 00000 f
+0000000089 00000 f
+0000000093 00000 f
+0000046055 00000 n
+0000054135 00000 n
+0000054166 00000 n
+0000000094 00000 f
+0000000095 00000 f
+0000000096 00000 f
+0000000097 00000 f
+0000000098 00000 f
+0000000099 00000 f
+0000000100 00000 f
+0000000101 00000 f
+0000000102 00000 f
+0000000103 00000 f
+0000000104 00000 f
+0000000105 00000 f
+0000000106 00000 f
+0000000107 00000 f
+0000000108 00000 f
+0000000109 00000 f
+0000000110 00000 f
+0000000111 00000 f
+0000000112 00000 f
+0000000113 00000 f
+0000000114 00000 f
+0000000115 00000 f
+0000000119 00000 f
+0000046125 00000 n
+0000054017 00000 n
+0000054049 00000 n
+0000000120 00000 f
+0000000121 00000 f
+0000000122 00000 f
+0000000123 00000 f
+0000000124 00000 f
+0000000125 00000 f
+0000000126 00000 f
+0000000127 00000 f
+0000000128 00000 f
+0000000132 00000 f
+0000046197 00000 n
+0000053899 00000 n
+0000053931 00000 n
+0000000133 00000 f
+0000000134 00000 f
+0000000135 00000 f
+0000000136 00000 f
+0000000137 00000 f
+0000000138 00000 f
+0000000139 00000 f
+0000000140 00000 f
+0000000144 00000 f
+0000046271 00000 n
+0000053781 00000 n
+0000053813 00000 n
+0000000145 00000 f
+0000000146 00000 f
+0000000147 00000 f
+0000000148 00000 f
+0000000149 00000 f
+0000000150 00000 f
+0000000151 00000 f
+0000000152 00000 f
+0000000153 00000 f
+0000000154 00000 f
+0000000155 00000 f
+0000000156 00000 f
+0000000157 00000 f
+0000000158 00000 f
+0000000159 00000 f
+0000000160 00000 f
+0000000161 00000 f
+0000000162 00000 f
+0000000163 00000 f
+0000000164 00000 f
+0000000165 00000 f
+0000000166 00000 f
+0000000170 00000 f
+0000046344 00000 n
+0000053663 00000 n
+0000053695 00000 n
+0000000171 00000 f
+0000000172 00000 f
+0000000173 00000 f
+0000000174 00000 f
+0000000175 00000 f
+0000000176 00000 f
+0000000177 00000 f
+0000000178 00000 f
+0000000179 00000 f
+0000000183 00000 f
+0000046416 00000 n
+0000053545 00000 n
+0000053577 00000 n
+0000000184 00000 f
+0000000185 00000 f
+0000000186 00000 f
+0000000187 00000 f
+0000000188 00000 f
+0000000189 00000 f
+0000000190 00000 f
+0000000191 00000 f
+0000000195 00000 f
+0000046490 00000 n
+0000053427 00000 n
+0000053459 00000 n
+0000000196 00000 f
+0000000197 00000 f
+0000000198 00000 f
+0000000199 00000 f
+0000000200 00000 f
+0000000201 00000 f
+0000000202 00000 f
+0000000203 00000 f
+0000000204 00000 f
+0000000205 00000 f
+0000000206 00000 f
+0000000207 00000 f
+0000000208 00000 f
+0000000209 00000 f
+0000000210 00000 f
+0000000211 00000 f
+0000000212 00000 f
+0000000213 00000 f
+0000000214 00000 f
+0000000215 00000 f
+0000000216 00000 f
+0000000217 00000 f
+0000000221 00000 f
+0000046563 00000 n
+0000053309 00000 n
+0000053341 00000 n
+0000000222 00000 f
+0000000223 00000 f
+0000000224 00000 f
+0000000225 00000 f
+0000000226 00000 f
+0000000227 00000 f
+0000000228 00000 f
+0000000229 00000 f
+0000000230 00000 f
+0000000231 00000 f
+0000000232 00000 f
+0000000233 00000 f
+0000000234 00000 f
+0000000235 00000 f
+0000000236 00000 f
+0000000240 00000 f
+0000046635 00000 n
+0000053191 00000 n
+0000053223 00000 n
+0000000241 00000 f
+0000000242 00000 f
+0000000243 00000 f
+0000000244 00000 f
+0000000245 00000 f
+0000000246 00000 f
+0000000247 00000 f
+0000000248 00000 f
+0000000249 00000 f
+0000000250 00000 f
+0000000251 00000 f
+0000000252 00000 f
+0000000253 00000 f
+0000000254 00000 f
+0000000258 00000 f
+0000046709 00000 n
+0000053073 00000 n
+0000053105 00000 n
+0000000259 00000 f
+0000000260 00000 f
+0000000261 00000 f
+0000000262 00000 f
+0000000263 00000 f
+0000000264 00000 f
+0000000265 00000 f
+0000000266 00000 f
+0000000267 00000 f
+0000000268 00000 f
+0000000269 00000 f
+0000000270 00000 f
+0000000271 00000 f
+0000000272 00000 f
+0000000273 00000 f
+0000000274 00000 f
+0000000275 00000 f
+0000000276 00000 f
+0000000277 00000 f
+0000000278 00000 f
+0000000279 00000 f
+0000000280 00000 f
+0000000281 00000 f
+0000000282 00000 f
+0000000283 00000 f
+0000000284 00000 f
+0000000285 00000 f
+0000000286 00000 f
+0000000290 00000 f
+0000046782 00000 n
+0000052955 00000 n
+0000052987 00000 n
+0000000291 00000 f
+0000000292 00000 f
+0000000293 00000 f
+0000000294 00000 f
+0000000295 00000 f
+0000000296 00000 f
+0000000297 00000 f
+0000000298 00000 f
+0000000299 00000 f
+0000000300 00000 f
+0000000301 00000 f
+0000000302 00000 f
+0000000303 00000 f
+0000000304 00000 f
+0000000305 00000 f
+0000000309 00000 f
+0000046854 00000 n
+0000052837 00000 n
+0000052869 00000 n
+0000000310 00000 f
+0000000311 00000 f
+0000000312 00000 f
+0000000313 00000 f
+0000000314 00000 f
+0000000315 00000 f
+0000000316 00000 f
+0000000317 00000 f
+0000000318 00000 f
+0000000319 00000 f
+0000000320 00000 f
+0000000321 00000 f
+0000000322 00000 f
+0000000323 00000 f
+0000000327 00000 f
+0000046928 00000 n
+0000052719 00000 n
+0000052751 00000 n
+0000000328 00000 f
+0000000329 00000 f
+0000000330 00000 f
+0000000331 00000 f
+0000000332 00000 f
+0000000333 00000 f
+0000000334 00000 f
+0000000335 00000 f
+0000000336 00000 f
+0000000337 00000 f
+0000000338 00000 f
+0000000339 00000 f
+0000000340 00000 f
+0000000341 00000 f
+0000000342 00000 f
+0000000343 00000 f
+0000000344 00000 f
+0000000345 00000 f
+0000000346 00000 f
+0000000347 00000 f
+0000000348 00000 f
+0000000349 00000 f
+0000000350 00000 f
+0000000351 00000 f
+0000000352 00000 f
+0000000353 00000 f
+0000000354 00000 f
+0000000355 00000 f
+0000000359 00000 f
+0000047001 00000 n
+0000052601 00000 n
+0000052633 00000 n
+0000000360 00000 f
+0000000361 00000 f
+0000000362 00000 f
+0000000363 00000 f
+0000000364 00000 f
+0000000365 00000 f
+0000000366 00000 f
+0000000367 00000 f
+0000000368 00000 f
+0000000369 00000 f
+0000000370 00000 f
+0000000371 00000 f
+0000000372 00000 f
+0000000373 00000 f
+0000000374 00000 f
+0000000378 00000 f
+0000047073 00000 n
+0000052483 00000 n
+0000052515 00000 n
+0000000379 00000 f
+0000000380 00000 f
+0000000381 00000 f
+0000000382 00000 f
+0000000383 00000 f
+0000000384 00000 f
+0000000385 00000 f
+0000000386 00000 f
+0000000387 00000 f
+0000000388 00000 f
+0000000389 00000 f
+0000000390 00000 f
+0000000391 00000 f
+0000000392 00000 f
+0000000396 00000 f
+0000047147 00000 n
+0000052365 00000 n
+0000052397 00000 n
+0000000397 00000 f
+0000000398 00000 f
+0000000399 00000 f
+0000000400 00000 f
+0000000401 00000 f
+0000000402 00000 f
+0000000403 00000 f
+0000000404 00000 f
+0000000405 00000 f
+0000000406 00000 f
+0000000407 00000 f
+0000000408 00000 f
+0000000409 00000 f
+0000000410 00000 f
+0000000411 00000 f
+0000000412 00000 f
+0000000413 00000 f
+0000000414 00000 f
+0000000415 00000 f
+0000000416 00000 f
+0000000417 00000 f
+0000000418 00000 f
+0000000419 00000 f
+0000000420 00000 f
+0000000421 00000 f
+0000000422 00000 f
+0000000423 00000 f
+0000000424 00000 f
+0000000428 00000 f
+0000047220 00000 n
+0000052247 00000 n
+0000052279 00000 n
+0000000429 00000 f
+0000000430 00000 f
+0000000431 00000 f
+0000000432 00000 f
+0000000433 00000 f
+0000000434 00000 f
+0000000435 00000 f
+0000000436 00000 f
+0000000437 00000 f
+0000000438 00000 f
+0000000439 00000 f
+0000000440 00000 f
+0000000441 00000 f
+0000000442 00000 f
+0000000443 00000 f
+0000000447 00000 f
+0000047292 00000 n
+0000052129 00000 n
+0000052161 00000 n
+0000000448 00000 f
+0000000449 00000 f
+0000000450 00000 f
+0000000451 00000 f
+0000000452 00000 f
+0000000453 00000 f
+0000000454 00000 f
+0000000455 00000 f
+0000000456 00000 f
+0000000457 00000 f
+0000000458 00000 f
+0000000459 00000 f
+0000000460 00000 f
+0000000461 00000 f
+0000000465 00000 f
+0000047364 00000 n
+0000052011 00000 n
+0000052043 00000 n
+0000000466 00000 f
+0000000467 00000 f
+0000000468 00000 f
+0000000469 00000 f
+0000000470 00000 f
+0000000471 00000 f
+0000000472 00000 f
+0000000473 00000 f
+0000000474 00000 f
+0000000475 00000 f
+0000000476 00000 f
+0000000477 00000 f
+0000000478 00000 f
+0000000479 00000 f
+0000000483 00000 f
+0000047438 00000 n
+0000051893 00000 n
+0000051925 00000 n
+0000000484 00000 f
+0000000485 00000 f
+0000000486 00000 f
+0000000487 00000 f
+0000000488 00000 f
+0000000489 00000 f
+0000000490 00000 f
+0000000491 00000 f
+0000000492 00000 f
+0000000493 00000 f
+0000000494 00000 f
+0000000495 00000 f
+0000000496 00000 f
+0000000497 00000 f
+0000000498 00000 f
+0000000499 00000 f
+0000000500 00000 f
+0000000501 00000 f
+0000000502 00000 f
+0000000503 00000 f
+0000000504 00000 f
+0000000505 00000 f
+0000000506 00000 f
+0000000507 00000 f
+0000000508 00000 f
+0000000509 00000 f
+0000000510 00000 f
+0000000511 00000 f
+0000000512 00000 f
+0000000513 00000 f
+0000000514 00000 f
+0000000518 00000 f
+0000047511 00000 n
+0000051775 00000 n
+0000051807 00000 n
+0000000519 00000 f
+0000000520 00000 f
+0000000521 00000 f
+0000000522 00000 f
+0000000523 00000 f
+0000000524 00000 f
+0000000525 00000 f
+0000000526 00000 f
+0000000527 00000 f
+0000000528 00000 f
+0000000529 00000 f
+0000000530 00000 f
+0000000531 00000 f
+0000000532 00000 f
+0000000533 00000 f
+0000000537 00000 f
+0000047583 00000 n
+0000051657 00000 n
+0000051689 00000 n
+0000000538 00000 f
+0000000539 00000 f
+0000000540 00000 f
+0000000541 00000 f
+0000000542 00000 f
+0000000543 00000 f
+0000000544 00000 f
+0000000545 00000 f
+0000000546 00000 f
+0000000547 00000 f
+0000000548 00000 f
+0000000549 00000 f
+0000000550 00000 f
+0000000551 00000 f
+0000000555 00000 f
+0000047655 00000 n
+0000051539 00000 n
+0000051571 00000 n
+0000000556 00000 f
+0000000557 00000 f
+0000000558 00000 f
+0000000559 00000 f
+0000000560 00000 f
+0000000561 00000 f
+0000000562 00000 f
+0000000563 00000 f
+0000000564 00000 f
+0000000565 00000 f
+0000000566 00000 f
+0000000567 00000 f
+0000000568 00000 f
+0000000569 00000 f
+0000000573 00000 f
+0000047729 00000 n
+0000051421 00000 n
+0000051453 00000 n
+0000000574 00000 f
+0000000575 00000 f
+0000000576 00000 f
+0000000577 00000 f
+0000000578 00000 f
+0000000579 00000 f
+0000000580 00000 f
+0000000581 00000 f
+0000000582 00000 f
+0000000583 00000 f
+0000000584 00000 f
+0000000585 00000 f
+0000000586 00000 f
+0000000587 00000 f
+0000000588 00000 f
+0000000589 00000 f
+0000000590 00000 f
+0000000591 00000 f
+0000000592 00000 f
+0000000593 00000 f
+0000000594 00000 f
+0000000595 00000 f
+0000000596 00000 f
+0000000597 00000 f
+0000000598 00000 f
+0000000599 00000 f
+0000000600 00000 f
+0000000601 00000 f
+0000000602 00000 f
+0000000603 00000 f
+0000000604 00000 f
+0000000608 00000 f
+0000047802 00000 n
+0000051303 00000 n
+0000051335 00000 n
+0000000609 00000 f
+0000000610 00000 f
+0000000611 00000 f
+0000000612 00000 f
+0000000613 00000 f
+0000000614 00000 f
+0000000615 00000 f
+0000000616 00000 f
+0000000617 00000 f
+0000000618 00000 f
+0000000619 00000 f
+0000000620 00000 f
+0000000621 00000 f
+0000000622 00000 f
+0000000623 00000 f
+0000000627 00000 f
+0000047874 00000 n
+0000051185 00000 n
+0000051217 00000 n
+0000000628 00000 f
+0000000629 00000 f
+0000000630 00000 f
+0000000631 00000 f
+0000000632 00000 f
+0000000633 00000 f
+0000000634 00000 f
+0000000635 00000 f
+0000000636 00000 f
+0000000637 00000 f
+0000000638 00000 f
+0000000639 00000 f
+0000000640 00000 f
+0000000641 00000 f
+0000000645 00000 f
+0000047946 00000 n
+0000051067 00000 n
+0000051099 00000 n
+0000000646 00000 f
+0000000647 00000 f
+0000000648 00000 f
+0000000649 00000 f
+0000000650 00000 f
+0000000651 00000 f
+0000000652 00000 f
+0000000653 00000 f
+0000000654 00000 f
+0000000655 00000 f
+0000000656 00000 f
+0000000657 00000 f
+0000000658 00000 f
+0000000659 00000 f
+0000000663 00000 f
+0000048020 00000 n
+0000050949 00000 n
+0000050981 00000 n
+0000000664 00000 f
+0000000665 00000 f
+0000000666 00000 f
+0000000667 00000 f
+0000000668 00000 f
+0000000669 00000 f
+0000000670 00000 f
+0000000671 00000 f
+0000000672 00000 f
+0000000673 00000 f
+0000000674 00000 f
+0000000675 00000 f
+0000000676 00000 f
+0000000677 00000 f
+0000000678 00000 f
+0000000679 00000 f
+0000000680 00000 f
+0000000681 00000 f
+0000000682 00000 f
+0000000683 00000 f
+0000000684 00000 f
+0000000685 00000 f
+0000000686 00000 f
+0000000687 00000 f
+0000000688 00000 f
+0000000689 00000 f
+0000000690 00000 f
+0000000691 00000 f
+0000000692 00000 f
+0000000693 00000 f
+0000000694 00000 f
+0000000698 00000 f
+0000048093 00000 n
+0000050831 00000 n
+0000050863 00000 n
+0000000702 00000 f
+0000048164 00000 n
+0000050713 00000 n
+0000050745 00000 n
+0000000703 00000 f
+0000000704 00000 f
+0000000705 00000 f
+0000000706 00000 f
+0000000707 00000 f
+0000000708 00000 f
+0000000709 00000 f
+0000000710 00000 f
+0000000711 00000 f
+0000000712 00000 f
+0000000713 00000 f
+0000000714 00000 f
+0000000715 00000 f
+0000000716 00000 f
+0000000717 00000 f
+0000000721 00000 f
+0000048236 00000 n
+0000050595 00000 n
+0000050627 00000 n
+0000000722 00000 f
+0000000723 00000 f
+0000000724 00000 f
+0000000725 00000 f
+0000000726 00000 f
+0000000727 00000 f
+0000000728 00000 f
+0000000729 00000 f
+0000000730 00000 f
+0000000731 00000 f
+0000000732 00000 f
+0000000733 00000 f
+0000000734 00000 f
+0000000738 00000 f
+0000048308 00000 n
+0000050477 00000 n
+0000050509 00000 n
+0000000739 00000 f
+0000000740 00000 f
+0000000741 00000 f
+0000000742 00000 f
+0000000743 00000 f
+0000000744 00000 f
+0000000745 00000 f
+0000000746 00000 f
+0000000747 00000 f
+0000000748 00000 f
+0000000749 00000 f
+0000000750 00000 f
+0000000751 00000 f
+0000000752 00000 f
+0000000756 00000 f
+0000048382 00000 n
+0000050359 00000 n
+0000050391 00000 n
+0000000757 00000 f
+0000000758 00000 f
+0000000759 00000 f
+0000000760 00000 f
+0000000761 00000 f
+0000000762 00000 f
+0000000763 00000 f
+0000000764 00000 f
+0000000765 00000 f
+0000000766 00000 f
+0000000767 00000 f
+0000000768 00000 f
+0000000769 00000 f
+0000000770 00000 f
+0000000771 00000 f
+0000000772 00000 f
+0000000773 00000 f
+0000000774 00000 f
+0000000775 00000 f
+0000000776 00000 f
+0000000777 00000 f
+0000000778 00000 f
+0000000779 00000 f
+0000000780 00000 f
+0000000781 00000 f
+0000000782 00000 f
+0000000783 00000 f
+0000000784 00000 f
+0000000788 00001 f
+0000048455 00000 n
+0000050241 00000 n
+0000050273 00000 n
+0000000792 00000 f
+0000048526 00000 n
+0000050123 00000 n
+0000050155 00000 n
+0000000793 00000 f
+0000000794 00000 f
+0000000795 00000 f
+0000000796 00000 f
+0000000797 00000 f
+0000000798 00000 f
+0000000799 00000 f
+0000000800 00000 f
+0000000801 00000 f
+0000000802 00000 f
+0000000803 00000 f
+0000000804 00000 f
+0000000805 00000 f
+0000000806 00000 f
+0000000807 00000 f
+0000000811 00000 f
+0000048598 00000 n
+0000050005 00000 n
+0000050037 00000 n
+0000000812 00000 f
+0000000813 00000 f
+0000000814 00000 f
+0000000815 00000 f
+0000000816 00000 f
+0000000817 00000 f
+0000000818 00000 f
+0000000819 00000 f
+0000000820 00000 f
+0000000821 00000 f
+0000000822 00000 f
+0000000823 00000 f
+0000000824 00000 f
+0000000828 00000 f
+0000048670 00000 n
+0000049887 00000 n
+0000049919 00000 n
+0000000829 00000 f
+0000000830 00000 f
+0000000831 00000 f
+0000000832 00000 f
+0000000833 00000 f
+0000000834 00000 f
+0000000835 00000 f
+0000000836 00000 f
+0000000837 00000 f
+0000000838 00000 f
+0000000839 00000 f
+0000000840 00000 f
+0000000841 00000 f
+0000000842 00000 f
+0000000846 00000 f
+0000048744 00000 n
+0000049769 00000 n
+0000049801 00000 n
+0000000847 00000 f
+0000000848 00000 f
+0000000849 00000 f
+0000000850 00000 f
+0000000851 00000 f
+0000000852 00000 f
+0000000853 00000 f
+0000000854 00000 f
+0000000855 00000 f
+0000000856 00000 f
+0000000857 00000 f
+0000000858 00000 f
+0000000859 00000 f
+0000000860 00000 f
+0000000861 00000 f
+0000000862 00000 f
+0000000863 00000 f
+0000000864 00001 f
+0000000865 00000 f
+0000000866 00000 f
+0000000867 00000 f
+0000000868 00000 f
+0000000876 00000 f
+0000173720 00000 n
+0000173796 00000 n
+0000174020 00000 n
+0000175035 00000 n
+0000182519 00000 n
+0000248108 00000 n
+0000313697 00000 n
+0000000881 00001 f
+0000054831 00000 n
+0000048817 00000 n
+0000049651 00000 n
+0000049683 00000 n
+0000000894 00001 f
+0000048888 00000 n
+0000049533 00000 n
+0000049565 00000 n
+0000057673 00000 n
+0000158692 00000 n
+0000159417 00000 n
+0000173093 00000 n
+0000059698 00000 n
+0000059735 00000 n
+0000159480 00000 n
+0000158755 00000 n
+0000062384 00000 n
+0000000904 00001 f
+0000146567 00000 n
+0000147323 00000 n
+0000158629 00000 n
+0000147386 00000 n
+0000146630 00000 n
+0000062878 00000 n
+0000048960 00000 n
+0000049415 00000 n
+0000049447 00000 n
+0000000911 00001 f
+0000131986 00000 n
+0000132736 00000 n
+0000146504 00000 n
+0000132799 00000 n
+0000132049 00000 n
+0000063362 00000 n
+0000000921 00001 f
+0000119816 00000 n
+0000120569 00000 n
+0000131923 00000 n
+0000120632 00000 n
+0000119879 00000 n
+0000063860 00000 n
+0000049032 00000 n
+0000049297 00000 n
+0000049329 00000 n
+0000000928 00001 f
+0000105212 00000 n
+0000105960 00000 n
+0000119753 00000 n
+0000106023 00000 n
+0000105275 00000 n
+0000064347 00000 n
+0000000929 00001 f
+0000000939 00001 f
+0000093039 00000 n
+0000093791 00000 n
+0000105149 00000 n
+0000093854 00000 n
+0000093102 00000 n
+0000064848 00000 n
+0000049106 00000 n
+0000049179 00000 n
+0000049211 00000 n
+0000000946 00001 f
+0000078414 00000 n
+0000079171 00000 n
+0000092976 00000 n
+0000079234 00000 n
+0000078477 00000 n
+0000065328 00000 n
+0000000000 00001 f
+0000066308 00000 n
+0000067065 00000 n
+0000078351 00000 n
+0000067128 00000 n
+0000066371 00000 n
+0000065829 00000 n
+0000057787 00000 n
+0000058077 00000 n
+0000055498 00000 n
+0000361937 00000 n
+0000058339 00000 n
+0000173156 00000 n
+0000173206 00000 n
+0000057517 00000 n
+0000000897 00000 n
+trailer <</Size 962/Root 1 0 R/Info 956 0 R/ID[<DFAD564605F549E3ABF1FC747EBA5A34><A151DA051B174F59A99D14D40A0E4378>]>> startxref 362074 %%EOF \ No newline at end of file
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/versions.txt b/src/compiler/scala/tools/nsc/doc/html/resource/lib/versions.txt
new file mode 100644
index 0000000000..a5056fc9dd
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/versions.txt
@@ -0,0 +1 @@
+jquery=1.3.2
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/template.html b/src/compiler/scala/tools/nsc/doc/html/resource/template.html
new file mode 100644
index 0000000000..66c3fbc9ce
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/template.html
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <title>Scaladoc</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <script type="text/javascript" src="lib/jquery.js"></script>
+ <style type="text/css">
+ @import url("lib/template.css") screen;
+ </style>
+ <script type="text/javascript" src="lib/template.js"></script>
+ </head>
+ <body class="type">
+ <p id="owner">scala.collection.mutable</p>
+ <div id="definition">
+ <img src="lib/class_big.png"/>
+ <h1>ImmutableMapAdaptor</h1>
+ </div>
+ <div class="signature">
+ <div class="kind">class</div>
+ <div class="symbol">
+ <span class="name">ImmutableMapAdaptor</span>
+ <span class="tparams">[<span name="T">T ⊲ Int</span>,<span name="Y">Y</span>]</span>
+ <span class="result">extends<span>A[X]</span> with <span>C[Y]</span> with <span>B</span></span>
+ </div>
+ </div>
+ <div id="comment">
+ <p>This class can be used as an adaptor to create mutable maps from immutable map implementations. Only method empty has to be redefined if the immutable map on which this mutable map is originally based is not empty. empty is supposed to return the representation of an empty map.</p>
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ <p>The canonical builder for collections that are addable, i.e. that support an efficient + method which adds an element to the collection. Collections are built from their empty element using this + method.</p>
+ </div>
+ <div id="template">
+ <div id="mbrsel">
+ <div id="ancestors">
+ <h3>Inherits</h3>
+ <ol>
+ <li class="in" name="scala.ImmutableMapAdaptor">ImmutableMapAdaptor</li>
+ <li class="in" name="toto.FlawedImpl">FlawedImpl</li>
+ <li class="in" name="Map">Map</li>
+ <li class="in" name="ImmutableThingy">ImmutableThingy</li>
+ <li class="in" name="scala.AnyRef">AnyRef</li>
+ <li class="in" name="scala.Any">Any</li></ol>
+ </div>
+ <div id="implicits">
+ <h3>Implicitly</h3>
+ <ol><li class="out" name="RichAdaptor">RichAdaptor</li><li class="in" name="RaptureFallback">RaptureFallback</li></ol>
+ </div>
+ </div>
+ <div id="values" class="members">
+ <h3>Value Members</h3>
+ <ol>
+ <li name="toto.FlawedImpl#transform">
+ <div class="signature">
+ <div class="kind">def</div>
+ <div class="symbol">
+ <span class="name">transform</span>
+ <span class="tparams">[<span name="T">T</span>,<span name="U">U ⊲ Int</span>]</span>
+ <span class="params">(<span name="f">f: (A, B) => B</span>,<span name="b">b: Double</span>)</span>
+ <span class="result">:<span>ImmutableMapAdaptor[A, B]</span></span>
+ </div>
+ </div>
+ <ol class="paramcmts">
+ <li class="tparam" name="T">
+ <p>T an empty map.</p>
+ </li>
+ <li class="tparam" name="U">
+ <p>U can be used as an adaptor to create mutable maps.</p>
+ </li>
+ <li class="param" name="f">
+ <p>f can be used as an adaptor to create mutable maps from immutable map implementations. Only method empty has to be redefined.</p>
+ </li>
+ <li class="param" name="b">
+ <p>b the immutable map on which this mutable map is originally based is not empty. empty is supposed to return the representation of an empty map.</p>
+ </li>
+ </ol>
+ <ol class="attributes"><li>override</li><li>protected</li><li>@inline</li></ol>
+ <div class="comment">
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ <p>The canonical builder for collections that are addable, i.e. that support an efficient + method which adds an element to the collection. Collections are built from their empty element using this + method.</p>
+ </div>
+ </li>
+ <li name="Map#curry">
+ <div class="signature">
+ <div class="kind">def</div>
+ <div class="symbol">
+ <span class="name">curry</span>
+ <span class="params">(<span name="f">f: (A, B) => B</span>,<span name="b">b: Double</span>)</span><span class="params">(<span name="g">g: Int => B</span>,<span name="c">c: Double</span>)</span>
+ <span class="result">:<span>ImmutableMapAdaptor[A, B]</span></span>
+ </div>
+ </div>
+ </li>
+ <li name="randomize">
+ <div class="signature">
+ <div class="kind">val</div>
+ <div class="symbol">
+ <span class="name">randomize</span>
+ <span class="result">:<span>ImmutableMapAdaptor[A, B]</span></span>
+ </div>
+ </div>
+ <div class="comment">
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ <p>The canonical builder for collections that are addable, i.e. that support an efficient + method which adds an element to the collection. Collections are built from their empty element using this + method.</p>
+ </div>
+ </li>
+ <li>
+ <div class="signature">
+ <div class="kind">object</div>
+ <div class="symbol">
+ <span class="name">babar</span>
+ </div>
+ </div>
+ </li>
+ <li>
+ <div class="signature">
+ <div class="kind">package</div>
+ <div class="symbol">
+ <span class="name">fantomette</span>
+ </div>
+ </div>
+ <div class="comment">
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ <p>The canonical builder for collections that are addable, i.e. that support an efficient + method which adds an element to the collection. Collections are built from their empty element using this + method.</p>
+ </div>
+ </li>
+ </ol>
+ </div>
+ <div id="types" class="members">
+ <h3>Type Members</h3>
+ <ol>
+ <li>
+ <div class="signature">
+ <div class="kind">type</div>
+ <div class="symbol">
+ <span class="name">T</span>
+ <span class="tparams">[<span name="T">T</span>,<span name="U">U ⊲ Int</span>]</span>
+ </div>
+ </div>
+ <div class="comment">
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ </div>
+ </li>
+ <li>
+ <a class="signature" href="RandomAccessWaste">
+ <div class="kind">class</div>
+ <div class="symbol">
+ <span class="name">RandomAccessWaste</span>
+ <span class="tparams">[<span name="T">T</span>,<span name="U">U ⊲ Int</span>]</span>
+ </div>
+ </a>
+ <div class="comment">
+ <p>Some inner class</p>
+ </div>
+ </li>
+ <li>
+ <div class="signature">
+ <div class="kind">[]</div>
+ <div class="symbol">
+ <span class="name">Y</span>
+ <span class="result">⊲<span>Int</span>⊳<span>Nothing</span></span>
+ </div>
+ </div>
+ </li>
+ <li>
+ <div class="signature">
+ <div class="kind">[]</div>
+ <div class="symbol">
+ <span class="name">X</span>
+ </div>
+ </div>
+ <div class="comment">
+ <p>Some type parameter</p>
+ </div>
+ </li>
+ <li>
+ <div class="signature">
+ <div class="kind">[]</div>
+ <div class="symbol">
+ <span class="name">Y</span>
+ <span class="result">⊲<span>Int</span>⊳<span>Nothing</span></span>
+ </div>
+ </div>
+ </li>
+ <li>
+ <div class="signature">
+ <div class="kind">type</div>
+ <div class="symbol">
+ <span class="name">U</span>
+ <span class="result">=<span>ImmutableMapAdaptor[A, B]</span></span>
+ </div>
+ </div>
+ <div class="comment">
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ </div>
+ </li>
+ <li>
+ <div class="signature">
+ <div class="kind">type</div>
+ <div class="symbol">
+ <span class="name">V</span>
+ <span class="result">⊲<span>Int</span>⊳<span>Boolean</span></span>
+ </div>
+ </div>
+ <div class="comment">
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ </div>
+ </li>
+ </ol>
+ </div>
+ <div id="constructors" class="members">
+ <h3>Constructors</h3>
+ <ol>
+ <li>
+ <div class="signature">
+ <div class="kind">new</div>
+ <div class="symbol">
+ <span class="name">ImmutableMapAdaptor</span>
+ <span class="tparams">[<span name="T">T</span>,<span name="U">U ⊲ Int</span>]</span>
+ <span class="params">(<span name="f">f: (A, B) => B</span>,<span name="b">b: Double</span>)</span>
+ </div>
+ </div>
+ <div class="comment">
+ <p>A subtrait of collection.IndexedSeq which represents sequences that can be mutated.</p>
+ </div>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/compiler/scala/tools/nsc/doc/model/Entity.scala b/src/compiler/scala/tools/nsc/doc/model/Entity.scala
new file mode 100644
index 0000000000..6314af39be
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/model/Entity.scala
@@ -0,0 +1,141 @@
+/* NSC -- new Scala compiler
+ * Copyright 2007-2009 LAMP/EPFL
+ * @author Manohar Jonnalagedda
+ */
+
+package scala.tools.nsc
+package doc
+package model
+
+import scala.collection._
+import comment._
+
+/** Some entity of the Scaladoc model. */
+trait Entity {
+ def name : String
+ def inTemplate: TemplateEntity
+ def toRoot: List[Entity]
+ def qualifiedName: String
+ def comment: Option[Comment]
+ override def toString = qualifiedName
+}
+
+
+/** A class, trait, object or package. A package is represented as an instance of the `Package` subclass. A class,
+ * trait, object or package may be directly an instance of `WeakTemplateEntity` if it is not ''documentable'' (that
+ * is, if there is no documentation page for it in the current site), otherwise, it will be represented as an instance
+ * of the `TemplateEntity` subclass. */
+trait TemplateEntity extends Entity {
+ def isPackage: Boolean
+ def isRootPackage: Boolean
+ def isTrait: Boolean
+ def isClass: Boolean
+ def isObject: Boolean
+}
+trait NoDocTemplate extends TemplateEntity
+
+/** A member of a class, trait, object or package. */
+trait MemberEntity extends Entity {
+ def inTemplate: DocTemplateEntity
+ def toRoot: List[DocTemplateEntity]
+ def inDefinitionTemplate: TemplateEntity
+ def definitionName: String
+ def visibility: Option[Paragraph]
+ def flags: List[Paragraph]
+ def inheritedFrom: List[TemplateEntity]
+ def isDeprecated: Boolean
+ def resultType: TypeEntity
+ def isDef: Boolean
+ def isVal: Boolean
+ def isVar: Boolean
+ def isConstructor: Boolean
+ def isAliasType: Boolean
+ def isAbstractType: Boolean
+ def isTemplate: Boolean
+}
+
+/** A ''documentable'' class, trait or object (that is, a documentation page will be generated for it in the current
+ * site). */
+trait DocTemplateEntity extends TemplateEntity with MemberEntity {
+ def inSource: Option[(io.AbstractFile, Int)]
+ def typeParams: List[TypeParam]
+ def parentType: Option[TypeEntity]
+ def linearization: List[TemplateEntity]
+ def subClasses: List[DocTemplateEntity]
+ def members: List[MemberEntity]
+ def templates: List[DocTemplateEntity]
+ def methods: List[Def]
+ def values: List[Val]
+ def abstractTypes: List[AbstractType]
+ def aliasTypes: List[AliasType]
+}
+
+/** A ''documentable'' trait. */
+trait Trait extends DocTemplateEntity {
+ def valueParams : List[List[ValueParam]]
+}
+
+/** A ''documentable'' class. */
+trait Class extends Trait {
+ def primaryConstructor: Option[Constructor]
+ def constructors: List[Constructor]
+ def isCaseClass: Boolean
+}
+
+/** A ''documentable'' object. */
+trait Object extends DocTemplateEntity
+
+/** A package that contains at least one ''documentable'' class, trait, object or package. */
+trait Package extends Object {
+ def inTemplate: Package
+ def toRoot: List[Package]
+ def packages: List[Package]
+}
+
+trait NonTemplateMemberEntity extends MemberEntity
+
+/** A method (`def`) of a ''documentable'' class, trait or object. */
+trait Def extends NonTemplateMemberEntity {
+ def typeParams: List[TypeParam]
+ def valueParams : List[List[ValueParam]]
+}
+
+trait Constructor extends NonTemplateMemberEntity {
+ def isPrimary: Boolean
+ def valueParams : List[List[ValueParam]]
+}
+
+/** A value (`val`) or variable (`var`) of a ''documentable'' class, trait or object. */
+trait Val extends NonTemplateMemberEntity
+
+/** An abstract type of a ''documentable'' class, trait or object. */
+trait AbstractType extends NonTemplateMemberEntity {
+ // TODO: typeParams
+ def lo: Option[TypeEntity]
+ def hi: Option[TypeEntity]
+}
+
+/** An abstract type of a ''documentable'' class, trait or object. */
+trait AliasType extends NonTemplateMemberEntity {
+ // TODO: typeParams
+ def alias: TypeEntity
+}
+
+trait ParameterEntity extends Entity {
+ def inTemplate: DocTemplateEntity
+ def toRoot: List[DocTemplateEntity]
+ def isTypeParam: Boolean
+ def isValueParam: Boolean
+}
+
+/** A type parameter to a class or trait or to a method. */
+trait TypeParam extends ParameterEntity {
+ def variance: String
+ def lo: Option[TypeEntity]
+ def hi: Option[TypeEntity]
+}
+
+/** A value parameter to a constructor or to a method. */
+trait ValueParam extends ParameterEntity {
+ def resultType : TypeEntity
+}
diff --git a/src/compiler/scala/tools/nsc/doc/model/EntityFactory.scala b/src/compiler/scala/tools/nsc/doc/model/EntityFactory.scala
new file mode 100644
index 0000000000..27403e49cb
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/model/EntityFactory.scala
@@ -0,0 +1,434 @@
+/* NSC -- new Scala compiler -- Copyright 2007-2009 LAMP/EPFL */
+
+package scala.tools.nsc
+package doc
+package model
+
+import comment._
+
+import scala.collection._
+import symtab.Flags
+
+/** This trait extracts all required information for documentation from compilation units */
+class EntityFactory(val global: Global, val settings: doc.Settings) { extractor =>
+
+ import global._
+
+ /** */
+ def makeModel: Package =
+ makePackage(definitions.RootPackage, null) match {
+ case Some(pack) => pack
+ case None => throw new Error("no documentable class found in compilation units")
+ }
+
+ /** */
+ protected val commentFactory = new CommentFactory(reporter)
+
+ /** */
+ protected val commentCache = mutable.Map.empty[Symbol, comment.Comment]
+
+ /** */
+ protected val templatesCache =
+ new mutable.LinkedHashMap[(Symbol, TemplateImpl), DocTemplateImpl]
+
+ /* ============== IMPLEMENTATION PROVIDING ENTITY TYPES ============== */
+
+ /** Provides a default implementation for instances of the `Entity` type. */
+ abstract class EntityImpl(val sym: Symbol, inTpl: => TemplateImpl) extends Entity {
+ val name = sym.nameString
+ def inTemplate = inTpl
+ def toRoot: List[EntityImpl] = inTpl :: inTpl.toRoot
+ def qualifiedName = name
+ val comment = {
+ val whichSym =
+ if (comments isDefinedAt sym) Some(sym) else sym.allOverriddenSymbols find (comments isDefinedAt _)
+ whichSym map { s =>
+ (commentCache get s) getOrElse {
+ val c = commentFactory.parse(comments(s), s.pos)
+ commentCache += s -> c
+ c
+ }
+ }
+ }
+ }
+
+ /** Provides a default implementation for instances of the `WeakTemplateEntity` type. It must be instantiated as a
+ * `SymbolicEntity` to access the compiler symbol that underlies the entity. */
+ trait TemplateImpl extends EntityImpl with TemplateEntity {
+ override def qualifiedName = if (inTemplate.isRootPackage) name else (inTemplate.qualifiedName + "." + name)
+ val isPackage = sym.isPackage
+ val isTrait = sym.isTrait
+ val isClass = sym.isClass && !sym.isTrait
+ val isObject = sym.isModule && !sym.isPackage
+ val isRootPackage = false
+ }
+
+ /** Provides a default implementation for instances of the `WeakTemplateEntity` type. It must be instantiated as a
+ * `SymbolicEntity` to access the compiler symbol that underlies the entity. */
+ class NoDocTemplateImpl(sym: Symbol, inTpl: => TemplateImpl) extends EntityImpl(sym, inTpl) with TemplateImpl with NoDocTemplate
+
+ /** Provides a default implementation for instances of the `MemberEntity` type. It must be instantiated as a
+ * `SymbolicEntity` to access the compiler symbol that underlies the entity. */
+ abstract class MemberImpl(sym: Symbol, inTpl: => DocTemplateImpl) extends EntityImpl(sym, inTpl) with MemberEntity {
+ override def inTemplate = inTpl
+ override def toRoot: List[DocTemplateImpl] = inTpl :: inTpl.toRoot
+ lazy val inDefinitionTemplate = if (sym.owner == inTpl.sym) inTpl else makeTemplate(sym.owner)
+ val visibility = {
+ def qual = {
+ val qq =
+ if (sym hasFlag Flags.LOCAL)
+ Some("this")
+ else if (sym.privateWithin != null && sym.privateWithin != NoSymbol)
+ Some(sym.privateWithin.nameString) // TODO: create an inline link to the qualifier entity
+ else None
+ qq match { case Some(q) => "[" + q + "]" case None => "" }
+ }
+ if (sym hasFlag Flags.PRIVATE) Some(Paragraph(Text("private" + qual)))
+ else if (sym hasFlag Flags.PROTECTED) Some(Paragraph(Text("protected" + qual)))
+ else None
+ }
+ val flags = {
+ val fgs = mutable.ListBuffer.empty[Paragraph]
+ if (sym hasFlag Flags.IMPLICIT) fgs += Paragraph(Text("implicit"))
+ if (sym hasFlag Flags.SEALED) fgs += Paragraph(Text("sealed"))
+ if (sym hasFlag Flags.OVERRIDE) fgs += Paragraph(Text("override"))
+ if (!sym.isTrait && (sym hasFlag Flags.ABSTRACT)) fgs += Paragraph(Text("abstract"))
+ if (!sym.isTrait && (sym hasFlag Flags.DEFERRED)) fgs += Paragraph(Text("abstract"))
+ if (!sym.isModule && (sym hasFlag Flags.FINAL)) fgs += Paragraph(Text("final"))
+ fgs.toList
+ }
+ lazy val inheritedFrom =
+ if (inTemplate.sym == this.sym.owner || inTemplate.sym.isPackage) Nil else
+ makeTemplate(this.sym.owner) :: (sym.allOverriddenSymbols map { os => makeTemplate(os.owner) })
+ val isDeprecated = sym.isDeprecated
+ lazy val resultType = makeType(sym.tpe.finalResultType, inTemplate, sym)
+ val isDef = false
+ val isVal = false
+ val isVar = false
+ val isConstructor = false
+ val isAliasType = false
+ val isAbstractType = false
+ val isTemplate = false
+ }
+
+ /** Provides a default implementation for instances of the `TemplateEntity` type. It must be instantiated as a
+ * `TemplateSymbolicEntity` to access the compiler symbol that underlies the entity and to be registered with the
+ * `templatesCache` at the very start of its instantiation.
+ *
+ * The instantiation of `TemplateImpl` triggers the creation of the following entities.
+ * * The owner of the template (as a full template);
+ * * All ancestors of the template (as weak templates);
+ * * All non-package members (including other templates, as full templates). */
+ abstract class DocTemplateImpl(sym: Symbol, inTpl: => DocTemplateImpl) extends MemberImpl(sym, inTpl) with TemplateImpl with DocTemplateEntity {
+ templatesCache += ((sym, inTpl) -> this)
+ override def definitionName = inDefinitionTemplate.qualifiedName + "." + name
+ val inSource = if (sym.sourceFile != null) Some(sym.sourceFile, sym.pos.line) else None
+ val typeParams = if (sym.isClass) sym.typeParams map (makeTypeParam(_, this)) else Nil
+ val parentType =
+ if (sym.isPackage) None else
+ Some(makeType(RefinedType(sym.tpe.parents filter (_ != definitions.ScalaObjectClass.tpe), EmptyScope)))
+ val linearization = {
+ sym.ancestors filter (_ != definitions.ScalaObjectClass) map (makeTemplate(_))
+ // TODO: Register subclasses
+ }
+ private val subClassesCache = mutable.Buffer.empty[DocTemplateEntity]
+ def registerSubClass(sc: DocTemplateEntity) = subClassesCache += sc
+ def subClasses = subClassesCache.toList
+ def memberSyms = sym.info.nonPrivateMembers
+ val members: List[MemberEntity] = memberSyms flatMap (makeMember(_, this))
+ val templates = members flatMap {case c: DocTemplateEntity => Some(c) case _ => None}
+ val methods = members flatMap {case d: Def => Some(d) case _ => None}
+ val values = members flatMap {case v: Val => Some(v) case _ => None}
+ val abstractTypes = members flatMap {case t: AbstractType => Some(t) case _ => None}
+ val aliasTypes = members flatMap {case t: AliasType => Some(t) case _ => None}
+ override val isTemplate = true
+ }
+
+ abstract class PackageImpl(sym: Symbol, inTpl: => PackageImpl) extends DocTemplateImpl(sym, inTpl) with Package {
+ override def inTemplate = inTpl
+ override def toRoot: List[PackageImpl] = inTpl :: inTpl.toRoot
+ val packages = members flatMap {case p: Package => Some(p) case _ => None}
+ }
+
+ abstract class NonTemplateMemberImpl(sym: Symbol, inTpl: => DocTemplateImpl) extends MemberImpl(sym, inTpl) with NonTemplateMemberEntity {
+ override def qualifiedName = inTemplate.qualifiedName + "#" + name
+ override def definitionName = inDefinitionTemplate.qualifiedName + "#" + name
+ }
+
+ abstract class ParameterImpl(sym: Symbol, inTpl: => DocTemplateImpl) extends EntityImpl(sym, inTpl) with ParameterEntity {
+ override def inTemplate = inTpl
+ override def toRoot: List[DocTemplateImpl] = inTpl :: inTpl.toRoot
+ }
+
+ /* ============== MAKER METHODS ============== */
+
+ /** */
+ def normalizeTemplate(aSym: Symbol): Symbol = {
+ if (aSym == null || aSym == definitions.EmptyPackage || aSym == NoSymbol)
+ normalizeTemplate(definitions.RootPackage)
+ else if (aSym == definitions.ScalaObjectClass || aSym == definitions.ObjectClass)
+ normalizeTemplate(definitions.AnyRefClass)
+ else if (aSym.isModuleClass || aSym.isPackageObject)
+ normalizeTemplate(aSym.sourceModule)
+ else
+ aSym
+ }
+
+ /** Creates a package entity for the given symbol or returns `None` if the symbol does not denote a package that
+ * contains at least one ''documentable'' class, trait or object. Creating a package entity */
+ def makePackage(aSym: Symbol, inTpl: => PackageImpl): Option[PackageImpl] = {
+ val bSym = normalizeTemplate(aSym)
+ if (templatesCache isDefinedAt (bSym, inTpl))
+ Some(templatesCache(bSym, inTpl) match {case p: PackageImpl => p})
+ else {
+ val pack =
+ if (bSym == definitions.RootPackage)
+ new PackageImpl(bSym, null) {
+ override val name = "root"
+ override def inTemplate = this
+ override def toRoot = Nil
+ override def qualifiedName = "_root_"
+ override lazy val inheritedFrom = Nil
+ override val isRootPackage = true
+ override def memberSyms =
+ (bSym.info.members ++ definitions.EmptyPackage.info.members) filter { s =>
+ s != definitions.EmptyPackage && s != definitions.RootPackage
+ }
+ }
+ else
+ new PackageImpl(bSym, inTpl) {}
+ if (pack.templates.isEmpty) None else Some(pack)
+ }
+
+ }
+
+ /** */
+ def makeTemplate(aSym: Symbol): TemplateImpl = {
+ val bSym = normalizeTemplate(aSym)
+ if (bSym == definitions.RootPackage)
+ makePackage(bSym, null).get
+ else
+ makeTemplate(bSym, makeTemplate(bSym.owner))
+ }
+
+ /** */
+ def makeTemplate(aSym: Symbol, inTpl: => TemplateImpl): TemplateImpl = {
+ val bSym = normalizeTemplate(aSym)
+ if (bSym.isPackage) inTpl match {
+ case inPkg: PackageImpl => makePackage(bSym, inPkg) getOrElse (new NoDocTemplateImpl(bSym, inPkg))
+ case _ => throw new Error("'" + bSym + "' must be in a package")
+ }
+ else if ((bSym.sourceFile != null) && bSym.isPublic && !bSym.isLocal) inTpl match {
+ case inDTpl: DocTemplateImpl => makeDocTemplate(bSym, inDTpl)
+ case _ => throw new Error("documentable '" + bSym + "' must be in a documentable template")
+ }
+ else
+ new NoDocTemplateImpl(bSym, inTpl)
+ }
+
+ /** */
+ def makeDocTemplate(aSym: Symbol, inTpl: => DocTemplateImpl): DocTemplateImpl = {
+ val bSym = normalizeTemplate(aSym)
+ val firstInTpl = { // to prevent a complexity explosion in some cases.
+ def sInTpl0(inTpl: DocTemplateImpl): DocTemplateImpl =
+ if ((aSym.owner != inTpl.inTemplate.sym) && (inTpl.inTemplate.sym.info.members contains aSym))
+ sInTpl0(inTpl.inTemplate)
+ else inTpl
+ sInTpl0(inTpl)
+ }
+ if (templatesCache isDefinedAt (bSym, firstInTpl))
+ templatesCache((bSym, firstInTpl))
+ else if (bSym.isModule || (bSym.isAliasType && bSym.tpe.typeSymbol.isModule))
+ new DocTemplateImpl(bSym, firstInTpl) with Object
+ else if (bSym.isTrait || (bSym.isAliasType && bSym.tpe.typeSymbol.isTrait))
+ new DocTemplateImpl(bSym, firstInTpl) with Trait {
+ val valueParams =
+ List(sym.constrParamAccessors map (makeValueParam(_, this)))
+ }
+ else if (bSym.isClass || (bSym.isAliasType && bSym.tpe.typeSymbol.isClass))
+ new DocTemplateImpl(bSym, firstInTpl) with Class {
+ val valueParams =
+ List(sym.constrParamAccessors map (makeValueParam(_, this)))
+ val constructors =
+ members flatMap {case d: Constructor => Some(d) case _ => None}
+ val primaryConstructor = (constructors find (_.isPrimary))
+ val isCaseClass = sym.isClass && sym.hasFlag(Flags.CASE)
+ }
+ else
+ throw new Error("'" + bSym + "' that isn't a class, trait or object cannot be built as a documentable template")
+ }
+
+ /** */
+ def makeMember(aSym: Symbol, inTpl: => DocTemplateImpl): Option[MemberImpl] = {
+ if (!aSym.isPublic || (aSym hasFlag Flags.SYNTHETIC) || (aSym hasFlag Flags.BRIDGE) || aSym.isLocal || aSym.isModuleClass || aSym.isPackageObject || aSym.isMixinConstructor)
+ None
+ else if (aSym.isGetter && (aSym.accessed hasFlag Flags.MUTABLE))
+ Some(new NonTemplateMemberImpl(aSym, inTpl) with Val {
+ override val isVar = true
+ })
+ else if (aSym.isMethod && !(aSym hasFlag Flags.ACCESSOR) && !aSym.isConstructor && !(aSym hasFlag Flags.FINAL))
+ Some(new NonTemplateMemberImpl(aSym, inTpl) with Def {
+ override val isDef = true
+ val typeParams =
+ sym.tpe.typeParams map (makeTypeParam(_, inTpl))
+ val valueParams =
+ sym.paramss map { ps => (ps.zipWithIndex) map { case (p, i) =>
+ if (p.nameString contains "$") makeValueParam(p, inTpl, "arg" + i) else makeValueParam(p, inTpl)
+ }}
+ })
+ else if (aSym.isConstructor)
+ Some(new NonTemplateMemberImpl(aSym, inTpl) with Constructor {
+ override val isConstructor = true
+ val isPrimary = sym.isPrimaryConstructor
+ val valueParams =
+ sym.paramss map { ps => (ps.zipWithIndex) map { case (p, i) =>
+ if (p.nameString contains "$") makeValueParam(p, inTpl, "arg" + i) else makeValueParam(p, inTpl)
+ }}
+ })
+ else if (aSym.isGetter) // Scala field accessor or Java field
+ Some(new NonTemplateMemberImpl(aSym, inTpl) with Val {
+ override val isVal = true
+ })
+ else if (aSym.isAbstractType)
+ Some(new NonTemplateMemberImpl(aSym, inTpl) with AbstractType {
+ override val isAbstractType = true
+ val lo = sym.info.normalize match {
+ case TypeBounds(lo, hi) if lo.typeSymbol != definitions.NothingClass => Some(makeType(lo, inTpl, sym))
+ case _ => None
+ }
+ val hi = sym.info.normalize match {
+ case TypeBounds(lo, hi) if hi.typeSymbol != definitions.AnyClass => Some(makeType(hi, inTpl, sym))
+ case _ => None
+ }
+ })
+ else if (aSym.isAliasType)
+ Some(new NonTemplateMemberImpl(aSym, inTpl) with AliasType {
+ override val isAliasType = true
+ val alias = makeType(sym.tpe, inTpl, sym)
+ })
+ else if (aSym.isPackage)
+ inTpl match { case inPkg: PackageImpl => makePackage(aSym, inPkg) }
+ else if ((aSym.isClass || aSym.isModule) && (aSym.sourceFile != null) && aSym.isPublic && !aSym.isLocal)
+ (inTpl.toRoot find (_.sym == aSym )) orElse Some(makeDocTemplate(aSym, inTpl))
+ else
+ None
+ }
+
+ /** */
+ def makeTypeParam(aSym: Symbol, inTpl: => DocTemplateImpl): TypeParam = {
+ new ParameterImpl(aSym, inTpl) with TypeParam {
+ val isTypeParam = true
+ val isValueParam = false
+ val variance: String = {
+ if (sym hasFlag Flags.COVARIANT) "+"
+ else if (sym hasFlag Flags.CONTRAVARIANT) "-"
+ else ""
+ }
+ val lo = sym.info.normalize match {
+ case TypeBounds(lo, hi) if lo.typeSymbol != definitions.NothingClass =>
+ Some(makeType(lo, inTpl, sym))
+ case _ => None
+ }
+ val hi = sym.info.normalize match {
+ case TypeBounds(lo, hi) if hi.typeSymbol != definitions.AnyClass =>
+ Some(makeType(hi, inTpl, sym))
+ case _ => None
+ }
+ }
+ }
+
+ /** */
+ def makeValueParam(aSym: Symbol, inTpl: => DocTemplateImpl): ValueParam = {
+ makeValueParam(aSym, inTpl, aSym.nameString)
+ }
+
+ /** */
+ def makeValueParam(aSym: Symbol, inTpl: => DocTemplateImpl, newName: String): ValueParam = {
+ new ParameterImpl(aSym, inTpl) with ValueParam {
+ val isTypeParam = false
+ val isValueParam = true
+ val resultType = {
+ makeType(sym.tpe, inTpl, sym)
+ }
+ override val name = newName
+ }
+ }
+
+ /** */
+ def makeType(aType: Type, seeInTpl: => TemplateImpl, dclSym: Symbol): TypeEntity = {
+ def ownerTpl(sym: Symbol): Symbol =
+ if (sym.isClass || sym.isModule || sym == NoSymbol) sym else ownerTpl(sym.owner)
+ makeType(aType.asSeenFrom(seeInTpl.sym.thisType, ownerTpl(dclSym)))
+ }
+
+ /** */
+ def makeType(aType: Type): TypeEntity =
+ new TypeEntity {
+ private val nameBuffer = new StringBuilder
+ private var refBuffer = new immutable.TreeMap[Int, (Entity, Int)]
+ private def appendTypes0(types: List[Type], sep: String): Unit = types match {
+ case Nil =>
+ case tp :: Nil =>
+ appendType0(tp)
+ case tp :: tps =>
+ appendType0(tp)
+ nameBuffer append sep
+ appendTypes0(tps, sep)
+ }
+ private def appendType0(tpe: Type): Unit = tpe.normalize match {
+ /* Type refs */
+ case tp: TypeRef if (definitions.isFunctionType(tp)) =>
+ nameBuffer append '('
+ appendTypes0(tp.args.init, ", ")
+ nameBuffer append ") ⇒ "
+ appendType0(tp.args.last)
+ case tp: TypeRef if (tp.typeSymbol == definitions.RepeatedParamClass) =>
+ appendType0(tp.args.head)
+ nameBuffer append '*'
+ case tp: TypeRef if (tp.typeSymbol == definitions.ByNameParamClass) =>
+ nameBuffer append "⇒ "
+ appendType0(tp.args.head)
+ case tp: TypeRef if (definitions.isTupleType(tp)) =>
+ nameBuffer append '('
+ appendTypes0(tp.args, ", ")
+ nameBuffer append ')'
+ case TypeRef(pre, aSym, targs) =>
+ val bSym = normalizeTemplate(aSym)
+ if (bSym.isType)
+ nameBuffer append bSym.name
+ else {
+ val refClass = makeTemplate(bSym)
+ val pos0 = nameBuffer.length
+ nameBuffer append refClass.name
+ refBuffer += pos0 -> (refClass, nameBuffer.length)
+ }
+ if (!targs.isEmpty) {
+ nameBuffer append '['
+ appendTypes0(targs, ", ")
+ nameBuffer append ']'
+ }
+ /* Refined types */
+ case RefinedType(parents, defs) =>
+ appendTypes0((if (parents.length > 1) parents.toList - definitions.ObjectClass.tpe else parents.toList), " with ")
+ if (!defs.isEmpty) {
+ nameBuffer append " {...}" // TODO: actually print the refinement
+ }
+ /* Polymorphic types */
+ case PolyType(tparams, result) if (!tparams.isEmpty) =>
+ appendType0(result)
+ nameBuffer append '['
+ appendTypes0(tparams map (_.tpe), ", ") // TODO: actually print the polytype's symbols (not just types)
+ nameBuffer append ']'
+ /* Eval-by-name types */
+ case PolyType(tparams, result) if (tparams.isEmpty) =>
+ nameBuffer append '⇒'
+ appendType0(result)
+ case tpen =>
+ nameBuffer append tpen.toString
+ }
+ appendType0(aType)
+ val refEntity = refBuffer
+ val name = nameBuffer.toString
+ }
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/model/TypeEntity.scala b/src/compiler/scala/tools/nsc/doc/model/TypeEntity.scala
new file mode 100644
index 0000000000..2a0e4b9831
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/model/TypeEntity.scala
@@ -0,0 +1,25 @@
+/* NSC -- new Scala compiler
+ * Copyright 2007-2009 LAMP/EPFL
+ * @author Manohar Jonnalagedda
+ */
+
+package scala.tools.nsc
+package doc
+package model
+
+import scala.collection._
+
+abstract class TypeEntity {
+
+ /** A string reprsentation of this type. */
+ def name: String
+
+ /** Maps which parts of this type's name reference other entities. The map is indexed by the position of the first
+ * character that reference some entity, and contains the entity and the position of the last referenced
+ * character. The referenced character ranges do not to overlap or nest. The map is sorted by position. */
+ def refEntity: SortedMap[Int, (Entity, Int)]
+
+ override def toString =
+ name
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/model/comment/Body.scala b/src/compiler/scala/tools/nsc/doc/model/comment/Body.scala
new file mode 100644
index 0000000000..76a7e185b6
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/model/comment/Body.scala
@@ -0,0 +1,37 @@
+/* NSC -- new Scala compiler -- Copyright 2007-2009 LAMP/EPFL */
+
+package scala.tools.nsc
+package doc
+package model
+package comment
+
+import scala.collection._
+
+import java.net.URL
+
+/** */
+final case class Body(blocks: Seq[Block])
+
+/** */
+sealed abstract class Block
+
+final case class Title(text: Inline, level: Int) extends Block
+final case class Paragraph(text: Inline) extends Block
+final case class Code(data: String) extends Block
+final case class UnorderedList(items: Seq[Block]) extends Block
+final case class OrderedList(items: Seq[Block]) extends Block
+final case class DefinitionList(items: SortedMap[Inline, Block]) extends Block
+final case class HorizontalRule() extends Block
+
+/** */
+sealed abstract class Inline
+
+final case class Chain(items: Seq[Inline]) extends Inline
+final case class Italic(text: Inline) extends Inline
+final case class Bold(text: Inline) extends Inline
+final case class Underline(text: Inline) extends Inline
+final case class Superscript(text: Inline) extends Inline
+final case class Subscript(text: Inline) extends Inline
+final case class Link(raw: String) extends Inline // TODO
+final case class Monospace(text: String) extends Inline
+final case class Text(text: String) extends Inline
diff --git a/src/compiler/scala/tools/nsc/doc/model/comment/Comment.scala b/src/compiler/scala/tools/nsc/doc/model/comment/Comment.scala
new file mode 100644
index 0000000000..e30b38a8bc
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/model/comment/Comment.scala
@@ -0,0 +1,58 @@
+/* NSC -- new Scala compiler -- Copyright 2007-2009 LAMP/EPFL */
+
+package scala.tools.nsc
+package doc
+package model
+package comment
+
+import scala.collection._
+
+/** A Scaladoc comment and all its tags.
+ *
+ * '''Note:''' the only instantiation site of this class is in `Parser`.
+ *
+ * @author Gilles Dubochet
+ * @author Manohar Jonnalagedda */
+abstract class Comment {
+
+ /** */
+ def body: Body
+ /* author|deprecated|param|return|see|since|throws|version|todo|tparam */
+
+ /** */
+ def authors: List[Body]
+
+ /** */
+ def see: List[Body]
+
+ /** */
+ def result: Option[Body]
+
+ /** */
+ def throws: Map[String, Body]
+
+ /** */
+ def valueParams: Map[String, Body]
+
+ /** */
+ def typeParams: Map[String, Body]
+
+ /** */
+ def version: Option[Body]
+
+ /** */
+ def since: Option[Body]
+
+ /** */
+ def todo: List[Body]
+
+ /** */
+ def deprecated: Option[Body]
+
+ override def toString =
+ body.toString + "\n" +
+ (authors map ("@author " + _.toString)).mkString("\n") +
+ (result map ("@return " + _.toString)).mkString
+
+}
+
diff --git a/src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala b/src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala
new file mode 100644
index 0000000000..a7c9f596d3
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/doc/model/comment/CommentFactory.scala
@@ -0,0 +1,525 @@
+/* NSC -- new Scala compiler -- Copyright 2007-2009 LAMP/EPFL */
+
+package scala.tools.nsc
+package doc
+package model
+package comment
+
+import reporters.Reporter
+import util.Position
+
+import scala.collection._
+import scala.util.matching.Regex
+import scala.annotation.switch
+
+/** The comment parser transforms raw comment strings into `Comment` objects. Call `parse` to run the parser. Note that
+ * the parser is stateless and should only be built once for a given Scaladoc run.
+ *
+ * @param reporter The reporter on which user messages (error, warnings) should be printed.
+ *
+ * @author Manohar Jonnalagedda
+ * @author Gilles Dubochet */
+final class CommentFactory(val reporter: Reporter) { parser =>
+
+ final val endOfText = '\u0003'
+ final val endOfLine = '\u000A'
+
+ /** Something that should not have happened, happened, and Scaladoc should exit. */
+ protected def oops(msg: String): Nothing =
+ throw FatalError("program logic: " + msg)
+
+ /** The body of a comment, dropping start and end markers. */
+ protected val CleanComment =
+ new Regex("""(?s)\s*/\*\*((?:[^\*]\*)*)\*/\s*""")
+
+ /** The body of a line, dropping the start star-marker, one leading whitespace and all trailing whitespace. */
+ protected val CleanCommentLine =
+ new Regex("""\*\s?(.*)""")
+
+ /** A Scaladoc tag not linked to a symbol. Returns the name of the tag, and the rest of the line. */
+ protected val SimpleTag =
+ new Regex("""\s*@(\S+)\s+(.*)""")
+
+ /** A Scaladoc tag linked to a symbol. Returns the name of the tag, the name of the symbol, and the rest of the
+ * line. */
+ protected val SymbolTag =
+ new Regex("""\s*@(param|tparam|throws)\s+(\S*)\s*(.*)""")
+
+ /** A key used for a tag map. The key is built from the name of the tag and from the linked symbol if the tag has one.
+ * Equality on tag keys is structural. */
+ protected sealed abstract class TagKey {
+ def name: String
+ }
+
+ protected final case class SimpleTagKey(name: String) extends TagKey
+ protected final case class SymbolTagKey(name: String, symbol: String) extends TagKey
+
+ /** Parses a raw comment string into a `Comment` object.
+ * @param comment The raw comment string (including start and end markers) to be parsed.
+ * @param pos The position of the comment in source. */
+ def parse(comment: String, pos: Position): Comment = {
+
+ /** The cleaned raw comment as a list of lines. Cleaning removes comment start and end markers, line start markers
+ * and unnecessary whitespace. */
+ val cleaned: List[String] = {
+ def cleanLine(line: String): Option[String] = {
+ line.trim match {
+ case CleanCommentLine(ctl) => Some(ctl)
+ case "" =>
+ None
+ case tl =>
+ reporter.warning(pos, "Comment has no start-of-line marker ('*')")
+ Some(tl)
+ }}
+ comment.trim.stripPrefix("/*").stripSuffix("*/").lines.toList flatMap (cleanLine(_))
+ }
+
+ /** Parses a comment (in the form of a list of lines) to a Comment instance, recursively on lines. To do so, it
+ * splits the whole comment into main body and tag bodies, then runs the `WikiParser` on each body before creating
+ * the comment instance.
+ *
+ * @param body The body of the comment parsed until now.
+ * @param tags All tags parsed until now.
+ * @param lastTagKey The last parsed tag, or `None` if the tag section hasn't started. Lines that are not tagged
+ * are part of the previous tag or, if none exists, of the body.
+ * @param remaining The lines that must still recursively be parsed. */
+ def parse0(docBody: String, tags: Map[TagKey, List[String]], lastTagKey: Option[TagKey], remaining: List[String]): Comment =
+ remaining match {
+
+ case SymbolTag(name, sym, body) :: ls =>
+ val key = SymbolTagKey(name, sym)
+ val value = body :: ((tags get key) getOrElse Nil)
+ parse0(docBody, tags + (key -> value), Some(key), ls)
+
+ case SimpleTag(name, body) :: ls =>
+ val key = SimpleTagKey(name)
+ val value = body :: ((tags get key) getOrElse Nil)
+ parse0(docBody, tags + (key -> value), Some(key), ls)
+
+ case line :: ls if (lastTagKey.isDefined) =>
+ val key = lastTagKey.get
+ val value =
+ ((tags get key): @unchecked) match {
+ case Some(b :: bs) => (b + endOfLine + line) :: bs
+ case None => oops("lastTagKey set when no tag exists for key")
+ }
+ parse0(docBody, tags + (key -> value), lastTagKey, ls)
+
+ case line :: ls =>
+ val newBody =
+ if (docBody == "") line else docBody + endOfLine + line
+ parse0(newBody, tags, lastTagKey, ls)
+
+ case Nil =>
+
+ val bodyTags: mutable.Map[TagKey, List[Body]] =
+ mutable.Map((tags map { case (key, values) => key -> (values map (parseWiki(_, pos))) }).toSeq:_*)
+
+ def oneTag(key: SimpleTagKey): Option[Body] =
+ ((bodyTags remove key): @unchecked) match {
+ case Some(r :: rs) =>
+ if (!rs.isEmpty) reporter.warning(pos, "Only one '@" + key.name + "' tag is allowed")
+ Some(r)
+ case None => None
+ }
+
+ def allTags(key: SimpleTagKey): List[Body] =
+ (bodyTags remove key) getOrElse Nil
+
+ def allSymsOneTag(key: TagKey): Map[String, Body] = {
+ val keys: Sequence[SymbolTagKey] =
+ bodyTags.keys.toSeq flatMap {
+ case stk: SymbolTagKey if (stk.name == key.name) => Some(stk)
+ case stk: SimpleTagKey if (stk.name == key.name) =>
+ reporter.warning(pos, "Tag '@" + stk.name + "' must be followed by a symbol name")
+ None
+ case _ => None
+ }
+ val pairs: Sequence[(String, Body)] =
+ for (key <- keys) yield {
+ val bs = (bodyTags remove key).get
+ if (bs.length > 1)
+ reporter.warning(pos, "Only one '@" + key.name + "' tag for symbol " + key.symbol + " is allowed")
+ (key.symbol, bs.head)
+ }
+ Map.empty[String, Body] ++ pairs
+ }
+
+ val com = new Comment {
+ val body = parseWiki(docBody, pos)
+ val authors = allTags(SimpleTagKey("author"))
+ val see = allTags(SimpleTagKey("see"))
+ val result = oneTag(SimpleTagKey("return"))
+ val throws = allSymsOneTag(SimpleTagKey("throws"))
+ val valueParams = allSymsOneTag(SimpleTagKey("param"))
+ val typeParams = allSymsOneTag(SimpleTagKey("tparam"))
+ val version = oneTag(SimpleTagKey("version"))
+ val since = oneTag(SimpleTagKey("since"))
+ val todo = allTags(SimpleTagKey("todo"))
+ val deprecated = oneTag(SimpleTagKey("deprecated"))
+ }
+
+ for (key <- bodyTags.keys)
+ reporter.warning(pos, "Tag '@" + key.name + "' is not recognised")
+
+ com
+
+ }
+
+ parse0("", Map.empty, None, cleaned)
+
+ }
+
+ /** Parses a string containing wiki syntax into a `Comment` object. Note that the string is assumed to be clean:
+ * * Removed Scaladoc start and end markers.
+ * * Removed start-of-line star and one whitespace afterwards (if present).
+ * * Removed all end-of-line whitespace.
+ * * Only `endOfLine` is used to mark line endings. */
+ protected def parseWiki(string: String, pos: Position): Body =
+ new WikiParser(string.toArray, pos).document()
+
+ /** TODO
+ *
+ * @author Ingo Maier
+ * @author Manohar Jonnalagedda
+ * @author Gilles Dubochet */
+ protected final class WikiParser(val buffer: Array[Char], pos: Position) extends CharReader(buffer) { wiki =>
+
+ def document(): Body = {
+ nextChar()
+ val blocks = new mutable.ListBuffer[Block]
+ while(char != endOfText)
+ blocks += block()
+ Body(blocks.toList)
+ }
+
+ /* BLOCKS */
+
+ /** {{{ block ::= code | title | hrule | para }}} */
+ def block(): Block = {
+ if (check("{{{"))
+ code()
+ else if (check("="))
+ title()
+ else if (check("----"))
+ hrule()
+ // TODO: Lists
+ else {
+ para()
+ }
+ }
+
+ /** {{{ code ::= "{{{" { char } '}' "}}" '\n' }}} */
+ def code(): Block = {
+ jump("{{{")
+ readUntil("}}}")
+ if (char == endOfText)
+ reporter.warning(pos, "unclosed code block")
+ else
+ jump("}}}")
+ blockEnded("code block")
+ Code(getRead)
+ }
+
+ /** {{{ title ::= ('=' inline '=' | "==" inline "==" | ...) '\n' }}} */
+ def title(): Block = {
+ val inLevel = repeatJump("=")
+ val text = inline(check(Array.fill(inLevel)('=')))
+ val outLevel = repeatJump("=", inLevel)
+ if (inLevel != outLevel)
+ reporter.warning(pos, "unbalanced or unclosed heading")
+ blockEnded("heading")
+ Title(text, inLevel)
+ }
+
+ /** {{{ hrule ::= "----" { '-' } '\n' }}} */
+ def hrule(): Block = {
+ repeatJump("-")
+ blockEnded("horizontal rule")
+ HorizontalRule()
+ }
+
+ /** {{{ para ::= inline '\n' }}} */
+ def para(): Block = {
+ def checkParaEnd(): Boolean = {
+ check(Array(endOfLine, endOfLine)) ||
+ check(Array(endOfLine, '='))
+ check(Array(endOfLine, '{', '{', '{'))
+ }
+ val p = Paragraph(inline(checkParaEnd()))
+ while (char == endOfLine && char != endOfText)
+ nextChar()
+ p
+ }
+
+ /* INLINES */
+
+ def inline(isBlockEnd: => Boolean): Inline =
+ inline(isBlockEnd, isBlockEnd)
+
+ def inline(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ def inline0(): Inline = {
+ if (check("'''"))
+ bold(isInlineEnd, isBlockEnd)
+ else if (check("''"))
+ italic(isInlineEnd, isBlockEnd)
+ else if (check("`"))
+ monospace(isInlineEnd, isBlockEnd)
+ else if (check("__"))
+ underline(isInlineEnd, isBlockEnd)
+ else if (check("^"))
+ superscript(isInlineEnd, isBlockEnd)
+ else if (check(",,"))
+ subscript(isInlineEnd, isBlockEnd)
+ else if (check("[["))
+ link(isInlineEnd, isBlockEnd)
+ else {
+ readUntil { check("''") || char == '`' || check("__") || char == '^' || check(",,") || check("[[") || isInlineEnd || isBlockEnd || char == endOfLine }
+ Text(getRead())
+ }
+ }
+ val inlines: List[Inline] = {
+ val iss = mutable.ListBuffer.empty[Inline]
+ iss += inline0()
+ while(!isInlineEnd && !isBlockEnd && !checkParaEnded) {
+ if (char == endOfLine) nextChar()
+ val current = inline0()
+ (iss.last, current) match {
+ case (Text(t1), Text(t2)) =>
+ iss.update(iss.length - 1, Text(t1 + endOfLine + t2))
+ case _ => iss += current
+ }
+ }
+ iss.toList
+ }
+ inlines match {
+ case Nil => Text("")
+ case i :: Nil => i
+ case i :: is => Chain(i :: is)
+ }
+ }
+
+ def bold(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ jump("'''")
+ val i = inline(check("'''"), isBlockEnd)
+ jump("'''")
+ Bold(i)
+ }
+
+ def italic(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ jump("''")
+ val i = inline(check("''"), isBlockEnd)
+ jump("''")
+ Italic(i)
+ }
+
+ def monospace(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ jump("`")
+ readUntil { char == '`' }
+ jump("`")
+ Monospace(getRead())
+ }
+
+ def underline(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ jump("__")
+ val i = inline(check("__"), isBlockEnd)
+ jump("__")
+ Underline(i)
+ }
+
+ def superscript(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ jump("^")
+ val i = inline(check("^"), isBlockEnd)
+ jump("^")
+ Superscript(i)
+ }
+
+ def subscript(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ jump(",,")
+ val i = inline(check(",,"), isBlockEnd)
+ jump(",,")
+ Subscript(i)
+ }
+
+ def link(isInlineEnd: => Boolean, isBlockEnd: => Boolean): Inline = {
+ jump("[[")
+ readUntil { check("]]") }
+ jump("]]")
+ Link(getRead())
+ }
+
+ /* UTILITY */
+
+ /** {{{ eol ::= { whitespace } '\n' }}} */
+ def blockEnded(blockType: String): Unit = {
+ if (char != endOfLine && char != endOfText) {
+ reporter.warning(pos, "no additional content on same line after " + blockType)
+ jumpUntil(endOfLine)
+ }
+ while (char == endOfLine)
+ nextChar()
+ }
+
+ def checkParaEnded(): Boolean = {
+ char == endOfText || check(Array(endOfLine, endOfLine)) || check(Array(endOfLine, '{', '{', '{')) || check(Array(endOfLine, '\u003D'))
+ }
+
+ }
+
+ protected sealed class CharReader(buffer: Array[Char]) { reader =>
+
+ var char: Char = _
+ var offset: Int = 0
+
+ final def nextChar(): Unit = {
+ if (offset >= buffer.length)
+ char = endOfText
+ else {
+ char = buffer(offset)
+ offset += 1
+ }
+ }
+
+ implicit def strintToChars(s: String): Array[Char] = s.toArray
+
+ def store(body: => Unit): String = {
+ val pre = offset
+ body
+ val post = offset
+ buffer.toArray.slice(pre, post).toString
+ }
+
+ final def check(chars: Array[Char]): Boolean = {
+ val poff = offset
+ val pc = char
+ val ok = jump(chars)
+ offset = poff
+ char = pc
+ ok
+ }
+
+ /* JUMPERS */
+
+ final def jump(chars: Array[Char]): Boolean = {
+ var index = 0
+ while (index < chars.length && char == chars(index) && char != endOfText) {
+ nextChar()
+ index += 1
+ }
+ index == chars.length
+ }
+
+ final def checkedJump(chars: Array[Char]): Boolean = {
+ val poff = offset
+ val pc = char
+ val ok = jump(chars)
+ if (!ok) {
+ offset = poff
+ char = pc
+ }
+ ok
+ }
+
+ final def repeatJump(chars: Array[Char], max: Int): Int = {
+ var count = 0
+ var more = true
+ while (more && count < max) {
+ if (!checkedJump(chars))
+ more = false
+ count += 1
+ }
+ count
+ }
+
+ final def repeatJump(chars: Array[Char]): Int = {
+ var count = 0
+ var more = true
+ while (more) {
+ if (!checkedJump(chars))
+ more = false
+ count += 1
+ }
+ count
+ }
+
+ final def jumpUntil(ch: Char): Int = {
+ var count = 0
+ while(char != ch && char != endOfText)
+ nextChar()
+ count
+ }
+
+ final def jumpUntil(chars: Array[Char]): Int = {
+ assert(chars.length > 0)
+ var count = 0
+ val c = chars(0)
+ while(!check(chars) && char != endOfText) {
+ nextChar()
+ while (char != c && char != endOfText)
+ nextChar()
+ }
+ count
+ }
+
+ final def jumpUntil(pred: => Boolean): Int = {
+ var count = 0
+ while (!pred && char != endOfText)
+ nextChar()
+ count
+ }
+
+ def jumpWhitespace() = jumpUntil(!isWhitespace(char))
+
+ /* READERS */
+
+ private val readBuilder = new mutable.StringBuilder
+
+ final def getRead(): String = {
+ val bld = readBuilder.toString
+ readBuilder.clear()
+ bld
+ }
+
+ final def readUntil(ch: Char): Int = {
+ var count = 0
+ while(char != ch && char != endOfText) {
+ readBuilder += char
+ nextChar()
+ }
+ count
+ }
+
+ final def readUntil(chars: Array[Char]): Int = {
+ assert(chars.length > 0)
+ var count = 0
+ val c = chars(0)
+ while(!check(chars) && char != endOfText) {
+ readBuilder += char
+ nextChar()
+ while (char != c && char != endOfText) {
+ readBuilder += char
+ nextChar()
+ }
+ }
+ count
+ }
+
+ final def readUntil(pred: => Boolean): Int = {
+ var count = 0
+ while (!pred && char != endOfText) {
+ readBuilder += char
+ nextChar()
+ }
+ count
+ }
+
+ /* CHARS CLASSES */
+
+ def isWhitespace(c: Char) = (c: @switch) match {
+ case ' ' | '\t' => true
+ case _ => false
+ }
+
+ }
+
+}
diff --git a/src/compiler/scala/tools/nsc/doc/script.js b/src/compiler/scala/tools/nsc/doc/script.js
deleted file mode 100644
index 54c69b1c42..0000000000
--- a/src/compiler/scala/tools/nsc/doc/script.js
+++ /dev/null
@@ -1,112 +0,0 @@
-<!--
-// NSC -- new Scala compiler
-// Copyright 2005-2009 LAMP/EPFL
-// @author Stephane Micheloud
-
-// $Id$
-
-function setWindowTitle(title) {
- parent.document.title = title;
-}
-
-var java_api_root = 'http://java.sun.com/javase/6/docs/api/';
-//var java_api_root = 'http://java.sun.com/j2se/1.5.0/docs/api/';
-//var java_api_root = 'http://lamp.epfl.ch/~linuxsoft/java/jdk1.5/docs/api/';
-
-var javax_servlet_api_root = 'http://java.sun.com/products/servlet/2.3/javadoc/';
-
-var scala_doc_url = parent.document.URL;
-var scala_api_root = scala_doc_url.substring(0, scala_doc_url.lastIndexOf("/")+1);
-
-var ant_api_root = 'http://lamp.epfl.ch/~linuxsoft/ant/manual/api/';
-//var ant_api_root = 'http://www.net-freaks.org/doc/ant-1.6.5/manual/api/';
-
-var eclipse_api_root = 'http://help.eclipse.org/help32/topic/org.eclipse.platform.doc.isv/reference/api/';
-
-var fjbg_api_root = 'http://lamp.epfl.ch/~linuxsoft/fjbg/api/';
-
-var liftweb_api_root = 'http://lamp.epfl.ch/~linuxsoft/liftweb/apidocs/';
-
-function get_api_root(key) {
- root = null;
- if (key.indexOf("ch/epfl/lamp/fjbg/") == 0) { root = fjbg_api_root; }
- else if (key.indexOf("java/" ) == 0) { root = java_api_root; }
- else if (key.indexOf("javax/" ) == 0) { root = java_api_root; }
- else if (key.indexOf("javax/servlet/" ) == 0) { root = javax_servlet_api_root; }
- else if (key.indexOf("scala/" ) == 0) { root = scala_api_root; }
- else if (key.indexOf("org/apache/tools/" ) == 0) { root = ant_api_root; }
- else if (key.indexOf("org/eclipse/" ) == 0) { root = eclipse_api_root; }
- else if (key.indexOf("net/liftweb/" ) == 0) { root = liftweb_api_root; }
- return root;
-}
-
-var scala_src_root = 'http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/';
-var lib_src_root = scala_src_root + 'src/library/';
-var comp_src_root = scala_src_root + 'src/compiler/';
-var actors_src_root = scala_src_root + 'src/actors/';
-var dbc_src_root = scala_src_root + 'src/dbc/';
-var swing_src_root = scala_src_root + 'src/swing/';
-
-//var liftweb_src_root = 'http://liftweb.googlecode.com/svn/trunk/liftweb/lift/src/main/scala/';
-
-function get_src_root(key) {
- root = null;
- if (key.indexOf("scala/actors/") == 0) { root = actors_src_root; }
- else if (key.indexOf("scala/dbc/" ) == 0) { root = dbc_src_root; }
- else if (key.indexOf("scala/swing/" ) == 0) { root = swing_src_root; }
- else if (key.indexOf("scala/tools/" ) == 0) { root = comp_src_root; }
- else if (key.indexOf("scala/" ) == 0) { root = lib_src_root; }
- //else if (key.indexOf("net/liftweb/" ) == 0) { root = liftweb_src_root; }
- return root;
-}
-
-function init() {
- elems = document.getElementsByTagName('a');
- for (i = 0; i < elems.length; i++) {
- try {
- key = elems[i].getAttribute('class');
- href = elems[i].getAttribute('href');
- api_root = get_api_root(key);
- if (api_root != null) {
- href1 = href.substring(href.lastIndexOf("#"))
- value = api_root + key + ".html" + href1;
- elems[i].setAttribute('href', value);
- }
- src_root = get_src_root(key);
- if (src_root != null) {
- value = src_root + key + '.scala?view=markup';
- elems[i].setAttribute('href', value);
- elems[i].setAttribute('target' , '_top');
- }
- }
- catch (e) {
- // do nothing
- }
- }
-}
-
-function getLocation() {
- kinds = parent.navigationFrame.document.getElementById("kinds");
- oldLocation = parent.classesFrame.window.location.href;
- //alert("oldLocation="+oldLocation);
- pos = oldLocation.lastIndexOf("#");
- classesURL = (pos > 0) ? oldLocation.substring(0, pos) : oldLocation;
- newLocation = classesURL + kinds.options[kinds.selectedIndex].value;
- //alert("newLocation="+newLocation);
- return newLocation;
-}
-
-function gotoKind() {
- parent.classesFrame.window.location = getLocation();
-}
-
-function resetKind() {
- kinds = parent.navigationFrame.document.getElementById("kinds");
- kinds.selectedIndex = 0;
-}
-
-function gotoName(letter) {
- parent.classesFrame.window.location = getLocation() + "_" + letter;
-}
--->
-
diff --git a/src/compiler/scala/tools/nsc/doc/style.css b/src/compiler/scala/tools/nsc/doc/style.css
deleted file mode 100644
index e243249ca5..0000000000
--- a/src/compiler/scala/tools/nsc/doc/style.css
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Scaladoc style sheet */
-
-a:link {
- color: #0000ee;
-}
-
-a:visited {
- color: #551a8b;
-}
-
-a:active {
- color: #0000ee;
-}
-
-body {
- background-color: #ffffff;
-}
-
-div.entity {
- margin: 18px 0px 18px 0px;
- font-size: x-large;
- font-weight: bold;
-}
-
-div.doctitle {
- font-weight: bold;
- font-style: italic;
-}
-
-div.doctitle-larger {
- margin: 0px 0px 10px 0px;
- font-size: larger;
- font-weight: bold;
-}
-
-div.kinds {
- margin: 0.6em 0 0 0; /* top right bottom left */
- font-weight: bold;
-}
-
-div.page-title {
- margin: 15px 0px 15px 0px;
- font-size: x-large;
- font-weight: bold;
- text-align: center;
-}
-
-div.source {
- font-size: smaller;
- color: gray;
-}
-
-span.entity {
- color: #ff6666;
-}
-
-table.member {
- margin: 0 0 1.2em 0; /* top rigth bottom left */
- border-collapse: collapse;
- border: 2px inset #888888;
- width: 100%;
-}
-
-table.member td.title {
- border: 2px inset #888888;
- background-color: #ccccff;
- font-size: x-large;
- font-weight: bold;
-}
-
-table.inherited {
- margin: 0 0 1.2em 0; /* top rigth bottom left */
- border-collapse: collapse;
- border: 2px inset #888888;
- width: 100%;
-}
-
-table.inherited td.title {
- background-color: #eeeeff;
- font-weight: bold;
-}
-
-table.member-detail {
- margin: 10px 0px 0px 0px;
- border-collapse: collapse;
- border: 2px inset #888888;
- background-color: #ffffff;
- width: 100%;
-}
-
-table.member-detail td.title {
- border: 2px inset #888888;
- background-color: #ccccff;
- font-size: x-large;
- font-weight: bold;
-}
-
-table.navigation {
- border-collapse: collapse;
- width: 100%;
- font-family: Arial,Helvetica,Sans-Serif;
-}
-
-td.inherited-members {
- border-top: 2px inset #888888;
- border-right: 0px;
-}
-
-td.inherited-owner {
- background-color: #eeeeff;
- font-weight: bold;
-}
-
-td.modifiers {
- border-top: 2px inset #888888;
- border-right: 2px inset #888888;
- width: 50px;
- text-align: right;
-}
-
-td.navigation-enabled {
- font-weight: bold;
- color: #000000;
- background-color: #eeeeff;
-}
-
-td.navigation-links {
- width: 100%;
- background-color: #eeeeff;
-}
-
-td.navigation-selected {
- font-weight: bold;
- color: #ffffff;
- background-color: #00008b;
-}
-
-td.signature {
- border-top: 2px inset #888888;
- width: 90%;
-}
-
-ul.list {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-