pax_global_header00006660000000000000000000000064126641253130014515gustar00rootroot0000000000000052 comment=f0226799c31d935e9afa8fdbec852e45034dd5af goconvey-1.6.1/000077500000000000000000000000001266412531300133535ustar00rootroot00000000000000goconvey-1.6.1/.gitignore000066400000000000000000000001031266412531300153350ustar00rootroot00000000000000.DS_Store Thumbs.db examples/output.json web/client/reports/ /.ideagoconvey-1.6.1/.travis.yml000066400000000000000000000001761266412531300154700ustar00rootroot00000000000000language: go go: - 1.2 - 1.3 - 1.4 - 1.5 install: - go get -t ./... script: go test -short -v ./... sudo: false goconvey-1.6.1/CONTRIBUTING.md000066400000000000000000000031701266412531300156050ustar00rootroot00000000000000# Subject: GoConvey maintainers wanted We'd like to open the project up to additional maintainers who want to move the project forward in a meaningful way. We've spent significant time at SmartyStreets building GoConvey and it has perfectly met (and exceeded) all of our initial design specifications. We've used it to great effect. Being so well-matched to our development workflows at SmartyStreets, we haven't had a need to hack on it lately. This had been frustrating to many in the community who have ideas for the project and would like to see new features released (and some old bugs fixed). The release of Go 1.5 and the new vendoring experiment has been a source of confusion and hassle for those who have already upgraded and find that GoConvey needs to be brought up to speed. Comment below if you're interested. Preference will be given to those that have already contributed to the project. Checkout the issues listing if you need some ideas for contributing. GoConvey is a popular 2-pronged, open-source github project (1,600+ stargazers, 100+ forks): - A package you import in your test code that allows you to write BDD-style tests. - An executable that runs a local web server which displays auto-updating test results in a web browser. ---- - http://goconvey.co/ - https://github.com/smartystreets/goconvey - https://github.com/smartystreets/goconvey/wiki _I should mention that the [assertions package](https://github.com/smartystreets/assertions) imported by the convey package is used by other projects at SmartyStreets and so we will be continuing to maintain that project internally._ We hope to hear from you soon. Thanks! goconvey-1.6.1/LICENSE.md000066400000000000000000000024051266412531300147600ustar00rootroot00000000000000Copyright (c) 2014 SmartyStreets, LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. NOTE: Various optional and subordinate components carry their own licensing requirements and restrictions. Use of those components is subject to the terms and conditions outlined the respective license of each component. goconvey-1.6.1/README.md000066400000000000000000000071771266412531300146460ustar00rootroot00000000000000GoConvey is awesome Go testing ============================== [![Build Status](https://travis-ci.org/smartystreets/goconvey.png)](https://travis-ci.org/smartystreets/goconvey) [![GoDoc](https://godoc.org/github.com/smartystreets/goconvey?status.svg)](http://godoc.org/github.com/smartystreets/goconvey) Welcome to GoConvey, a yummy Go testing tool for gophers. Works with `go test`. Use it in the terminal or browser according to your viewing pleasure. **[View full feature tour.](http://goconvey.co)** **Features:** - Directly integrates with `go test` - Fully-automatic web UI (works with native Go tests, too) - Huge suite of regression tests - Shows test coverage (Go 1.2+) - Readable, colorized console output (understandable by any manager, IT or not) - Test code generator - Desktop notifications (optional) - Immediately open problem lines in [Sublime Text](http://www.sublimetext.com) ([some assembly required](https://github.com/asuth/subl-handler)) You can ask questions about how to use GoConvey on [StackOverflow](http://stackoverflow.com/questions/ask?tags=goconvey,go&title=GoConvey%3A%20). Use the tags `go` and `goconvey`. **Menu:** - [Installation](#installation) - [Quick start](#quick-start) - [Documentation](#documentation) - [Screenshots](#screenshots) - [Contributors](#contributors-thanks) Installation ------------ $ go get github.com/smartystreets/goconvey [Quick start](https://github.com/smartystreets/goconvey/wiki#get-going-in-25-seconds) ----------- Make a test, for example: ```go package package_name import ( "testing" . "github.com/smartystreets/goconvey/convey" ) func TestSpec(t *testing.T) { // Only pass t into top-level Convey calls Convey("Given some integer with a starting value", t, func() { x := 1 Convey("When the integer is incremented", func() { x++ Convey("The value should be greater by one", func() { So(x, ShouldEqual, 2) }) }) }) } ``` #### [In the browser](https://github.com/smartystreets/goconvey/wiki/Web-UI) Start up the GoConvey web server at your project's path: $ $GOPATH/bin/goconvey Then watch the test results display in your browser at: http://localhost:8080 If the browser doesn't open automatically, please click [http://localhost:8080](http://localhost:8080) to open manually. There you have it. ![](http://d79i1fxsrar4t.cloudfront.net/goconvey.co/gc-1-dark.png) As long as GoConvey is running, test results will automatically update in your browser window. ![](http://d79i1fxsrar4t.cloudfront.net/goconvey.co/gc-5-dark.png) The design is responsive, so you can squish the browser real tight if you need to put it beside your code. The [web UI](https://github.com/smartystreets/goconvey/wiki/Web-UI) supports traditional Go tests, so use it even if you're not using GoConvey tests. #### [In the terminal](https://github.com/smartystreets/goconvey/wiki/Execution) Just do what you do best: $ go test Or if you want the output to include the story: $ go test -v [Documentation](https://github.com/smartystreets/goconvey/wiki) ----------- Check out the - [GoConvey wiki](https://github.com/smartystreets/goconvey/wiki), - [![GoDoc](https://godoc.org/github.com/smartystreets/goconvey?status.png)](http://godoc.org/github.com/smartystreets/goconvey) - and the *_test.go files scattered throughout this project. [Screenshots](http://goconvey.co) ----------- For web UI and terminal screenshots, check out [the full feature tour](http://goconvey.co). ---------------------- GoConvey is brought to you by [SmartyStreets](https://github.com/smartystreets) and [several contributors](https://github.com/smartystreets/goconvey/graphs/contributors) (Thanks!). goconvey-1.6.1/convey/000077500000000000000000000000001266412531300146565ustar00rootroot00000000000000goconvey-1.6.1/convey/assertions.go000066400000000000000000000062221266412531300174010ustar00rootroot00000000000000package convey import "github.com/smartystreets/assertions" var ( ShouldEqual = assertions.ShouldEqual ShouldNotEqual = assertions.ShouldNotEqual ShouldAlmostEqual = assertions.ShouldAlmostEqual ShouldNotAlmostEqual = assertions.ShouldNotAlmostEqual ShouldResemble = assertions.ShouldResemble ShouldNotResemble = assertions.ShouldNotResemble ShouldPointTo = assertions.ShouldPointTo ShouldNotPointTo = assertions.ShouldNotPointTo ShouldBeNil = assertions.ShouldBeNil ShouldNotBeNil = assertions.ShouldNotBeNil ShouldBeTrue = assertions.ShouldBeTrue ShouldBeFalse = assertions.ShouldBeFalse ShouldBeZeroValue = assertions.ShouldBeZeroValue ShouldBeGreaterThan = assertions.ShouldBeGreaterThan ShouldBeGreaterThanOrEqualTo = assertions.ShouldBeGreaterThanOrEqualTo ShouldBeLessThan = assertions.ShouldBeLessThan ShouldBeLessThanOrEqualTo = assertions.ShouldBeLessThanOrEqualTo ShouldBeBetween = assertions.ShouldBeBetween ShouldNotBeBetween = assertions.ShouldNotBeBetween ShouldBeBetweenOrEqual = assertions.ShouldBeBetweenOrEqual ShouldNotBeBetweenOrEqual = assertions.ShouldNotBeBetweenOrEqual ShouldContain = assertions.ShouldContain ShouldNotContain = assertions.ShouldNotContain ShouldContainKey = assertions.ShouldContainKey ShouldNotContainKey = assertions.ShouldNotContainKey ShouldBeIn = assertions.ShouldBeIn ShouldNotBeIn = assertions.ShouldNotBeIn ShouldBeEmpty = assertions.ShouldBeEmpty ShouldNotBeEmpty = assertions.ShouldNotBeEmpty ShouldHaveLength = assertions.ShouldHaveLength ShouldStartWith = assertions.ShouldStartWith ShouldNotStartWith = assertions.ShouldNotStartWith ShouldEndWith = assertions.ShouldEndWith ShouldNotEndWith = assertions.ShouldNotEndWith ShouldBeBlank = assertions.ShouldBeBlank ShouldNotBeBlank = assertions.ShouldNotBeBlank ShouldContainSubstring = assertions.ShouldContainSubstring ShouldNotContainSubstring = assertions.ShouldNotContainSubstring ShouldPanic = assertions.ShouldPanic ShouldNotPanic = assertions.ShouldNotPanic ShouldPanicWith = assertions.ShouldPanicWith ShouldNotPanicWith = assertions.ShouldNotPanicWith ShouldHaveSameTypeAs = assertions.ShouldHaveSameTypeAs ShouldNotHaveSameTypeAs = assertions.ShouldNotHaveSameTypeAs ShouldImplement = assertions.ShouldImplement ShouldNotImplement = assertions.ShouldNotImplement ShouldHappenBefore = assertions.ShouldHappenBefore ShouldHappenOnOrBefore = assertions.ShouldHappenOnOrBefore ShouldHappenAfter = assertions.ShouldHappenAfter ShouldHappenOnOrAfter = assertions.ShouldHappenOnOrAfter ShouldHappenBetween = assertions.ShouldHappenBetween ShouldHappenOnOrBetween = assertions.ShouldHappenOnOrBetween ShouldNotHappenOnOrBetween = assertions.ShouldNotHappenOnOrBetween ShouldHappenWithin = assertions.ShouldHappenWithin ShouldNotHappenWithin = assertions.ShouldNotHappenWithin ShouldBeChronological = assertions.ShouldBeChronological ) goconvey-1.6.1/convey/context.go000066400000000000000000000160101266412531300166670ustar00rootroot00000000000000package convey import ( "fmt" "github.com/jtolds/gls" "github.com/smartystreets/goconvey/convey/reporting" ) type conveyErr struct { fmt string params []interface{} } func (e *conveyErr) Error() string { return fmt.Sprintf(e.fmt, e.params...) } func conveyPanic(fmt string, params ...interface{}) { panic(&conveyErr{fmt, params}) } const ( missingGoTest = `Top-level calls to Convey(...) need a reference to the *testing.T. Hint: Convey("description here", t, func() { /* notice that the second argument was the *testing.T (t)! */ }) ` extraGoTest = `Only the top-level call to Convey(...) needs a reference to the *testing.T.` noStackContext = "Convey operation made without context on goroutine stack.\n" + "Hint: Perhaps you meant to use `Convey(..., func(c C){...})` ?" differentConveySituations = "Different set of Convey statements on subsequent pass!\nDid not expect %#v." multipleIdenticalConvey = "Multiple convey suites with identical names: %#v" ) const ( failureHalt = "___FAILURE_HALT___" nodeKey = "node" ) ///////////////////////////////// Stack Context ///////////////////////////////// func getCurrentContext() *context { ctx, ok := ctxMgr.GetValue(nodeKey) if ok { return ctx.(*context) } return nil } func mustGetCurrentContext() *context { ctx := getCurrentContext() if ctx == nil { conveyPanic(noStackContext) } return ctx } //////////////////////////////////// Context //////////////////////////////////// // context magically handles all coordination of Convey's and So assertions. // // It is tracked on the stack as goroutine-local-storage with the gls package, // or explicitly if the user decides to call convey like: // // Convey(..., func(c C) { // c.So(...) // }) // // This implements the `C` interface. type context struct { reporter reporting.Reporter children map[string]*context resets []func() executedOnce bool expectChildRun *bool complete bool focus bool failureMode FailureMode } // rootConvey is the main entry point to a test suite. This is called when // there's no context in the stack already, and items must contain a `t` object, // or this panics. func rootConvey(items ...interface{}) { entry := discover(items) if entry.Test == nil { conveyPanic(missingGoTest) } expectChildRun := true ctx := &context{ reporter: buildReporter(), children: make(map[string]*context), expectChildRun: &expectChildRun, focus: entry.Focus, failureMode: defaultFailureMode.combine(entry.FailMode), } ctxMgr.SetValues(gls.Values{nodeKey: ctx}, func() { ctx.reporter.BeginStory(reporting.NewStoryReport(entry.Test)) defer ctx.reporter.EndStory() for ctx.shouldVisit() { ctx.conveyInner(entry.Situation, entry.Func) expectChildRun = true } }) } //////////////////////////////////// Methods //////////////////////////////////// func (ctx *context) SkipConvey(items ...interface{}) { ctx.Convey(items, skipConvey) } func (ctx *context) FocusConvey(items ...interface{}) { ctx.Convey(items, focusConvey) } func (ctx *context) Convey(items ...interface{}) { entry := discover(items) // we're a branch, or leaf (on the wind) if entry.Test != nil { conveyPanic(extraGoTest) } if ctx.focus && !entry.Focus { return } var inner_ctx *context if ctx.executedOnce { var ok bool inner_ctx, ok = ctx.children[entry.Situation] if !ok { conveyPanic(differentConveySituations, entry.Situation) } } else { if _, ok := ctx.children[entry.Situation]; ok { conveyPanic(multipleIdenticalConvey, entry.Situation) } inner_ctx = &context{ reporter: ctx.reporter, children: make(map[string]*context), expectChildRun: ctx.expectChildRun, focus: entry.Focus, failureMode: ctx.failureMode.combine(entry.FailMode), } ctx.children[entry.Situation] = inner_ctx } if inner_ctx.shouldVisit() { ctxMgr.SetValues(gls.Values{nodeKey: inner_ctx}, func() { inner_ctx.conveyInner(entry.Situation, entry.Func) }) } } func (ctx *context) SkipSo(stuff ...interface{}) { ctx.assertionReport(reporting.NewSkipReport()) } func (ctx *context) So(actual interface{}, assert assertion, expected ...interface{}) { if result := assert(actual, expected...); result == assertionSuccess { ctx.assertionReport(reporting.NewSuccessReport()) } else { ctx.assertionReport(reporting.NewFailureReport(result)) } } func (ctx *context) Reset(action func()) { /* TODO: Failure mode configuration */ ctx.resets = append(ctx.resets, action) } func (ctx *context) Print(items ...interface{}) (int, error) { fmt.Fprint(ctx.reporter, items...) return fmt.Print(items...) } func (ctx *context) Println(items ...interface{}) (int, error) { fmt.Fprintln(ctx.reporter, items...) return fmt.Println(items...) } func (ctx *context) Printf(format string, items ...interface{}) (int, error) { fmt.Fprintf(ctx.reporter, format, items...) return fmt.Printf(format, items...) } //////////////////////////////////// Private //////////////////////////////////// // shouldVisit returns true iff we should traverse down into a Convey. Note // that just because we don't traverse a Convey this time, doesn't mean that // we may not traverse it on a subsequent pass. func (c *context) shouldVisit() bool { return !c.complete && *c.expectChildRun } // conveyInner is the function which actually executes the user's anonymous test // function body. At this point, Convey or RootConvey has decided that this // function should actually run. func (ctx *context) conveyInner(situation string, f func(C)) { // Record/Reset state for next time. defer func() { ctx.executedOnce = true // This is only needed at the leaves, but there's no harm in also setting it // when returning from branch Convey's *ctx.expectChildRun = false }() // Set up+tear down our scope for the reporter ctx.reporter.Enter(reporting.NewScopeReport(situation)) defer ctx.reporter.Exit() // Recover from any panics in f, and assign the `complete` status for this // node of the tree. defer func() { ctx.complete = true if problem := recover(); problem != nil { if problem, ok := problem.(*conveyErr); ok { panic(problem) } if problem != failureHalt { ctx.reporter.Report(reporting.NewErrorReport(problem)) } } else { for _, child := range ctx.children { if !child.complete { ctx.complete = false return } } } }() // Resets are registered as the `f` function executes, so nil them here. // All resets are run in registration order (FIFO). ctx.resets = []func(){} defer func() { for _, r := range ctx.resets { // panics handled by the previous defer r() } }() if f == nil { // if f is nil, this was either a Convey(..., nil), or a SkipConvey ctx.reporter.Report(reporting.NewSkipReport()) } else { f(ctx) } } // assertionReport is a helper for So and SkipSo which makes the report and // then possibly panics, depending on the current context's failureMode. func (ctx *context) assertionReport(r *reporting.AssertionResult) { ctx.reporter.Report(r) if r.Failure != "" && ctx.failureMode == FailureHalts { panic(failureHalt) } } goconvey-1.6.1/convey/convey.goconvey000066400000000000000000000002741266412531300177370ustar00rootroot00000000000000#ignore -timeout=1s #-covermode=count #-coverpkg=github.com/smartystreets/goconvey/convey,github.com/smartystreets/goconvey/convey/gotest,github.com/smartystreets/goconvey/convey/reportinggoconvey-1.6.1/convey/discovery.go000066400000000000000000000046231266412531300172210ustar00rootroot00000000000000package convey type actionSpecifier uint8 const ( noSpecifier actionSpecifier = iota skipConvey focusConvey ) type suite struct { Situation string Test t Focus bool Func func(C) // nil means skipped FailMode FailureMode } func newSuite(situation string, failureMode FailureMode, f func(C), test t, specifier actionSpecifier) *suite { ret := &suite{ Situation: situation, Test: test, Func: f, FailMode: failureMode, } switch specifier { case skipConvey: ret.Func = nil case focusConvey: ret.Focus = true } return ret } func discover(items []interface{}) *suite { name, items := parseName(items) test, items := parseGoTest(items) failure, items := parseFailureMode(items) action, items := parseAction(items) specifier, items := parseSpecifier(items) if len(items) != 0 { conveyPanic(parseError) } return newSuite(name, failure, action, test, specifier) } func item(items []interface{}) interface{} { if len(items) == 0 { conveyPanic(parseError) } return items[0] } func parseName(items []interface{}) (string, []interface{}) { if name, parsed := item(items).(string); parsed { return name, items[1:] } conveyPanic(parseError) panic("never get here") } func parseGoTest(items []interface{}) (t, []interface{}) { if test, parsed := item(items).(t); parsed { return test, items[1:] } return nil, items } func parseFailureMode(items []interface{}) (FailureMode, []interface{}) { if mode, parsed := item(items).(FailureMode); parsed { return mode, items[1:] } return FailureInherits, items } func parseAction(items []interface{}) (func(C), []interface{}) { switch x := item(items).(type) { case nil: return nil, items[1:] case func(C): return x, items[1:] case func(): return func(C) { x() }, items[1:] } conveyPanic(parseError) panic("never get here") } func parseSpecifier(items []interface{}) (actionSpecifier, []interface{}) { if len(items) == 0 { return noSpecifier, items } if spec, ok := items[0].(actionSpecifier); ok { return spec, items[1:] } conveyPanic(parseError) panic("never get here") } // This interface allows us to pass the *testing.T struct // throughout the internals of this package without ever // having to import the "testing" package. type t interface { Fail() } const parseError = "You must provide a name (string), then a *testing.T (if in outermost scope), an optional FailureMode, and then an action (func())." goconvey-1.6.1/convey/doc.go000066400000000000000000000207421266412531300157570ustar00rootroot00000000000000// Package convey contains all of the public-facing entry points to this project. // This means that it should never be required of the user to import any other // packages from this project as they serve internal purposes. package convey import "github.com/smartystreets/goconvey/convey/reporting" ////////////////////////////////// suite ////////////////////////////////// // C is the Convey context which you can optionally obtain in your action // by calling Convey like: // // Convey(..., func(c C) { // ... // }) // // See the documentation on Convey for more details. // // All methods in this context behave identically to the global functions of the // same name in this package. type C interface { Convey(items ...interface{}) SkipConvey(items ...interface{}) FocusConvey(items ...interface{}) So(actual interface{}, assert assertion, expected ...interface{}) SkipSo(stuff ...interface{}) Reset(action func()) Println(items ...interface{}) (int, error) Print(items ...interface{}) (int, error) Printf(format string, items ...interface{}) (int, error) } // Convey is the method intended for use when declaring the scopes of // a specification. Each scope has a description and a func() which may contain // other calls to Convey(), Reset() or Should-style assertions. Convey calls can // be nested as far as you see fit. // // IMPORTANT NOTE: The top-level Convey() within a Test method // must conform to the following signature: // // Convey(description string, t *testing.T, action func()) // // All other calls should look like this (no need to pass in *testing.T): // // Convey(description string, action func()) // // Don't worry, goconvey will panic if you get it wrong so you can fix it. // // Additionally, you may explicitly obtain access to the Convey context by doing: // // Convey(description string, action func(c C)) // // You may need to do this if you want to pass the context through to a // goroutine, or to close over the context in a handler to a library which // calls your handler in a goroutine (httptest comes to mind). // // All Convey()-blocks also accept an optional parameter of FailureMode which sets // how goconvey should treat failures for So()-assertions in the block and // nested blocks. See the constants in this file for the available options. // // By default it will inherit from its parent block and the top-level blocks // default to the FailureHalts setting. // // This parameter is inserted before the block itself: // // Convey(description string, t *testing.T, mode FailureMode, action func()) // Convey(description string, mode FailureMode, action func()) // // See the examples package for, well, examples. func Convey(items ...interface{}) { if ctx := getCurrentContext(); ctx == nil { rootConvey(items...) } else { ctx.Convey(items...) } } // SkipConvey is analagous to Convey except that the scope is not executed // (which means that child scopes defined within this scope are not run either). // The reporter will be notified that this step was skipped. func SkipConvey(items ...interface{}) { Convey(append(items, skipConvey)...) } // FocusConvey is has the inverse effect of SkipConvey. If the top-level // Convey is changed to `FocusConvey`, only nested scopes that are defined // with FocusConvey will be run. The rest will be ignored completely. This // is handy when debugging a large suite that runs a misbehaving function // repeatedly as you can disable all but one of that function // without swaths of `SkipConvey` calls, just a targeted chain of calls // to FocusConvey. func FocusConvey(items ...interface{}) { Convey(append(items, focusConvey)...) } // Reset registers a cleanup function to be run after each Convey() // in the same scope. See the examples package for a simple use case. func Reset(action func()) { mustGetCurrentContext().Reset(action) } /////////////////////////////////// Assertions /////////////////////////////////// // assertion is an alias for a function with a signature that the convey.So() // method can handle. Any future or custom assertions should conform to this // method signature. The return value should be an empty string if the assertion // passes and a well-formed failure message if not. type assertion func(actual interface{}, expected ...interface{}) string const assertionSuccess = "" // So is the means by which assertions are made against the system under test. // The majority of exported names in the assertions package begin with the word // 'Should' and describe how the first argument (actual) should compare with any // of the final (expected) arguments. How many final arguments are accepted // depends on the particular assertion that is passed in as the assert argument. // See the examples package for use cases and the assertions package for // documentation on specific assertion methods. A failing assertion will // cause t.Fail() to be invoked--you should never call this method (or other // failure-inducing methods) in your test code. Leave that to GoConvey. func So(actual interface{}, assert assertion, expected ...interface{}) { mustGetCurrentContext().So(actual, assert, expected...) } // SkipSo is analagous to So except that the assertion that would have been passed // to So is not executed and the reporter is notified that the assertion was skipped. func SkipSo(stuff ...interface{}) { mustGetCurrentContext().SkipSo() } // FailureMode is a type which determines how the So() blocks should fail // if their assertion fails. See constants further down for acceptable values type FailureMode string const ( // FailureContinues is a failure mode which prevents failing // So()-assertions from halting Convey-block execution, instead // allowing the test to continue past failing So()-assertions. FailureContinues FailureMode = "continue" // FailureHalts is the default setting for a top-level Convey()-block // and will cause all failing So()-assertions to halt further execution // in that test-arm and continue on to the next arm. FailureHalts FailureMode = "halt" // FailureInherits is the default setting for failure-mode, it will // default to the failure-mode of the parent block. You should never // need to specify this mode in your tests.. FailureInherits FailureMode = "inherits" ) func (f FailureMode) combine(other FailureMode) FailureMode { if other == FailureInherits { return f } return other } var defaultFailureMode FailureMode = FailureHalts // SetDefaultFailureMode allows you to specify the default failure mode // for all Convey blocks. It is meant to be used in an init function to // allow the default mode to be changdd across all tests for an entire packgae // but it can be used anywhere. func SetDefaultFailureMode(mode FailureMode) { if mode == FailureContinues || mode == FailureHalts { defaultFailureMode = mode } else { panic("You may only use the constants named 'FailureContinues' and 'FailureHalts' as default failure modes.") } } //////////////////////////////////// Print functions //////////////////////////////////// // Print is analogous to fmt.Print (and it even calls fmt.Print). It ensures that // output is aligned with the corresponding scopes in the web UI. func Print(items ...interface{}) (written int, err error) { return mustGetCurrentContext().Print(items...) } // Print is analogous to fmt.Println (and it even calls fmt.Println). It ensures that // output is aligned with the corresponding scopes in the web UI. func Println(items ...interface{}) (written int, err error) { return mustGetCurrentContext().Println(items...) } // Print is analogous to fmt.Printf (and it even calls fmt.Printf). It ensures that // output is aligned with the corresponding scopes in the web UI. func Printf(format string, items ...interface{}) (written int, err error) { return mustGetCurrentContext().Printf(format, items...) } /////////////////////////////////////////////////////////////////////////////// // SuppressConsoleStatistics prevents automatic printing of console statistics. // Calling PrintConsoleStatistics explicitly will force printing of statistics. func SuppressConsoleStatistics() { reporting.SuppressConsoleStatistics() } // ConsoleStatistics may be called at any time to print assertion statistics. // Generally, the best place to do this would be in a TestMain function, // after all tests have been run. Something like this: // // func TestMain(m *testing.M) { // convey.SuppressConsoleStatistics() // result := m.Run() // convey.PrintConsoleStatistics() // os.Exit(result) // } // func PrintConsoleStatistics() { reporting.PrintConsoleStatistics() } goconvey-1.6.1/convey/focused_execution_test.go000066400000000000000000000021131266412531300217540ustar00rootroot00000000000000package convey import "testing" func TestFocusOnlyAtTopLevel(t *testing.T) { output := prepare() FocusConvey("hi", t, func() { output += "done" }) expectEqual(t, "done", output) } func TestFocus(t *testing.T) { output := prepare() FocusConvey("hi", t, func() { output += "1" Convey("bye", func() { output += "2" }) }) expectEqual(t, "1", output) } func TestNestedFocus(t *testing.T) { output := prepare() FocusConvey("hi", t, func() { output += "1" Convey("This shouldn't run", func() { output += "boink!" }) FocusConvey("This should run", func() { output += "2" FocusConvey("The should run too", func() { output += "3" }) Convey("The should NOT run", func() { output += "blah blah blah!" }) }) }) expectEqual(t, "123", output) } func TestForgotTopLevelFocus(t *testing.T) { output := prepare() Convey("1", t, func() { output += "1" FocusConvey("This will be run because the top-level lacks Focus", func() { output += "2" }) Convey("3", func() { output += "3" }) }) expectEqual(t, "1213", output) } goconvey-1.6.1/convey/gotest/000077500000000000000000000000001266412531300161635ustar00rootroot00000000000000goconvey-1.6.1/convey/gotest/doc_test.go000066400000000000000000000000171266412531300203140ustar00rootroot00000000000000package gotest goconvey-1.6.1/convey/gotest/utils.go000066400000000000000000000014771266412531300176630ustar00rootroot00000000000000// Package gotest contains internal functionality. Although this package // contains one or more exported names it is not intended for public // consumption. See the examples package for how to use this project. package gotest import ( "runtime" "strings" ) func ResolveExternalCaller() (file string, line int, name string) { var caller_id uintptr callers := runtime.Callers(0, callStack) for x := 0; x < callers; x++ { caller_id, file, line, _ = runtime.Caller(x) if strings.HasSuffix(file, "_test.go") || strings.HasSuffix(file, "_tests.go") { name = runtime.FuncForPC(caller_id).Name() return } } file, line, name = "", -1, "" return // panic? } const maxStackDepth = 100 // This had better be enough... var callStack []uintptr = make([]uintptr, maxStackDepth, maxStackDepth) goconvey-1.6.1/convey/init.go000066400000000000000000000037021266412531300161520ustar00rootroot00000000000000package convey import ( "flag" "os" "github.com/jtolds/gls" "github.com/smartystreets/assertions" "github.com/smartystreets/goconvey/convey/reporting" ) func init() { assertions.GoConveyMode(true) declareFlags() ctxMgr = gls.NewContextManager() } func declareFlags() { flag.BoolVar(&json, "convey-json", false, "When true, emits results in JSON blocks. Default: 'false'") flag.BoolVar(&silent, "convey-silent", false, "When true, all output from GoConvey is suppressed.") flag.BoolVar(&story, "convey-story", false, "When true, emits story output, otherwise emits dot output. When not provided, this flag mirros the value of the '-test.v' flag") if noStoryFlagProvided() { story = verboseEnabled } // FYI: flag.Parse() is called from the testing package. } func noStoryFlagProvided() bool { return !story && !storyDisabled } func buildReporter() reporting.Reporter { selectReporter := os.Getenv("GOCONVEY_REPORTER") switch { case testReporter != nil: return testReporter case json || selectReporter == "json": return reporting.BuildJsonReporter() case silent || selectReporter == "silent": return reporting.BuildSilentReporter() case selectReporter == "dot": // Story is turned on when verbose is set, so we need to check for dot reporter first. return reporting.BuildDotReporter() case story || selectReporter == "story": return reporting.BuildStoryReporter() default: return reporting.BuildDotReporter() } } var ( ctxMgr *gls.ContextManager // only set by internal tests testReporter reporting.Reporter ) var ( json bool silent bool story bool verboseEnabled = flagFound("-test.v=true") storyDisabled = flagFound("-story=false") ) // flagFound parses the command line args manually for flags defined in other // packages. Like the '-v' flag from the "testing" package, for instance. func flagFound(flagValue string) bool { for _, arg := range os.Args { if arg == flagValue { return true } } return false } goconvey-1.6.1/convey/isolated_execution_test.go000066400000000000000000000312561266412531300221420ustar00rootroot00000000000000package convey import ( "strconv" "testing" "time" ) func TestSingleScope(t *testing.T) { output := prepare() Convey("hi", t, func() { output += "done" }) expectEqual(t, "done", output) } func TestSingleScopeWithMultipleConveys(t *testing.T) { output := prepare() Convey("1", t, func() { output += "1" }) Convey("2", t, func() { output += "2" }) expectEqual(t, "12", output) } func TestNestedScopes(t *testing.T) { output := prepare() Convey("a", t, func() { output += "a " Convey("bb", func() { output += "bb " Convey("ccc", func() { output += "ccc | " }) }) }) expectEqual(t, "a bb ccc | ", output) } func TestNestedScopesWithIsolatedExecution(t *testing.T) { output := prepare() Convey("a", t, func() { output += "a " Convey("aa", func() { output += "aa " Convey("aaa", func() { output += "aaa | " }) Convey("aaa1", func() { output += "aaa1 | " }) }) Convey("ab", func() { output += "ab " Convey("abb", func() { output += "abb | " }) }) }) expectEqual(t, "a aa aaa | a aa aaa1 | a ab abb | ", output) } func TestSingleScopeWithConveyAndNestedReset(t *testing.T) { output := prepare() Convey("1", t, func() { output += "1" Reset(func() { output += "a" }) }) expectEqual(t, "1a", output) } func TestPanicingReset(t *testing.T) { output := prepare() Convey("1", t, func() { output += "1" Reset(func() { panic("nooo") }) Convey("runs since the reset hasn't yet", func() { output += "a" }) Convey("but this doesnt", func() { output += "nope" }) }) expectEqual(t, "1a", output) } func TestSingleScopeWithMultipleRegistrationsAndReset(t *testing.T) { output := prepare() Convey("reset after each nested convey", t, func() { Convey("first output", func() { output += "1" }) Convey("second output", func() { output += "2" }) Reset(func() { output += "a" }) }) expectEqual(t, "1a2a", output) } func TestSingleScopeWithMultipleRegistrationsAndMultipleResets(t *testing.T) { output := prepare() Convey("each reset is run at end of each nested convey", t, func() { Convey("1", func() { output += "1" }) Convey("2", func() { output += "2" }) Reset(func() { output += "a" }) Reset(func() { output += "b" }) }) expectEqual(t, "1ab2ab", output) } func Test_Failure_AtHigherLevelScopePreventsChildScopesFromRunning(t *testing.T) { output := prepare() Convey("This step fails", t, func() { So(1, ShouldEqual, 2) Convey("this should NOT be executed", func() { output += "a" }) }) expectEqual(t, "", output) } func Test_Panic_AtHigherLevelScopePreventsChildScopesFromRunning(t *testing.T) { output := prepare() Convey("This step panics", t, func() { Convey("this happens, because the panic didn't happen yet", func() { output += "1" }) output += "a" Convey("this should NOT be executed", func() { output += "2" }) output += "b" panic("Hi") output += "nope" }) expectEqual(t, "1ab", output) } func Test_Panic_InChildScopeDoes_NOT_PreventExecutionOfSiblingScopes(t *testing.T) { output := prepare() Convey("This is the parent", t, func() { Convey("This step panics", func() { panic("Hi") output += "1" }) Convey("This sibling should execute", func() { output += "2" }) }) expectEqual(t, "2", output) } func Test_Failure_InChildScopeDoes_NOT_PreventExecutionOfSiblingScopes(t *testing.T) { output := prepare() Convey("This is the parent", t, func() { Convey("This step fails", func() { So(1, ShouldEqual, 2) output += "1" }) Convey("This sibling should execute", func() { output += "2" }) }) expectEqual(t, "2", output) } func TestResetsAreAlwaysExecutedAfterScope_Panics(t *testing.T) { output := prepare() Convey("This is the parent", t, func() { Convey("This step panics", func() { panic("Hi") output += "1" }) Convey("This sibling step does not panic", func() { output += "a" Reset(func() { output += "b" }) }) Reset(func() { output += "2" }) }) expectEqual(t, "2ab2", output) } func TestResetsAreAlwaysExecutedAfterScope_Failures(t *testing.T) { output := prepare() Convey("This is the parent", t, func() { Convey("This step fails", func() { So(1, ShouldEqual, 2) output += "1" }) Convey("This sibling step does not fail", func() { output += "a" Reset(func() { output += "b" }) }) Reset(func() { output += "2" }) }) expectEqual(t, "2ab2", output) } func TestSkipTopLevel(t *testing.T) { output := prepare() SkipConvey("hi", t, func() { output += "This shouldn't be executed!" }) expectEqual(t, "", output) } func TestSkipNestedLevel(t *testing.T) { output := prepare() Convey("hi", t, func() { output += "yes" SkipConvey("bye", func() { output += "no" }) }) expectEqual(t, "yes", output) } func TestSkipNestedLevelSkipsAllChildLevels(t *testing.T) { output := prepare() Convey("hi", t, func() { output += "yes" SkipConvey("bye", func() { output += "no" Convey("byebye", func() { output += "no-no" }) }) }) expectEqual(t, "yes", output) } func TestIterativeConveys(t *testing.T) { output := prepare() Convey("Test", t, func() { for x := 0; x < 10; x++ { y := strconv.Itoa(x) Convey(y, func() { output += y }) } }) expectEqual(t, "0123456789", output) } func TestClosureVariables(t *testing.T) { output := prepare() i := 0 Convey("A", t, func() { i = i + 1 j := i output += "A" + strconv.Itoa(i) + " " Convey("B", func() { k := j j = j + 1 output += "B" + strconv.Itoa(k) + " " Convey("C", func() { output += "C" + strconv.Itoa(k) + strconv.Itoa(j) + " " }) Convey("D", func() { output += "D" + strconv.Itoa(k) + strconv.Itoa(j) + " " }) }) Convey("C", func() { output += "C" + strconv.Itoa(j) + " " }) }) output += "D" + strconv.Itoa(i) + " " expectEqual(t, "A1 B1 C12 A2 B2 D23 A3 C3 D3 ", output) } func TestClosureVariablesWithReset(t *testing.T) { output := prepare() i := 0 Convey("A", t, func() { i = i + 1 j := i output += "A" + strconv.Itoa(i) + " " Reset(func() { output += "R" + strconv.Itoa(i) + strconv.Itoa(j) + " " }) Convey("B", func() { output += "B" + strconv.Itoa(j) + " " }) Convey("C", func() { output += "C" + strconv.Itoa(j) + " " }) }) output += "D" + strconv.Itoa(i) + " " expectEqual(t, "A1 B1 R11 A2 C2 R22 D2 ", output) } func TestWrappedSimple(t *testing.T) { prepare() output := resetTestString{""} Convey("A", t, func() { func() { output.output += "A " Convey("B", func() { output.output += "B " Convey("C", func() { output.output += "C " }) }) Convey("D", func() { output.output += "D " }) }() }) expectEqual(t, "A B C A D ", output.output) } type resetTestString struct { output string } func addReset(o *resetTestString, f func()) func() { return func() { Reset(func() { o.output += "R " }) f() } } func TestWrappedReset(t *testing.T) { prepare() output := resetTestString{""} Convey("A", t, addReset(&output, func() { output.output += "A " Convey("B", func() { output.output += "B " }) Convey("C", func() { output.output += "C " }) })) expectEqual(t, "A B R A C R ", output.output) } func TestWrappedReset2(t *testing.T) { prepare() output := resetTestString{""} Convey("A", t, func() { Reset(func() { output.output += "R " }) func() { output.output += "A " Convey("B", func() { output.output += "B " Convey("C", func() { output.output += "C " }) }) Convey("D", func() { output.output += "D " }) }() }) expectEqual(t, "A B C R A D R ", output.output) } func TestInfiniteLoopWithTrailingFail(t *testing.T) { done := make(chan int) go func() { Convey("This fails", t, func() { Convey("and this is run", func() { So(true, ShouldEqual, true) }) /* And this prevents the whole block to be marked as run */ So(false, ShouldEqual, true) }) done <- 1 }() select { case <-done: return case <-time.After(1 * time.Millisecond): t.Fail() } } func TestOutermostResetInvokedForGrandchildren(t *testing.T) { output := prepare() Convey("A", t, func() { output += "A " Reset(func() { output += "rA " }) Convey("B", func() { output += "B " Reset(func() { output += "rB " }) Convey("C", func() { output += "C " Reset(func() { output += "rC " }) }) Convey("D", func() { output += "D " Reset(func() { output += "rD " }) }) }) }) expectEqual(t, "A B C rC rB rA A B D rD rB rA ", output) } func TestFailureOption(t *testing.T) { output := prepare() Convey("A", t, FailureHalts, func() { output += "A " So(true, ShouldEqual, true) output += "B " So(false, ShouldEqual, true) output += "C " }) expectEqual(t, "A B ", output) } func TestFailureOption2(t *testing.T) { output := prepare() Convey("A", t, func() { output += "A " So(true, ShouldEqual, true) output += "B " So(false, ShouldEqual, true) output += "C " }) expectEqual(t, "A B ", output) } func TestFailureOption3(t *testing.T) { output := prepare() Convey("A", t, FailureContinues, func() { output += "A " So(true, ShouldEqual, true) output += "B " So(false, ShouldEqual, true) output += "C " }) expectEqual(t, "A B C ", output) } func TestFailureOptionInherit(t *testing.T) { output := prepare() Convey("A", t, FailureContinues, func() { output += "A1 " So(false, ShouldEqual, true) output += "A2 " Convey("B", func() { output += "B1 " So(true, ShouldEqual, true) output += "B2 " So(false, ShouldEqual, true) output += "B3 " }) }) expectEqual(t, "A1 A2 B1 B2 B3 ", output) } func TestFailureOptionInherit2(t *testing.T) { output := prepare() Convey("A", t, FailureHalts, func() { output += "A1 " So(false, ShouldEqual, true) output += "A2 " Convey("B", func() { output += "A1 " So(true, ShouldEqual, true) output += "A2 " So(false, ShouldEqual, true) output += "A3 " }) }) expectEqual(t, "A1 ", output) } func TestFailureOptionInherit3(t *testing.T) { output := prepare() Convey("A", t, FailureHalts, func() { output += "A1 " So(true, ShouldEqual, true) output += "A2 " Convey("B", func() { output += "B1 " So(true, ShouldEqual, true) output += "B2 " So(false, ShouldEqual, true) output += "B3 " }) }) expectEqual(t, "A1 A2 B1 B2 ", output) } func TestFailureOptionNestedOverride(t *testing.T) { output := prepare() Convey("A", t, FailureContinues, func() { output += "A " So(false, ShouldEqual, true) output += "B " Convey("C", FailureHalts, func() { output += "C " So(true, ShouldEqual, true) output += "D " So(false, ShouldEqual, true) output += "E " }) }) expectEqual(t, "A B C D ", output) } func TestFailureOptionNestedOverride2(t *testing.T) { output := prepare() Convey("A", t, FailureHalts, func() { output += "A " So(true, ShouldEqual, true) output += "B " Convey("C", FailureContinues, func() { output += "C " So(true, ShouldEqual, true) output += "D " So(false, ShouldEqual, true) output += "E " }) }) expectEqual(t, "A B C D E ", output) } func TestMultipleInvocationInheritance(t *testing.T) { output := prepare() Convey("A", t, FailureHalts, func() { output += "A1 " So(true, ShouldEqual, true) output += "A2 " Convey("B", FailureContinues, func() { output += "B1 " So(true, ShouldEqual, true) output += "B2 " So(false, ShouldEqual, true) output += "B3 " }) Convey("C", func() { output += "C1 " So(true, ShouldEqual, true) output += "C2 " So(false, ShouldEqual, true) output += "C3 " }) }) expectEqual(t, "A1 A2 B1 B2 B3 A1 A2 C1 C2 ", output) } func TestMultipleInvocationInheritance2(t *testing.T) { output := prepare() Convey("A", t, FailureContinues, func() { output += "A1 " So(true, ShouldEqual, true) output += "A2 " So(false, ShouldEqual, true) output += "A3 " Convey("B", FailureHalts, func() { output += "B1 " So(true, ShouldEqual, true) output += "B2 " So(false, ShouldEqual, true) output += "B3 " }) Convey("C", func() { output += "C1 " So(true, ShouldEqual, true) output += "C2 " So(false, ShouldEqual, true) output += "C3 " }) }) expectEqual(t, "A1 A2 A3 B1 B2 A1 A2 A3 C1 C2 C3 ", output) } func TestSetDefaultFailureMode(t *testing.T) { output := prepare() SetDefaultFailureMode(FailureContinues) // the default is normally FailureHalts defer SetDefaultFailureMode(FailureHalts) Convey("A", t, func() { output += "A1 " So(true, ShouldBeFalse) output += "A2 " }) expectEqual(t, "A1 A2 ", output) } func prepare() string { testReporter = newNilReporter() return "" } goconvey-1.6.1/convey/nilReporter.go000066400000000000000000000012021266412531300175050ustar00rootroot00000000000000package convey import ( "github.com/smartystreets/goconvey/convey/reporting" ) type nilReporter struct{} func (self *nilReporter) BeginStory(story *reporting.StoryReport) {} func (self *nilReporter) Enter(scope *reporting.ScopeReport) {} func (self *nilReporter) Report(report *reporting.AssertionResult) {} func (self *nilReporter) Exit() {} func (self *nilReporter) EndStory() {} func (self *nilReporter) Write(p []byte) (int, error) { return len(p), nil } func newNilReporter() *nilReporter { return &nilReporter{} } goconvey-1.6.1/convey/reporting/000077500000000000000000000000001266412531300166675ustar00rootroot00000000000000goconvey-1.6.1/convey/reporting/console.go000066400000000000000000000003221266412531300206550ustar00rootroot00000000000000package reporting import ( "fmt" "io" ) type console struct{} func (self *console) Write(p []byte) (n int, err error) { return fmt.Print(string(p)) } func NewConsole() io.Writer { return new(console) } goconvey-1.6.1/convey/reporting/doc.go000066400000000000000000000004001266412531300177550ustar00rootroot00000000000000// Package reporting contains internal functionality related // to console reporting and output. Although this package has // exported names is not intended for public consumption. See the // examples package for how to use this project. package reporting goconvey-1.6.1/convey/reporting/dot.go000066400000000000000000000014501266412531300200040ustar00rootroot00000000000000package reporting import "fmt" type dot struct{ out *Printer } func (self *dot) BeginStory(story *StoryReport) {} func (self *dot) Enter(scope *ScopeReport) {} func (self *dot) Report(report *AssertionResult) { if report.Error != nil { fmt.Print(redColor) self.out.Insert(dotError) } else if report.Failure != "" { fmt.Print(yellowColor) self.out.Insert(dotFailure) } else if report.Skipped { fmt.Print(yellowColor) self.out.Insert(dotSkip) } else { fmt.Print(greenColor) self.out.Insert(dotSuccess) } fmt.Print(resetColor) } func (self *dot) Exit() {} func (self *dot) EndStory() {} func (self *dot) Write(content []byte) (written int, err error) { return len(content), nil // no-op } func NewDotReporter(out *Printer) *dot { self := new(dot) self.out = out return self } goconvey-1.6.1/convey/reporting/dot_test.go000066400000000000000000000015721266412531300210500ustar00rootroot00000000000000package reporting import ( "errors" "testing" ) func TestDotReporterAssertionPrinting(t *testing.T) { monochrome() file := newMemoryFile() printer := NewPrinter(file) reporter := NewDotReporter(printer) reporter.Report(NewSuccessReport()) reporter.Report(NewFailureReport("failed")) reporter.Report(NewErrorReport(errors.New("error"))) reporter.Report(NewSkipReport()) expected := dotSuccess + dotFailure + dotError + dotSkip if file.buffer != expected { t.Errorf("\nExpected: '%s'\nActual: '%s'", expected, file.buffer) } } func TestDotReporterOnlyReportsAssertions(t *testing.T) { monochrome() file := newMemoryFile() printer := NewPrinter(file) reporter := NewDotReporter(printer) reporter.BeginStory(nil) reporter.Enter(nil) reporter.Exit() reporter.EndStory() if file.buffer != "" { t.Errorf("\nExpected: '(blank)'\nActual: '%s'", file.buffer) } } goconvey-1.6.1/convey/reporting/gotest.go000066400000000000000000000012421266412531300205220ustar00rootroot00000000000000package reporting type gotestReporter struct{ test T } func (self *gotestReporter) BeginStory(story *StoryReport) { self.test = story.Test } func (self *gotestReporter) Enter(scope *ScopeReport) {} func (self *gotestReporter) Report(r *AssertionResult) { if !passed(r) { self.test.Fail() } } func (self *gotestReporter) Exit() {} func (self *gotestReporter) EndStory() { self.test = nil } func (self *gotestReporter) Write(content []byte) (written int, err error) { return len(content), nil // no-op } func NewGoTestReporter() *gotestReporter { return new(gotestReporter) } func passed(r *AssertionResult) bool { return r.Error == nil && r.Failure == "" } goconvey-1.6.1/convey/reporting/gotest_test.go000066400000000000000000000030471266412531300215660ustar00rootroot00000000000000package reporting import "testing" func TestReporterReceivesSuccessfulReport(t *testing.T) { reporter := NewGoTestReporter() test := new(fakeTest) reporter.BeginStory(NewStoryReport(test)) reporter.Report(NewSuccessReport()) if test.failed { t.Errorf("Should have have marked test as failed--the report reflected success.") } } func TestReporterReceivesFailureReport(t *testing.T) { reporter := NewGoTestReporter() test := new(fakeTest) reporter.BeginStory(NewStoryReport(test)) reporter.Report(NewFailureReport("This is a failure.")) if !test.failed { t.Errorf("Test should have been marked as failed (but it wasn't).") } } func TestReporterReceivesErrorReport(t *testing.T) { reporter := NewGoTestReporter() test := new(fakeTest) reporter.BeginStory(NewStoryReport(test)) reporter.Report(NewErrorReport("This is an error.")) if !test.failed { t.Errorf("Test should have been marked as failed (but it wasn't).") } } func TestReporterIsResetAtTheEndOfTheStory(t *testing.T) { defer catch(t) reporter := NewGoTestReporter() test := new(fakeTest) reporter.BeginStory(NewStoryReport(test)) reporter.EndStory() reporter.Report(NewSuccessReport()) } func TestReporterNoopMethods(t *testing.T) { reporter := NewGoTestReporter() reporter.Enter(NewScopeReport("title")) reporter.Exit() } func catch(t *testing.T) { if r := recover(); r != nil { t.Log("Getting to this point means we've passed (because we caught a panic appropriately).") } } type fakeTest struct { failed bool } func (self *fakeTest) Fail() { self.failed = true } goconvey-1.6.1/convey/reporting/init.go000066400000000000000000000042561266412531300201700ustar00rootroot00000000000000package reporting import ( "os" "runtime" "strings" ) func init() { if !isColorableTerminal() { monochrome() } if runtime.GOOS == "windows" { success, failure, error_ = dotSuccess, dotFailure, dotError } } func BuildJsonReporter() Reporter { out := NewPrinter(NewConsole()) return NewReporters( NewGoTestReporter(), NewJsonReporter(out)) } func BuildDotReporter() Reporter { out := NewPrinter(NewConsole()) return NewReporters( NewGoTestReporter(), NewDotReporter(out), NewProblemReporter(out), consoleStatistics) } func BuildStoryReporter() Reporter { out := NewPrinter(NewConsole()) return NewReporters( NewGoTestReporter(), NewStoryReporter(out), NewProblemReporter(out), consoleStatistics) } func BuildSilentReporter() Reporter { out := NewPrinter(NewConsole()) return NewReporters( NewGoTestReporter(), NewSilentProblemReporter(out)) } var ( newline = "\n" success = "✔" failure = "✘" error_ = "🔥" skip = "⚠" dotSuccess = "." dotFailure = "x" dotError = "E" dotSkip = "S" errorTemplate = "* %s \nLine %d: - %v \n%s\n" failureTemplate = "* %s \nLine %d:\n%s\n" ) var ( greenColor = "\033[32m" yellowColor = "\033[33m" redColor = "\033[31m" resetColor = "\033[0m" ) var consoleStatistics = NewStatisticsReporter(NewPrinter(NewConsole())) func SuppressConsoleStatistics() { consoleStatistics.Suppress() } func PrintConsoleStatistics() { consoleStatistics.PrintSummary() } // QuiteMode disables all console output symbols. This is only meant to be used // for tests that are internal to goconvey where the output is distracting or // otherwise not needed in the test output. func QuietMode() { success, failure, error_, skip, dotSuccess, dotFailure, dotError, dotSkip = "", "", "", "", "", "", "", "" } func monochrome() { greenColor, yellowColor, redColor, resetColor = "", "", "", "" } func isColorableTerminal() bool { return strings.Contains(os.Getenv("TERM"), "color") } // This interface allows us to pass the *testing.T struct // throughout the internals of this tool without ever // having to import the "testing" package. type T interface { Fail() } goconvey-1.6.1/convey/reporting/json.go000066400000000000000000000042671266412531300202000ustar00rootroot00000000000000// TODO: under unit test package reporting import ( "bytes" "encoding/json" "fmt" "strings" ) type JsonReporter struct { out *Printer currentKey []string current *ScopeResult index map[string]*ScopeResult scopes []*ScopeResult } func (self *JsonReporter) depth() int { return len(self.currentKey) } func (self *JsonReporter) BeginStory(story *StoryReport) {} func (self *JsonReporter) Enter(scope *ScopeReport) { self.currentKey = append(self.currentKey, scope.Title) ID := strings.Join(self.currentKey, "|") if _, found := self.index[ID]; !found { next := newScopeResult(scope.Title, self.depth(), scope.File, scope.Line) self.scopes = append(self.scopes, next) self.index[ID] = next } self.current = self.index[ID] } func (self *JsonReporter) Report(report *AssertionResult) { self.current.Assertions = append(self.current.Assertions, report) } func (self *JsonReporter) Exit() { self.currentKey = self.currentKey[:len(self.currentKey)-1] } func (self *JsonReporter) EndStory() { self.report() self.reset() } func (self *JsonReporter) report() { scopes := []string{} for _, scope := range self.scopes { serialized, err := json.Marshal(scope) if err != nil { self.out.Println(jsonMarshalFailure) panic(err) } var buffer bytes.Buffer json.Indent(&buffer, serialized, "", " ") scopes = append(scopes, buffer.String()) } self.out.Print(fmt.Sprintf("%s\n%s,\n%s\n", OpenJson, strings.Join(scopes, ","), CloseJson)) } func (self *JsonReporter) reset() { self.scopes = []*ScopeResult{} self.index = map[string]*ScopeResult{} self.currentKey = nil } func (self *JsonReporter) Write(content []byte) (written int, err error) { self.current.Output += string(content) return len(content), nil } func NewJsonReporter(out *Printer) *JsonReporter { self := new(JsonReporter) self.out = out self.reset() return self } const OpenJson = ">->->OPEN-JSON->->->" // "⌦" const CloseJson = "<-<-<-CLOSE-JSON<-<-<" // "⌫" const jsonMarshalFailure = ` GOCONVEY_JSON_MARSHALL_FAILURE: There was an error when attempting to convert test results to JSON. Please file a bug report and reference the code that caused this failure if possible. Here's the panic: ` goconvey-1.6.1/convey/reporting/printer.go000066400000000000000000000022701266412531300207020ustar00rootroot00000000000000package reporting import ( "fmt" "io" "strings" ) type Printer struct { out io.Writer prefix string } func (self *Printer) Println(message string, values ...interface{}) { formatted := self.format(message, values...) + newline self.out.Write([]byte(formatted)) } func (self *Printer) Print(message string, values ...interface{}) { formatted := self.format(message, values...) self.out.Write([]byte(formatted)) } func (self *Printer) Insert(text string) { self.out.Write([]byte(text)) } func (self *Printer) format(message string, values ...interface{}) string { var formatted string if len(values) == 0 { formatted = self.prefix + message } else { formatted = self.prefix + fmt.Sprintf(message, values...) } indented := strings.Replace(formatted, newline, newline+self.prefix, -1) return strings.TrimRight(indented, space) } func (self *Printer) Indent() { self.prefix += pad } func (self *Printer) Dedent() { if len(self.prefix) >= padLength { self.prefix = self.prefix[:len(self.prefix)-padLength] } } func NewPrinter(out io.Writer) *Printer { self := new(Printer) self.out = out return self } const space = " " const pad = space + space const padLength = len(pad) goconvey-1.6.1/convey/reporting/printer_test.go000066400000000000000000000075331266412531300217500ustar00rootroot00000000000000package reporting import "testing" func TestPrint(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const expected = "Hello, World!" printer.Print(expected) if file.buffer != expected { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintFormat(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) template := "Hi, %s" name := "Ralph" expected := "Hi, Ralph" printer.Print(template, name) if file.buffer != expected { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintPreservesEncodedStrings(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const expected = "= -> %3D" printer.Print(expected) if file.buffer != expected { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintln(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const expected = "Hello, World!" printer.Println(expected) if file.buffer != expected+"\n" { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintlnFormat(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) template := "Hi, %s" name := "Ralph" expected := "Hi, Ralph\n" printer.Println(template, name) if file.buffer != expected { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintlnPreservesEncodedStrings(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const expected = "= -> %3D" printer.Println(expected) if file.buffer != expected+"\n" { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintIndented(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const message = "Hello, World!\nGoodbye, World!" const expected = " Hello, World!\n Goodbye, World!" printer.Indent() printer.Print(message) if file.buffer != expected { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintDedented(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const expected = "Hello, World!\nGoodbye, World!" printer.Indent() printer.Dedent() printer.Print(expected) if file.buffer != expected { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintlnIndented(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const message = "Hello, World!\nGoodbye, World!" const expected = " Hello, World!\n Goodbye, World!\n" printer.Indent() printer.Println(message) if file.buffer != expected { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestPrintlnDedented(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) const expected = "Hello, World!\nGoodbye, World!" printer.Indent() printer.Dedent() printer.Println(expected) if file.buffer != expected+"\n" { t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer) } } func TestDedentTooFarShouldNotPanic(t *testing.T) { defer func() { if r := recover(); r != nil { t.Error("Should not have panicked!") } }() file := newMemoryFile() printer := NewPrinter(file) printer.Dedent() t.Log("Getting to this point without panicking means we passed.") } func TestInsert(t *testing.T) { file := newMemoryFile() printer := NewPrinter(file) printer.Indent() printer.Print("Hi") printer.Insert(" there") printer.Dedent() expected := " Hi there" if file.buffer != expected { t.Errorf("Should have written '%s' but instead wrote '%s'.", expected, file.buffer) } } ////////////////// memoryFile //////////////////// type memoryFile struct { buffer string } func (self *memoryFile) Write(p []byte) (n int, err error) { self.buffer += string(p) return len(p), nil } func (self *memoryFile) String() string { return self.buffer } func newMemoryFile() *memoryFile { return new(memoryFile) } goconvey-1.6.1/convey/reporting/problems.go000066400000000000000000000033231266412531300210420ustar00rootroot00000000000000package reporting import "fmt" type problem struct { silent bool out *Printer errors []*AssertionResult failures []*AssertionResult } func (self *problem) BeginStory(story *StoryReport) {} func (self *problem) Enter(scope *ScopeReport) {} func (self *problem) Report(report *AssertionResult) { if report.Error != nil { self.errors = append(self.errors, report) } else if report.Failure != "" { self.failures = append(self.failures, report) } } func (self *problem) Exit() {} func (self *problem) EndStory() { self.show(self.showErrors, redColor) self.show(self.showFailures, yellowColor) self.prepareForNextStory() } func (self *problem) show(display func(), color string) { if !self.silent { fmt.Print(color) } display() if !self.silent { fmt.Print(resetColor) } self.out.Dedent() } func (self *problem) showErrors() { for i, e := range self.errors { if i == 0 { self.out.Println("\nErrors:\n") self.out.Indent() } self.out.Println(errorTemplate, e.File, e.Line, e.Error, e.StackTrace) } } func (self *problem) showFailures() { for i, f := range self.failures { if i == 0 { self.out.Println("\nFailures:\n") self.out.Indent() } self.out.Println(failureTemplate, f.File, f.Line, f.Failure) } } func (self *problem) Write(content []byte) (written int, err error) { return len(content), nil // no-op } func NewProblemReporter(out *Printer) *problem { self := new(problem) self.out = out self.prepareForNextStory() return self } func NewSilentProblemReporter(out *Printer) *problem { self := NewProblemReporter(out) self.silent = true return self } func (self *problem) prepareForNextStory() { self.errors = []*AssertionResult{} self.failures = []*AssertionResult{} } goconvey-1.6.1/convey/reporting/problems_test.go000066400000000000000000000025311266412531300221010ustar00rootroot00000000000000package reporting import ( "strings" "testing" ) func TestNoopProblemReporterActions(t *testing.T) { file, reporter := setup() reporter.BeginStory(nil) reporter.Enter(nil) reporter.Exit() expected := "" actual := file.String() if expected != actual { t.Errorf("Expected: '(blank)'\nActual: '%s'", actual) } } func TestReporterPrintsFailuresAndErrorsAtTheEndOfTheStory(t *testing.T) { file, reporter := setup() reporter.Report(NewFailureReport("failed")) reporter.Report(NewErrorReport("error")) reporter.Report(NewSuccessReport()) reporter.EndStory() result := file.String() if !strings.Contains(result, "Errors:\n") { t.Errorf("Expected errors, found none.") } if !strings.Contains(result, "Failures:\n") { t.Errorf("Expected failures, found none.") } // Each stack trace looks like: `* /path/to/file.go`, so look for `* `. // With go 1.4+ there is a line in some stack traces that looks like this: // `testing.(*M).Run(0x2082d60a0, 0x25b7c0)` // So we can't just look for "*" anymore. problemCount := strings.Count(result, "* ") if problemCount != 2 { t.Errorf("Expected one failure and one error (total of 2 '*' characters). Got %d", problemCount) } } func setup() (file *memoryFile, reporter *problem) { monochrome() file = newMemoryFile() printer := NewPrinter(file) reporter = NewProblemReporter(printer) return } goconvey-1.6.1/convey/reporting/reporter.go000066400000000000000000000021621266412531300210610ustar00rootroot00000000000000package reporting import "io" type Reporter interface { BeginStory(story *StoryReport) Enter(scope *ScopeReport) Report(r *AssertionResult) Exit() EndStory() io.Writer } type reporters struct{ collection []Reporter } func (self *reporters) BeginStory(s *StoryReport) { self.foreach(func(r Reporter) { r.BeginStory(s) }) } func (self *reporters) Enter(s *ScopeReport) { self.foreach(func(r Reporter) { r.Enter(s) }) } func (self *reporters) Report(a *AssertionResult) { self.foreach(func(r Reporter) { r.Report(a) }) } func (self *reporters) Exit() { self.foreach(func(r Reporter) { r.Exit() }) } func (self *reporters) EndStory() { self.foreach(func(r Reporter) { r.EndStory() }) } func (self *reporters) Write(contents []byte) (written int, err error) { self.foreach(func(r Reporter) { written, err = r.Write(contents) }) return written, err } func (self *reporters) foreach(action func(Reporter)) { for _, r := range self.collection { action(r) } } func NewReporters(collection ...Reporter) *reporters { self := new(reporters) self.collection = collection return self } goconvey-1.6.1/convey/reporting/reporter_test.go000066400000000000000000000040511266412531300221170ustar00rootroot00000000000000package reporting import ( "runtime" "testing" ) func TestEachNestedReporterReceivesTheCallFromTheContainingReporter(t *testing.T) { fake1 := newFakeReporter() fake2 := newFakeReporter() reporter := NewReporters(fake1, fake2) reporter.BeginStory(nil) assertTrue(t, fake1.begun) assertTrue(t, fake2.begun) reporter.Enter(NewScopeReport("scope")) assertTrue(t, fake1.entered) assertTrue(t, fake2.entered) reporter.Report(NewSuccessReport()) assertTrue(t, fake1.reported) assertTrue(t, fake2.reported) reporter.Exit() assertTrue(t, fake1.exited) assertTrue(t, fake2.exited) reporter.EndStory() assertTrue(t, fake1.ended) assertTrue(t, fake2.ended) content := []byte("hi") written, err := reporter.Write(content) assertTrue(t, fake1.written) assertTrue(t, fake2.written) assertEqual(t, written, len(content)) assertNil(t, err) } func assertTrue(t *testing.T, value bool) { if !value { _, _, line, _ := runtime.Caller(1) t.Errorf("Value should have been true (but was false). See line %d", line) } } func assertEqual(t *testing.T, expected, actual int) { if actual != expected { _, _, line, _ := runtime.Caller(1) t.Errorf("Value should have been %d (but was %d). See line %d", expected, actual, line) } } func assertNil(t *testing.T, err error) { if err != nil { _, _, line, _ := runtime.Caller(1) t.Errorf("Error should have been (but wasn't). See line %d", err, line) } } type fakeReporter struct { begun bool entered bool reported bool exited bool ended bool written bool } func newFakeReporter() *fakeReporter { return &fakeReporter{} } func (self *fakeReporter) BeginStory(story *StoryReport) { self.begun = true } func (self *fakeReporter) Enter(scope *ScopeReport) { self.entered = true } func (self *fakeReporter) Report(report *AssertionResult) { self.reported = true } func (self *fakeReporter) Exit() { self.exited = true } func (self *fakeReporter) EndStory() { self.ended = true } func (self *fakeReporter) Write(content []byte) (int, error) { self.written = true return len(content), nil } goconvey-1.6.1/convey/reporting/reporting.goconvey000066400000000000000000000000241266412531300224470ustar00rootroot00000000000000#ignore -timeout=1s goconvey-1.6.1/convey/reporting/reports.go000066400000000000000000000102131266412531300207110ustar00rootroot00000000000000package reporting import ( "encoding/json" "fmt" "runtime" "strings" "github.com/smartystreets/goconvey/convey/gotest" ) ////////////////// ScopeReport //////////////////// type ScopeReport struct { Title string File string Line int } func NewScopeReport(title string) *ScopeReport { file, line, _ := gotest.ResolveExternalCaller() self := new(ScopeReport) self.Title = title self.File = file self.Line = line return self } ////////////////// ScopeResult //////////////////// type ScopeResult struct { Title string File string Line int Depth int Assertions []*AssertionResult Output string } func newScopeResult(title string, depth int, file string, line int) *ScopeResult { self := new(ScopeResult) self.Title = title self.Depth = depth self.File = file self.Line = line self.Assertions = []*AssertionResult{} return self } /////////////////// StoryReport ///////////////////// type StoryReport struct { Test T Name string File string Line int } func NewStoryReport(test T) *StoryReport { file, line, name := gotest.ResolveExternalCaller() name = removePackagePath(name) self := new(StoryReport) self.Test = test self.Name = name self.File = file self.Line = line return self } // name comes in looking like "github.com/smartystreets/goconvey/examples.TestName". // We only want the stuff after the last '.', which is the name of the test function. func removePackagePath(name string) string { parts := strings.Split(name, ".") return parts[len(parts)-1] } /////////////////// FailureView //////////////////////// // This struct is also declared in github.com/smartystreets/assertions. // The json struct tags should be equal in both declarations. type FailureView struct { Message string `json:"Message"` Expected string `json:"Expected"` Actual string `json:"Actual"` } ////////////////////AssertionResult ////////////////////// type AssertionResult struct { File string Line int Expected string Actual string Failure string Error interface{} StackTrace string Skipped bool } func NewFailureReport(failure string) *AssertionResult { report := new(AssertionResult) report.File, report.Line = caller() report.StackTrace = stackTrace() parseFailure(failure, report) return report } func parseFailure(failure string, report *AssertionResult) { view := new(FailureView) err := json.Unmarshal([]byte(failure), view) if err == nil { report.Failure = view.Message report.Expected = view.Expected report.Actual = view.Actual } else { report.Failure = failure } } func NewErrorReport(err interface{}) *AssertionResult { report := new(AssertionResult) report.File, report.Line = caller() report.StackTrace = fullStackTrace() report.Error = fmt.Sprintf("%v", err) return report } func NewSuccessReport() *AssertionResult { return new(AssertionResult) } func NewSkipReport() *AssertionResult { report := new(AssertionResult) report.File, report.Line = caller() report.StackTrace = fullStackTrace() report.Skipped = true return report } func caller() (file string, line int) { file, line, _ = gotest.ResolveExternalCaller() return } func stackTrace() string { buffer := make([]byte, 1024*64) n := runtime.Stack(buffer, false) return removeInternalEntries(string(buffer[:n])) } func fullStackTrace() string { buffer := make([]byte, 1024*64) n := runtime.Stack(buffer, true) return removeInternalEntries(string(buffer[:n])) } func removeInternalEntries(stack string) string { lines := strings.Split(stack, newline) filtered := []string{} for _, line := range lines { if !isExternal(line) { filtered = append(filtered, line) } } return strings.Join(filtered, newline) } func isExternal(line string) bool { for _, p := range internalPackages { if strings.Contains(line, p) { return true } } return false } // NOTE: any new packages that host goconvey packages will need to be added here! // An alternative is to scan the goconvey directory and then exclude stuff like // the examples package but that's nasty too. var internalPackages = []string{ "goconvey/assertions", "goconvey/convey", "goconvey/execution", "goconvey/gotest", "goconvey/reporting", } goconvey-1.6.1/convey/reporting/statistics.go000066400000000000000000000033631266412531300214150ustar00rootroot00000000000000package reporting import "fmt" func (self *statistics) BeginStory(story *StoryReport) {} func (self *statistics) Enter(scope *ScopeReport) {} func (self *statistics) Report(report *AssertionResult) { if !self.failing && report.Failure != "" { self.failing = true } if !self.erroring && report.Error != nil { self.erroring = true } if report.Skipped { self.skipped += 1 } else { self.total++ } } func (self *statistics) Exit() {} func (self *statistics) EndStory() { if !self.suppressed { self.PrintSummary() } } func (self *statistics) Suppress() { self.suppressed = true } func (self *statistics) PrintSummary() { self.reportAssertions() self.reportSkippedSections() self.completeReport() } func (self *statistics) reportAssertions() { self.decideColor() self.out.Print("\n%d total %s", self.total, plural("assertion", self.total)) } func (self *statistics) decideColor() { if self.failing && !self.erroring { fmt.Print(yellowColor) } else if self.erroring { fmt.Print(redColor) } else { fmt.Print(greenColor) } } func (self *statistics) reportSkippedSections() { if self.skipped > 0 { fmt.Print(yellowColor) self.out.Print(" (one or more sections skipped)") } } func (self *statistics) completeReport() { fmt.Print(resetColor) self.out.Print("\n") self.out.Print("\n") } func (self *statistics) Write(content []byte) (written int, err error) { return len(content), nil // no-op } func NewStatisticsReporter(out *Printer) *statistics { self := statistics{} self.out = out return &self } type statistics struct { out *Printer total int failing bool erroring bool skipped int suppressed bool } func plural(word string, count int) string { if count == 1 { return word } return word + "s" } goconvey-1.6.1/convey/reporting/story.go000066400000000000000000000032331266412531300203770ustar00rootroot00000000000000// TODO: in order for this reporter to be completely honest // we need to retrofit to be more like the json reporter such that: // 1. it maintains ScopeResult collections, which count assertions // 2. it reports only after EndStory(), so that all tick marks // are placed near the appropriate title. // 3. Under unit test package reporting import ( "fmt" "strings" ) type story struct { out *Printer titlesById map[string]string currentKey []string } func (self *story) BeginStory(story *StoryReport) {} func (self *story) Enter(scope *ScopeReport) { self.out.Indent() self.currentKey = append(self.currentKey, scope.Title) ID := strings.Join(self.currentKey, "|") if _, found := self.titlesById[ID]; !found { self.out.Println("") self.out.Print(scope.Title) self.out.Insert(" ") self.titlesById[ID] = scope.Title } } func (self *story) Report(report *AssertionResult) { if report.Error != nil { fmt.Print(redColor) self.out.Insert(error_) } else if report.Failure != "" { fmt.Print(yellowColor) self.out.Insert(failure) } else if report.Skipped { fmt.Print(yellowColor) self.out.Insert(skip) } else { fmt.Print(greenColor) self.out.Insert(success) } fmt.Print(resetColor) } func (self *story) Exit() { self.out.Dedent() self.currentKey = self.currentKey[:len(self.currentKey)-1] } func (self *story) EndStory() { self.titlesById = make(map[string]string) self.out.Println("\n") } func (self *story) Write(content []byte) (written int, err error) { return len(content), nil // no-op } func NewStoryReporter(out *Printer) *story { self := new(story) self.out = out self.titlesById = make(map[string]string) return self } goconvey-1.6.1/convey/reporting_hooks_test.go000066400000000000000000000165001266412531300214620ustar00rootroot00000000000000package convey import ( "fmt" "net/http" "net/http/httptest" "path" "runtime" "strconv" "strings" "testing" "github.com/smartystreets/goconvey/convey/reporting" ) func TestSingleScopeReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { So(1, ShouldEqual, 1) }) expectEqual(t, "Begin|A|Success|Exit|End", myReporter.wholeStory()) } func TestNestedScopeReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { Convey("B", func() { So(1, ShouldEqual, 1) }) }) expectEqual(t, "Begin|A|B|Success|Exit|Exit|End", myReporter.wholeStory()) } func TestFailureReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { So(1, ShouldBeNil) }) expectEqual(t, "Begin|A|Failure|Exit|End", myReporter.wholeStory()) } func TestFirstFailureEndsScopeExecution(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { So(1, ShouldBeNil) So(nil, ShouldBeNil) }) expectEqual(t, "Begin|A|Failure|Exit|End", myReporter.wholeStory()) } func TestComparisonFailureDeserializedAndReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { So("hi", ShouldEqual, "bye") }) expectEqual(t, "Begin|A|Failure(bye/hi)|Exit|End", myReporter.wholeStory()) } func TestNestedFailureReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { Convey("B", func() { So(2, ShouldBeNil) }) }) expectEqual(t, "Begin|A|B|Failure|Exit|Exit|End", myReporter.wholeStory()) } func TestSuccessAndFailureReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { So(nil, ShouldBeNil) So(1, ShouldBeNil) }) expectEqual(t, "Begin|A|Success|Failure|Exit|End", myReporter.wholeStory()) } func TestIncompleteActionReportedAsSkipped(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { Convey("B", nil) }) expectEqual(t, "Begin|A|B|Skipped|Exit|Exit|End", myReporter.wholeStory()) } func TestSkippedConveyReportedAsSkipped(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { SkipConvey("B", func() { So(1, ShouldEqual, 1) }) }) expectEqual(t, "Begin|A|B|Skipped|Exit|Exit|End", myReporter.wholeStory()) } func TestMultipleSkipsAreReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { Convey("0", func() { So(nil, ShouldBeNil) }) SkipConvey("1", func() {}) SkipConvey("2", func() {}) Convey("3", nil) Convey("4", nil) Convey("5", func() { So(nil, ShouldBeNil) }) }) expected := "Begin" + "|A|0|Success|Exit|Exit" + "|A|1|Skipped|Exit|Exit" + "|A|2|Skipped|Exit|Exit" + "|A|3|Skipped|Exit|Exit" + "|A|4|Skipped|Exit|Exit" + "|A|5|Success|Exit|Exit" + "|End" expectEqual(t, expected, myReporter.wholeStory()) } func TestSkippedAssertionIsNotReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { SkipSo(1, ShouldEqual, 1) }) expectEqual(t, "Begin|A|Skipped|Exit|End", myReporter.wholeStory()) } func TestMultipleSkippedAssertionsAreNotReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { SkipSo(1, ShouldEqual, 1) So(1, ShouldEqual, 1) SkipSo(1, ShouldEqual, 1) }) expectEqual(t, "Begin|A|Skipped|Success|Skipped|Exit|End", myReporter.wholeStory()) } func TestErrorByManualPanicReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { panic("Gopher alert!") }) expectEqual(t, "Begin|A|Error|Exit|End", myReporter.wholeStory()) } func TestIterativeConveysReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { for x := 0; x < 3; x++ { Convey(strconv.Itoa(x), func() { So(x, ShouldEqual, x) }) } }) expectEqual(t, "Begin|A|0|Success|Exit|Exit|A|1|Success|Exit|Exit|A|2|Success|Exit|Exit|End", myReporter.wholeStory()) } func TestNestedIterativeConveysReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func() { for x := 0; x < 3; x++ { Convey(strconv.Itoa(x), func() { for y := 0; y < 3; y++ { Convey("< "+strconv.Itoa(y), func() { So(x, ShouldBeLessThan, y) }) } }) } }) expectEqual(t, ("Begin|" + "A|0|< 0|Failure|Exit|Exit|Exit|" + "A|0|< 1|Success|Exit|Exit|Exit|" + "A|0|< 2|Success|Exit|Exit|Exit|" + "A|1|< 0|Failure|Exit|Exit|Exit|" + "A|1|< 1|Failure|Exit|Exit|Exit|" + "A|1|< 2|Success|Exit|Exit|Exit|" + "A|2|< 0|Failure|Exit|Exit|Exit|" + "A|2|< 1|Failure|Exit|Exit|Exit|" + "A|2|< 2|Failure|Exit|Exit|Exit|" + "End"), myReporter.wholeStory()) } func TestEmbeddedAssertionReported(t *testing.T) { myReporter, test := setupFakeReporter() Convey("A", test, func(c C) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { c.So(r.FormValue("msg"), ShouldEqual, "ping") })) http.DefaultClient.Get(ts.URL + "?msg=ping") }) expectEqual(t, "Begin|A|Success|Exit|End", myReporter.wholeStory()) } func TestEmbeddedContextHelperReported(t *testing.T) { myReporter, test := setupFakeReporter() helper := func(c C) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { c.Convey("Embedded", func() { So(r.FormValue("msg"), ShouldEqual, "ping") }) }) } Convey("A", test, func(c C) { ts := httptest.NewServer(helper(c)) http.DefaultClient.Get(ts.URL + "?msg=ping") }) expectEqual(t, "Begin|A|Embedded|Success|Exit|Exit|End", myReporter.wholeStory()) } func expectEqual(t *testing.T, expected interface{}, actual interface{}) { if expected != actual { _, file, line, _ := runtime.Caller(1) t.Errorf("Expected '%v' to be '%v' but it wasn't. See '%s' at line %d.", actual, expected, path.Base(file), line) } } func setupFakeReporter() (*fakeReporter, *fakeGoTest) { myReporter := new(fakeReporter) myReporter.calls = []string{} testReporter = myReporter return myReporter, new(fakeGoTest) } type fakeReporter struct { calls []string } func (self *fakeReporter) BeginStory(story *reporting.StoryReport) { self.calls = append(self.calls, "Begin") } func (self *fakeReporter) Enter(scope *reporting.ScopeReport) { self.calls = append(self.calls, scope.Title) } func (self *fakeReporter) Report(report *reporting.AssertionResult) { if report.Error != nil { self.calls = append(self.calls, "Error") } else if report.Failure != "" { message := "Failure" if report.Expected != "" || report.Actual != "" { message += fmt.Sprintf("(%s/%s)", report.Expected, report.Actual) } self.calls = append(self.calls, message) } else if report.Skipped { self.calls = append(self.calls, "Skipped") } else { self.calls = append(self.calls, "Success") } } func (self *fakeReporter) Exit() { self.calls = append(self.calls, "Exit") } func (self *fakeReporter) EndStory() { self.calls = append(self.calls, "End") } func (self *fakeReporter) Write(content []byte) (int, error) { return len(content), nil // no-op } func (self *fakeReporter) wholeStory() string { return strings.Join(self.calls, "|") } //////////////////////////////// type fakeGoTest struct{} func (self *fakeGoTest) Fail() {} func (self *fakeGoTest) Fatalf(format string, args ...interface{}) {} var test t = new(fakeGoTest) goconvey-1.6.1/convey/story_conventions_test.go000066400000000000000000000067101266412531300220550ustar00rootroot00000000000000package convey import ( "reflect" "testing" ) func expectPanic(t *testing.T, f string) interface{} { r := recover() if r != nil { if cp, ok := r.(*conveyErr); ok { if cp.fmt != f { t.Error("Incorrect panic message.") } } else { t.Errorf("Incorrect panic type. %s", reflect.TypeOf(r)) } } else { t.Error("Expected panic but none occured") } return r } func TestMissingTopLevelGoTestReferenceCausesPanic(t *testing.T) { output := map[string]bool{} defer expectEqual(t, false, output["good"]) defer expectPanic(t, missingGoTest) Convey("Hi", func() { output["bad"] = true // this shouldn't happen }) } func TestMissingTopLevelGoTestReferenceAfterGoodExample(t *testing.T) { output := map[string]bool{} defer func() { expectEqual(t, true, output["good"]) expectEqual(t, false, output["bad"]) }() defer expectPanic(t, missingGoTest) Convey("Good example", t, func() { output["good"] = true }) Convey("Bad example", func() { output["bad"] = true // shouldn't happen }) } func TestExtraReferencePanics(t *testing.T) { output := map[string]bool{} defer expectEqual(t, false, output["bad"]) defer expectPanic(t, extraGoTest) Convey("Good example", t, func() { Convey("Bad example - passing in *testing.T a second time!", t, func() { output["bad"] = true // shouldn't happen }) }) } func TestParseRegistrationMissingRequiredElements(t *testing.T) { defer expectPanic(t, parseError) Convey() } func TestParseRegistration_MissingNameString(t *testing.T) { defer expectPanic(t, parseError) Convey(func() {}) } func TestParseRegistration_MissingActionFunc(t *testing.T) { defer expectPanic(t, parseError) Convey("Hi there", 12345) } func TestFailureModeNoContext(t *testing.T) { Convey("Foo", t, func() { done := make(chan int, 1) go func() { defer func() { done <- 1 }() defer expectPanic(t, noStackContext) So(len("I have no context"), ShouldBeGreaterThan, 0) }() <-done }) } func TestFailureModeDuplicateSuite(t *testing.T) { Convey("cool", t, func() { defer expectPanic(t, multipleIdenticalConvey) Convey("dup", nil) Convey("dup", nil) }) } func TestFailureModeIndeterminentSuiteNames(t *testing.T) { defer expectPanic(t, differentConveySituations) name := "bob" Convey("cool", t, func() { for i := 0; i < 3; i++ { Convey(name, func() {}) name += "bob" } }) } func TestFailureModeNestedIndeterminentSuiteNames(t *testing.T) { defer expectPanic(t, differentConveySituations) name := "bob" Convey("cool", t, func() { Convey("inner", func() { for i := 0; i < 3; i++ { Convey(name, func() {}) name += "bob" } }) }) } func TestFailureModeParameterButMissing(t *testing.T) { defer expectPanic(t, parseError) prepare() Convey("Foobar", t, FailureHalts) } func TestFailureModeParameterWithAction(t *testing.T) { prepare() Convey("Foobar", t, FailureHalts, func() {}) } func TestExtraConveyParameters(t *testing.T) { defer expectPanic(t, parseError) prepare() Convey("Foobar", t, FailureHalts, func() {}, "This is not supposed to be here") } func TestExtraConveyParameters2(t *testing.T) { defer expectPanic(t, parseError) prepare() Convey("Foobar", t, func() {}, "This is not supposed to be here") } func TestExtraConveyParameters3(t *testing.T) { defer expectPanic(t, parseError) output := prepare() Convey("A", t, func() { output += "A " Convey("B", func() { output += "B " }, "This is not supposed to be here") }) expectEqual(t, "A ", output) } goconvey-1.6.1/dependencies.go000066400000000000000000000001361266412531300163300ustar00rootroot00000000000000package main import _ "github.com/jtolds/gls" import _ "github.com/smartystreets/assertions" goconvey-1.6.1/doc_test.go000066400000000000000000000000151266412531300155020ustar00rootroot00000000000000package main goconvey-1.6.1/examples/000077500000000000000000000000001266412531300151715ustar00rootroot00000000000000goconvey-1.6.1/examples/assertion_examples_test.go000066400000000000000000000100051266412531300224600ustar00rootroot00000000000000package examples import ( "bytes" "io" "testing" "time" . "github.com/smartystreets/goconvey/convey" ) func TestAssertionsAreAvailableFromConveyPackage(t *testing.T) { SetDefaultFailureMode(FailureContinues) defer SetDefaultFailureMode(FailureHalts) Convey("Equality assertions should be accessible", t, func() { thing1a := thing{a: "asdf"} thing1b := thing{a: "asdf"} thing2 := thing{a: "qwer"} So(1, ShouldEqual, 1) So(1, ShouldNotEqual, 2) So(1, ShouldAlmostEqual, 1.000000000000001) So(1, ShouldNotAlmostEqual, 2, 0.5) So(thing1a, ShouldResemble, thing1b) So(thing1a, ShouldNotResemble, thing2) So(&thing1a, ShouldPointTo, &thing1a) So(&thing1a, ShouldNotPointTo, &thing1b) So(nil, ShouldBeNil) So(1, ShouldNotBeNil) So(true, ShouldBeTrue) So(false, ShouldBeFalse) So(0, ShouldBeZeroValue) }) Convey("Numeric comparison assertions should be accessible", t, func() { So(1, ShouldBeGreaterThan, 0) So(1, ShouldBeGreaterThanOrEqualTo, 1) So(1, ShouldBeLessThan, 2) So(1, ShouldBeLessThanOrEqualTo, 1) So(1, ShouldBeBetween, 0, 2) So(1, ShouldNotBeBetween, 2, 4) So(1, ShouldBeBetweenOrEqual, 1, 2) So(1, ShouldNotBeBetweenOrEqual, 2, 4) }) Convey("Container assertions should be accessible", t, func() { So([]int{1, 2, 3}, ShouldContain, 2) So([]int{1, 2, 3}, ShouldNotContain, 4) So(map[int]int{1: 1, 2: 2, 3: 3}, ShouldContainKey, 2) So(map[int]int{1: 1, 2: 2, 3: 3}, ShouldNotContainKey, 4) So(1, ShouldBeIn, []int{1, 2, 3}) So(4, ShouldNotBeIn, []int{1, 2, 3}) So([]int{}, ShouldBeEmpty) So([]int{1}, ShouldNotBeEmpty) So([]int{1, 2}, ShouldHaveLength, 2) }) Convey("String assertions should be accessible", t, func() { So("asdf", ShouldStartWith, "a") So("asdf", ShouldNotStartWith, "z") So("asdf", ShouldEndWith, "df") So("asdf", ShouldNotEndWith, "as") So("", ShouldBeBlank) So("asdf", ShouldNotBeBlank) So("asdf", ShouldContainSubstring, "sd") So("asdf", ShouldNotContainSubstring, "af") }) Convey("Panic recovery assertions should be accessible", t, func() { So(panics, ShouldPanic) So(func() {}, ShouldNotPanic) So(panics, ShouldPanicWith, "Goofy Gophers!") So(panics, ShouldNotPanicWith, "Guileless Gophers!") }) Convey("Type-checking assertions should be accessible", t, func() { // NOTE: Values or pointers may be checked. If a value is passed, // it will be cast as a pointer to the value to avoid cases where // the struct being tested takes pointer receivers. Go allows values // or pointers to be passed as receivers on methods with a value // receiver, but only pointers on methods with pointer receivers. // See: // http://golang.org/doc/effective_go.html#pointers_vs_values // http://golang.org/doc/effective_go.html#blank_implements // http://blog.golang.org/laws-of-reflection So(1, ShouldHaveSameTypeAs, 0) So(1, ShouldNotHaveSameTypeAs, "1") So(bytes.NewBufferString(""), ShouldImplement, (*io.Reader)(nil)) So("string", ShouldNotImplement, (*io.Reader)(nil)) }) Convey("Time assertions should be accessible", t, func() { january1, _ := time.Parse(timeLayout, "2013-01-01 00:00") january2, _ := time.Parse(timeLayout, "2013-01-02 00:00") january3, _ := time.Parse(timeLayout, "2013-01-03 00:00") january4, _ := time.Parse(timeLayout, "2013-01-04 00:00") january5, _ := time.Parse(timeLayout, "2013-01-05 00:00") oneDay, _ := time.ParseDuration("24h0m0s") So(january1, ShouldHappenBefore, january4) So(january1, ShouldHappenOnOrBefore, january1) So(january2, ShouldHappenAfter, january1) So(january2, ShouldHappenOnOrAfter, january2) So(january3, ShouldHappenBetween, january2, january5) So(january3, ShouldHappenOnOrBetween, january3, january5) So(january1, ShouldNotHappenOnOrBetween, january2, january5) So(january2, ShouldHappenWithin, oneDay, january3) So(january5, ShouldNotHappenWithin, oneDay, january1) So([]time.Time{january1, january2}, ShouldBeChronological) }) } type thing struct { a string } func panics() { panic("Goofy Gophers!") } const timeLayout = "2006-01-02 15:04" goconvey-1.6.1/examples/bowling_game.go000066400000000000000000000037751266412531300201660ustar00rootroot00000000000000package examples // Game contains the state of a bowling game. type Game struct { rolls []int current int } // NewGame allocates and starts a new game of bowling. func NewGame() *Game { game := new(Game) game.rolls = make([]int, maxThrowsPerGame) return game } // Roll rolls the ball and knocks down the number of pins specified by pins. func (self *Game) Roll(pins int) { self.rolls[self.current] = pins self.current++ } // Score calculates and returns the player's current score. func (self *Game) Score() (sum int) { for throw, frame := 0, 0; frame < framesPerGame; frame++ { if self.isStrike(throw) { sum += self.strikeBonusFor(throw) throw += 1 } else if self.isSpare(throw) { sum += self.spareBonusFor(throw) throw += 2 } else { sum += self.framePointsAt(throw) throw += 2 } } return sum } // isStrike determines if a given throw is a strike or not. A strike is knocking // down all pins in one throw. func (self *Game) isStrike(throw int) bool { return self.rolls[throw] == allPins } // strikeBonusFor calculates and returns the strike bonus for a throw. func (self *Game) strikeBonusFor(throw int) int { return allPins + self.framePointsAt(throw+1) } // isSpare determines if a given frame is a spare or not. A spare is knocking // down all pins in one frame with two throws. func (self *Game) isSpare(throw int) bool { return self.framePointsAt(throw) == allPins } // spareBonusFor calculates and returns the spare bonus for a throw. func (self *Game) spareBonusFor(throw int) int { return allPins + self.rolls[throw+2] } // framePointsAt computes and returns the score in a frame specified by throw. func (self *Game) framePointsAt(throw int) int { return self.rolls[throw] + self.rolls[throw+1] } const ( // allPins is the number of pins allocated per fresh throw. allPins = 10 // framesPerGame is the number of frames per bowling game. framesPerGame = 10 // maxThrowsPerGame is the maximum number of throws possible in a single game. maxThrowsPerGame = 21 ) goconvey-1.6.1/examples/bowling_game_test.go000066400000000000000000000030761266412531300212170ustar00rootroot00000000000000/* Reference: http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata See the very first link (which happens to be the very first word of the first paragraph) on the page for a tutorial. */ package examples import ( "testing" . "github.com/smartystreets/goconvey/convey" ) func TestBowlingGameScoring(t *testing.T) { Convey("Given a fresh score card", t, func() { game := NewGame() Convey("When all gutter balls are thrown", func() { game.rollMany(20, 0) Convey("The score should be zero", func() { So(game.Score(), ShouldEqual, 0) }) }) Convey("When all throws knock down only one pin", func() { game.rollMany(20, 1) Convey("The score should be 20", func() { So(game.Score(), ShouldEqual, 20) }) }) Convey("When a spare is thrown", func() { game.rollSpare() game.Roll(3) game.rollMany(17, 0) Convey("The score should include a spare bonus.", func() { So(game.Score(), ShouldEqual, 16) }) }) Convey("When a strike is thrown", func() { game.rollStrike() game.Roll(3) game.Roll(4) game.rollMany(16, 0) Convey("The score should include a strike bonus.", func() { So(game.Score(), ShouldEqual, 24) }) }) Convey("When all strikes are thrown", func() { game.rollMany(21, 10) Convey("The score should be 300.", func() { So(game.Score(), ShouldEqual, 300) }) }) }) } func (self *Game) rollMany(times, pins int) { for x := 0; x < times; x++ { self.Roll(pins) } } func (self *Game) rollSpare() { self.Roll(5) self.Roll(5) } func (self *Game) rollStrike() { self.Roll(10) } goconvey-1.6.1/examples/doc.go000066400000000000000000000004701266412531300162660ustar00rootroot00000000000000// Package examples contains, well, examples of how to use goconvey to // specify behavior of a system under test. It contains a well-known example // by Robert C. Martin called "Bowling Game Kata" as well as another very // trivial example that demonstrates Reset() and some of the assertions. package examples goconvey-1.6.1/examples/examples.goconvey000066400000000000000000000006661266412531300205720ustar00rootroot00000000000000// Uncomment the next line to disable the package when running the GoConvey UI: //IGNORE // Uncomment the next line to limit testing to the specified test function name pattern: //-run=TestAssertionsAreAvailableFromConveyPackage // Uncomment the next line to limit testing to those tests that don't bail when testing.Short() is true: //-short // include any additional `go test` flags or application-specific flags below: -timeout=1s goconvey-1.6.1/examples/simple_example_test.go000066400000000000000000000012761266412531300215710ustar00rootroot00000000000000package examples import ( "testing" . "github.com/smartystreets/goconvey/convey" ) func TestIntegerManipulation(t *testing.T) { t.Parallel() Convey("Given a starting integer value", t, func() { x := 42 Convey("When incremented", func() { x++ Convey("The value should be greater by one", func() { So(x, ShouldEqual, 43) }) Convey("The value should NOT be what it used to be", func() { So(x, ShouldNotEqual, 42) }) }) Convey("When decremented", func() { x-- Convey("The value should be lesser by one", func() { So(x, ShouldEqual, 41) }) Convey("The value should NOT be what it used to be", func() { So(x, ShouldNotEqual, 42) }) }) }) } goconvey-1.6.1/goconvey.go000066400000000000000000000210531266412531300155340ustar00rootroot00000000000000// This executable provides an HTTP server that watches for file system changes // to .go files within the working directory (and all nested go packages). // Navigating to the configured host and port in a web browser will display the // latest results of running `go test` in each go package. package main import ( "flag" "fmt" "log" "net/http" "os" "os/exec" "path/filepath" "runtime" "strings" "time" "go/build" "github.com/smartystreets/goconvey/web/server/api" "github.com/smartystreets/goconvey/web/server/contract" "github.com/smartystreets/goconvey/web/server/executor" "github.com/smartystreets/goconvey/web/server/messaging" "github.com/smartystreets/goconvey/web/server/parser" "github.com/smartystreets/goconvey/web/server/system" "github.com/smartystreets/goconvey/web/server/watch" ) func init() { flags() folders() } func flags() { flag.IntVar(&port, "port", 8080, "The port at which to serve http.") flag.StringVar(&host, "host", "127.0.0.1", "The host at which to serve http.") flag.DurationVar(&nap, "poll", quarterSecond, "The interval to wait between polling the file system for changes (default: 250ms).") flag.IntVar(&packages, "packages", 10, "The number of packages to test in parallel. Higher == faster but more costly in terms of computing. (default: 10)") flag.StringVar(&gobin, "gobin", "go", "The path to the 'go' binary (default: search on the PATH).") flag.BoolVar(&cover, "cover", true, "Enable package-level coverage statistics. Requires Go 1.2+ and the go cover tool. (default: true)") flag.IntVar(&depth, "depth", -1, "The directory scanning depth. If -1, scan infinitely deep directory structures. 0: scan working directory. 1+: Scan into nested directories, limited to value. (default: -1)") flag.StringVar(&timeout, "timeout", "0", "The test execution timeout if none is specified in the *.goconvey file (default is '0', which is the same as not providing this option).") flag.StringVar(&watchedSuffixes, "watchedSuffixes", ".go", "A comma separated list of file suffixes to watch for modifications (default: .go).") flag.StringVar(&excludedDirs, "excludedDirs", "vendor,node_modules", "A comma separated list of directories that will be excluded from being watched") flag.StringVar(&workDir, "workDir", "", "set goconvey working directory (default current directory)") log.SetOutput(os.Stdout) log.SetFlags(log.LstdFlags | log.Lshortfile) } func folders() { _, file, _, _ := runtime.Caller(0) here := filepath.Dir(file) static = filepath.Join(here, "/web/client") reports = filepath.Join(static, "reports") } func main() { flag.Parse() log.Printf(initialConfiguration, host, port, nap, cover) working := getWorkDir() cover = coverageEnabled(cover, reports) shell := system.NewShell(gobin, reports, cover, timeout) watcherInput := make(chan messaging.WatcherCommand) watcherOutput := make(chan messaging.Folders) excludedDirItems := strings.Split(excludedDirs, `,`) watcher := watch.NewWatcher(working, depth, nap, watcherInput, watcherOutput, watchedSuffixes, excludedDirItems) parser := parser.NewParser(parser.ParsePackageResults) tester := executor.NewConcurrentTester(shell) tester.SetBatchSize(packages) longpollChan := make(chan chan string) executor := executor.NewExecutor(tester, parser, longpollChan) server := api.NewHTTPServer(working, watcherInput, executor, longpollChan) go runTestOnUpdates(watcherOutput, executor, server) go watcher.Listen() go launchBrowser(host, port) serveHTTP(server) } func browserCmd() (string, bool) { browser := map[string]string{ "darwin": "open", "linux": "xdg-open", "win32": "start", } cmd, ok := browser[runtime.GOOS] return cmd, ok } func launchBrowser(host string, port int) { browser, ok := browserCmd() if !ok { log.Printf("Skipped launching browser for this OS: %s", runtime.GOOS) return } log.Printf("Launching browser on %s:%d", host, port) url := fmt.Sprintf("http://%s:%d", host, port) cmd := exec.Command(browser, url) output, err := cmd.CombinedOutput() if err != nil { log.Println(err) } log.Println(string(output)) } func runTestOnUpdates(queue chan messaging.Folders, executor contract.Executor, server contract.Server) { for update := range queue { log.Println("Received request from watcher to execute tests...") packages := extractPackages(update) output := executor.ExecuteTests(packages) root := extractRoot(update, packages) server.ReceiveUpdate(root, output) } } func extractPackages(folderList messaging.Folders) []*contract.Package { packageList := []*contract.Package{} for _, folder := range folderList { hasImportCycle := testFilesImportTheirOwnPackage(folder.Path) packageList = append(packageList, contract.NewPackage(folder, hasImportCycle)) } return packageList } func extractRoot(folderList messaging.Folders, packageList []*contract.Package) string { path := packageList[0].Path folder := folderList[path] return folder.Root } // This method exists because of a bug in the go cover tool that // causes an infinite loop when you try to run `go test -cover` // on a package that has an import cycle defined in one of it's // test files. Yuck. func testFilesImportTheirOwnPackage(packagePath string) bool { meta, err := build.ImportDir(packagePath, build.AllowBinary) if err != nil { return false } for _, dependency := range meta.TestImports { if dependency == meta.ImportPath { return true } } return false } func serveHTTP(server contract.Server) { serveStaticResources() serveAjaxMethods(server) activateServer() } func serveStaticResources() { http.Handle("/", http.FileServer(http.Dir(static))) } func serveAjaxMethods(server contract.Server) { http.HandleFunc("/watch", server.Watch) http.HandleFunc("/ignore", server.Ignore) http.HandleFunc("/reinstate", server.Reinstate) http.HandleFunc("/latest", server.Results) http.HandleFunc("/execute", server.Execute) http.HandleFunc("/status", server.Status) http.HandleFunc("/status/poll", server.LongPollStatus) http.HandleFunc("/pause", server.TogglePause) } func activateServer() { log.Printf("Serving HTTP at: http://%s:%d\n", host, port) err := http.ListenAndServe(fmt.Sprintf("%s:%d", host, port), nil) if err != nil { log.Println(err) } } func coverageEnabled(cover bool, reports string) bool { return (cover && goVersion_1_2_orGreater() && coverToolInstalled() && ensureReportDirectoryExists(reports)) } func goVersion_1_2_orGreater() bool { version := runtime.Version() // 'go1.2....' major, minor := version[2], version[4] version_1_2 := major >= byte('1') && minor >= byte('2') if !version_1_2 { log.Printf(pleaseUpgradeGoVersion, version) return false } return true } func coverToolInstalled() bool { working := getWorkDir() command := system.NewCommand(working, "go", "tool", "cover").Execute() installed := strings.Contains(command.Output, "Usage of 'go tool cover':") if !installed { log.Print(coverToolMissing) return false } return true } func ensureReportDirectoryExists(reports string) bool { result, err := exists(reports) if err != nil { log.Fatal(err) } if result { return true } if err := os.Mkdir(reports, 0755); err == nil { return true } log.Printf(reportDirectoryUnavailable, reports) return false } func exists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func getWorkDir() string { working := "" var err error if workDir != "" { working = workDir } else { working, err = os.Getwd() if err != nil { log.Fatal(err) } } result, err := exists(working) if err != nil { log.Fatal(err) } if !result { log.Fatalf("Path:%s does not exists", working) } return working } var ( port int host string gobin string nap time.Duration packages int cover bool depth int timeout string watchedSuffixes string excludedDirs string static string reports string quarterSecond = time.Millisecond * 250 workDir string ) const ( initialConfiguration = "Initial configuration: [host: %s] [port: %d] [poll: %v] [cover: %v]\n" pleaseUpgradeGoVersion = "Go version is less that 1.2 (%s), please upgrade to the latest stable version to enable coverage reporting.\n" coverToolMissing = "Go cover tool is not installed or not accessible: for Go < 1.5 run`go get golang.org/x/tools/cmd/cover`\n For >= Go 1.5 run `go install $GOROOT/src/cmd/cover`\n" reportDirectoryUnavailable = "Could not find or create the coverage report directory (at: '%s'). You probably won't see any coverage statistics...\n" ) goconvey-1.6.1/web/000077500000000000000000000000001266412531300141305ustar00rootroot00000000000000goconvey-1.6.1/web/client/000077500000000000000000000000001266412531300154065ustar00rootroot00000000000000goconvey-1.6.1/web/client/composer.html000066400000000000000000000020731266412531300201250ustar00rootroot00000000000000 GoConvey Composer

goconvey-1.6.1/web/client/favicon.ico000066400000000000000000000353561266412531300175430ustar00rootroot00000000000000 h6  00 %F(   /0 }} /. /T2V$e3//}Sz}/q:SIES P@FS P@NNF@oH!7Ol$0}b}0.=r. /&. }} /0 D@@G |( @  WW $nK::Kn$ GG #CC#/ /##    wx $CD$_C3.5M GgG(E WH~4W#3p03nK7Qhr3J:83::8ye|5:K8`P1Jp8!_>n6W+:vu W GIdE y9$Cw ,D$ ^ j #GQ:#/ 0#DD# EE $nJ::Jn$ WW ?`#`@8BxB8xB8xB8`B8`B8`B888<x`8x8?(0` $ #WW#klI))I t%%t -vv-O OjkijjDCkO;<O-DD- kS>MPH Aym+k t Z& t U!v0v41d k!E~k%A7( "# _B!#W( 9FWJ>*FH*JF(Q(((>FT)FT+FT%?#T 4, TV*T0s(JTcHWP sW#ET _#%/`;QL/ "l r~l=bv&v '#!t}@t i |i -ChSB-O<3dyya/9OjDBkkkikO!!O-vv- t~$"~t H((Hkl#WW#??<800 @ `q p x x x x x x? |? | `x`xx|Àx??goconvey-1.6.1/web/client/index.html000066400000000000000000000416101266412531300174050ustar00rootroot00000000000000 GoConvey
PASS
Controls
NOTICE:

Coverage
Ignored
No Test Functions
No Test Files
No Go Files
Build Failures
Panics
Failures
Stories
LOG
Last test : / /
LIVE REPLAY PAUSED
goconvey-1.6.1/web/client/resources/000077500000000000000000000000001266412531300174205ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/css/000077500000000000000000000000001266412531300202105ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/css/common.css000066400000000000000000000326131266412531300222170ustar00rootroot00000000000000/* Eric Meyer's Reset CSS v2.0 */ html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0} @font-face { font-family: 'Open Sans'; src: local("Open Sans"), url("../fonts/Open_Sans/OpenSans-Regular.ttf"); } @font-face { font-family: 'Orbitron'; src: local("Orbitron"), url("../fonts/Orbitron/Orbitron-Regular.ttf"); } @font-face { font-family: 'Oswald'; src: local("Oswald"), url("../fonts/Oswald/Oswald-Regular.ttf"); } ::selection { background: #87AFBC; color: #FFF; text-shadow: none; } ::-moz-selection { background: #87AFBC; color: #FFF; text-shadow: none; } ::-webkit-input-placeholder { font-style: italic; } :-moz-placeholder { font-style: italic; } ::-moz-placeholder { font-style: italic; } :-ms-input-placeholder { font-style: italic; } html, body { height: 100%; min-height: 100%; } body { -webkit-transform: translate3d(0, 0, 0); /* attempts to fix Chrome glitching on Mac */ background-position: fixed; background-repeat: no-repeat; font-family: Menlo, Monaco, 'Courier New', monospace; line-height: 1.5em; font-size: 14px; overflow: hidden; display: none; } a { text-decoration: none; } a:hover { text-decoration: underline; } a.fa { text-decoration: none; } b { font-weight: bold; } i { font-style: italic; } hr { border: 0; background: 0; height: 0; margin: 0; padding: 0; } input[type=text] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; background: none; border: none; border-bottom-width: 1px; border-bottom-style: solid; outline: none; padding-bottom: .1em; font: 300 18px/1.5em 'Open Sans', sans-serif; } .overall { padding: 30px 0 15px; position: relative; z-index: 50; } .status { line-height: 1em; font-family: 'Orbitron', monospace; text-align: center; } .overall .status { font-size: 46px; letter-spacing: 5px; text-transform: uppercase; white-space: nowrap; } .toggler { font-size: 10px; padding: 3px 5px; text-decoration: none; text-transform: uppercase; cursor: pointer; line-height: 1.5em; } .toggler.narrow { display: none; } .togglable { overflow-x: auto; } .controls { font-size: 18px; line-height: 1em; } .controls li { text-decoration: none; display: block; float: left; padding: .75em; cursor: pointer; } .server-down { display: none; text-align: center; padding: 10px 0; } footer .server-down { padding: 8px 15px; text-transform: uppercase; } #logo { font-family: 'Oswald', 'Impact', 'Arial Black', sans-serif; } #path-container { margin-top: .4em; } #path { width: 100%; text-align: center; border-bottom-width: 0; } #path:hover, #path:focus { border-bottom-width: 1px; } .expandable { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; border-top-width: 1px; border-top-style: solid; overflow-y: hidden; overflow-x: auto; text-align: center; white-space: nowrap; display: none; } .settings { white-space: normal; overflow-x: auto; white-space: nowrap; } .settings .setting-meta, .settings .setting-val { display: inline-block; } .settings .container { padding: 15px 0; } .settings .setting { font-size: 13px; display: inline-block; margin-right: 5%; } .settings .setting:first-child { margin-left: 5%; } .settings .setting .setting-meta { text-align: right; padding-right: 1em; vertical-align: middle; max-width: 150px; } .settings .setting .setting-meta small { font-size: 8px; text-transform: uppercase; display: block; line-height: 1.25em; } .history .container { padding: 15px 0 15px 25%; } .history .item { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; transition: all .1s linear; -moz-transition: all .1s linear; -webkit-transition: all .1s linear; -o-transition: all .1s linear; display: inline-block; text-align: left; margin: 0 20px; padding: 20px; height: 100%; width: 175px; opacity: .7; cursor: pointer; } .history .item:hover { opacity: 1; } .history .item:nth-child(odd):hover { -webkit-transform: scale(1.1) rotate(5deg); -moz-transform: scale(1.1) rotate(5deg); } .history .item:nth-child(even):hover { -webkit-transform: scale(1.1) rotate(-5deg); -moz-transform: scale(1.1) rotate(-5deg); } .history .item .summary { font: 14px/1.5em 'Monaco', 'Menlo', 'Courier New', monospace; } .history .item.selected { opacity: 1; } .history .status { font-size: 13px; } .frame { position: relative; z-index: 0; width: 100%; } .frame .col { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; border-right-width: 1px; border-right-style: solid; float: left; height: 100%; overflow-y: auto; } .frame .col:first-child { border-left: none; } .frame .col:last-child { border-right: none; } #col-1 { width: 15%; } #col-2 { width: 60%; } #col-3 { width: 25%; } #coverage { font-size: 10px; white-space: nowrap; } #coverage-color-template { display: none; } .rtl { direction: rtl; } .pkg-cover { position: relative; } .pkg-cover a { color: inherit !important; text-decoration: none; } .pkg-cover-bar { position: absolute; top: 0; left: 0; height: 100%; z-index: 1; } .pkg-cover-name { position: relative; z-index: 2; } .pkg-cover-name, .pkg-list { font-family: 'Menlo', monospace; font-size: 10px; padding-right: 2%; white-space: nowrap; } .buildfail-pkg, .panic-pkg, .failure-pkg { padding: 5px 10px; font: 14px 'Open Sans', sans-serif; } .buildfail-output, .panic-output, .failure-output { padding: 10px; font-size: 12px; line-height: 1.25em; overflow-y: auto; white-space: pre-wrap; font-family: 'Menlo', monospace; } .panic-story, .failure-story { font-size: 10px; line-height: 1.25em; font-family: 'Open Sans', sans-serif; } .panic-summary { font-size: 14px; font-weight: bold; line-height: 1.5em; } .panic-file, .failure-file { font-size: 13px; line-height: 1.5em; } .diffviewer { border-collapse: collapse; width: 100%; } .diffviewer td { border-bottom-width: 1px; border-bottom-style: solid; padding: 2px 5px; font-size: 14px; } .diffviewer .original, .diffviewer .changed, .diffviewer .diff { white-space: pre-wrap; } .diffviewer tr:first-child td { border-top-width: 1px; border-top-style: solid; } .diffviewer td:first-child { width: 65px; font-size: 10px; border-right-width: 1px; border-right-style: solid; text-transform: uppercase; } .diff ins { text-decoration: none; } #stories table { width: 100%; } .story-pkg { cursor: pointer; } .story-pkg td { font: 16px 'Open Sans', sans-serif; white-space: nowrap; padding: 10px; } .story-pkg td:first-child { width: 1em; } .story-line { font: 12px 'Open Sans', sans-serif; cursor: default; } .story-line td { padding-top: 7px; padding-bottom: 7px; } .pkg-toggle-container { position: relative; display: inline-block; } .toggle-all-pkg { font-size: 10px; text-transform: uppercase; position: absolute; padding: 5px; font-family: 'Menlo', 'Open Sans', sans-serif; display: none; } .story-line-summary-container { padding: 0 10px 0 10px; white-space: nowrap; width: 35px; text-align: center; } .story-line-status { width: 6px; min-width: 6px; height: 100%; } .story-line-desc { padding: 5px; } .story-line-desc .message { font-family: 'Menlo', monospace; white-space: pre-wrap; } .statusicon { font: 14px 'Open Sans', sans-serif; } .statusicon.skip { font-size: 16px; } .depth-0 { padding-left: 1.5em !important; } .depth-1 { padding-left: 3em !important; } .depth-2 { padding-left: 4.5em !important; } .depth-3 { padding-left: 6em !important; } .depth-4 { padding-left: 7.5em !important; } .depth-5 { padding-left: 9em !important; } .depth-6 { padding-left: 10.5em !important; } .depth-7 { padding-left: 11em !important; } .log { font-size: 11px; line-height: 1.5em; padding: 5px; padding-bottom: .5em; } .log .line { white-space: pre-wrap; padding-left: 2em; text-indent: -2em; } footer { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; position: absolute; bottom: 0; left: 0; padding: 5px 15px; width: 100%; border-top-width: 1px; border-top-style: solid; font-size: 12px; } footer section { float: left; } footer section:first-child { width: 80%; } footer section:last-child { text-align: right; width: 20%; } footer .info { padding: 0 10px; } footer .info:first-child { padding-left: 0; } #narrow-summary { display: none; } footer .replay, footer .paused { display: none; } footer .replay { cursor: pointer; } footer .server-down .notice-message { font-size: 10px; } .rel { position: relative; } .text-right { text-align: right; } .text-center { text-align: center; } .text-left { text-align: left; } .float-left { float: left; } .float-right { float: right; } .clear { clear: both; } .nowrap { white-space: nowrap; } .clr-blue { color: #2B597F; } .show { display: block; } .hide { display: none; } .enum { cursor: pointer; display: inline-block; font-size: 12px; border-width: 1px; border-style: solid; border-radius: 9px; vertical-align: middle; } .enum > li { display: block; float: left; padding: 5px 12px; border-left-width: 1px; border-left-style: solid; } .enum > li:first-child { border-left: 0px; border-top-left-radius: 8px; border-bottom-left-radius: 8px; } .enum > li:last-child { border-top-right-radius: 8px; border-bottom-right-radius: 8px; } .disabled { cursor: default !important; background: transparent !important; } .spin-once { -webkit-animation: spin 0.5s 1 ease; animation: spin 0.5s 1 ease; } .spin-slowly { -webkit-animation: spin .75s infinite linear; animation: spin .75s infinite linear; } .throb { -webkit-animation: throb 2.5s ease-in-out infinite; -moz-animation: throb 2.5s ease-in-out infinite; -o-animation: throb 2.5s ease-in-out infinite; animation: throb 2.5s ease-in-out infinite; } .flash { -webkit-animation: flash 4s linear infinite; -moz-animation: flash 4s linear infinite; -o-animation: flash 4s linear infinite; animation: flash 4s linear infinite; } /* Clearfix */ .cf:before, .cf:after { content: " "; display: table; } .cf:after { clear: both; } @media (max-width: 1099px) { #col-1 { width: 25%; } #col-2 { width: 75%; border-right: none; } #col-3 { display: none; } footer #duration { display: none; } } @media (max-width: 900px) { footer #last-test-container { display: none; } } @media (min-width: 850px) and (max-width: 1220px) { #path { font-size: 14px; margin-top: 5px; } } @media (min-width: 700px) and (max-width: 849px) { #path { font-size: 12px; margin-top: 8px; } } @media (max-width: 799px) { #col-1 { display: none; } #col-2 { width: 100%; } #stories .story-pkg-name { font-size: 14px; } #stories .story-pkg-watch-td { display: none; } } @media (max-width: 700px) { #path-container { display: none; } footer #time { display: none; } footer .info { padding: 0 5px; } footer .server-down .notice-message { display: none; } } @media (max-width: 499px) { .toggler.narrow { display: block; } #show-gen { display: none; } .hide-narrow { display: none; } .show-narrow { display: block; } .overall .status { font-size: 28px; letter-spacing: 1px; } .toggler { display: block; } .controls ul { text-align: center; float: none; } .controls li { display: inline-block; float: none; } .enum > li { float: left; display: block; } #logo { display: none; } .history .item { margin: 0 5px; } .history .item .summary { display: none; } .server-down { font-size: 14px; } #stories .story-pkg-name { font-size: 16px; } #stories .not-pkg-name { display: none; } footer #duration { display: none; } footer #summary { display: none; } footer #narrow-summary { display: inline; } } /** Custom CSS Animations **/ @-webkit-keyframes throb { 0% { opacity: 1; } 50% { opacity: .35; } 100% { opacity: 1; } } @-moz-keyframes throb { 0% { opacity: 1; } 50% { opacity: .35; } 100% { opacity: 1; } } @-o-keyframes throb { 0% { opacity: 1; } 50% { opacity: .35; } 100% { opacity: 1; } } @keyframes throb { 0% { opacity: 1; } 50% { opacity: .35; } 100% { opacity: 1; } } @-webkit-keyframes flash { 70% { opacity: 1; } 90% { opacity: 0; } 98% { opacity: 0; } 100% { opacity: 1; } } @-moz-keyframes flash { 70% { opacity: 1; } 90% { opacity: 0; } 98% { opacity: 0; } 100% { opacity: 1; } } @-o-keyframes flash { 70% { opacity: 1; } 90% { opacity: 0; } 98% { opacity: 0; } 100% { opacity: 1; } } @keyframes flash { 70% { opacity: 1; } 90% { opacity: 0; } 98% { opacity: 0; } 100% { opacity: 1; } } /* #coverage { perspective: 1000; } #coverage .pkg-cover { -webkit-transition: .7s; transform-style: preserve-3d; position: relative; } #coverage:hover .pkg-cover { -webkit-transform: rotateX(180deg); }*/ goconvey-1.6.1/web/client/resources/css/composer.css000066400000000000000000000034371266412531300225600ustar00rootroot00000000000000/* Eric Meyer's Reset CSS v2.0 */ html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0} @font-face { font-family: 'Open Sans'; src: local("Open Sans"), url("../fonts/Open_Sans/OpenSans-Regular.ttf"); } @font-face { font-family: 'Oswald'; src: local("Oswald"), url("../fonts/Oswald/Oswald-Regular.ttf"); } body { font-family: 'Open Sans', 'Helvetica Neue', sans-serif; font-size: 16px; } header { background: #2C3F49; padding: 10px; } .logo { font-family: Oswald, sans-serif; font-size: 24px; margin-right: 5px; color: #DDD; } .afterlogo { font-size: 12px; text-transform: uppercase; position: relative; top: -3px; color: #999; } #input, #output { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 15px; height: 80%; float: left; overflow: auto; } #input { border: 0; font: 300 18px/1.5em 'Open Sans'; resize: none; outline: none; width: 50%; } #output { width: 50%; display: inline-block; background: #F0F0F0; font: 14px/1.25em 'Menlo', 'Monaco', 'Courier New', monospace; border-left: 1px solid #CCC; white-space: pre-wrap; }goconvey-1.6.1/web/client/resources/css/font-awesome.css000066400000000000000000001007211266412531300233270ustar00rootroot00000000000000/*! * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('../fonts/fontawesome-webfont.eot?v=4.5.0'); src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } .fa { display: inline-block; font: normal normal normal 14px/1 FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* makes the font 33% larger relative to the icon container */ .fa-lg { font-size: 1.33333333em; line-height: 0.75em; vertical-align: -15%; } .fa-2x { font-size: 2em; } .fa-3x { font-size: 3em; } .fa-4x { font-size: 4em; } .fa-5x { font-size: 5em; } .fa-fw { width: 1.28571429em; text-align: center; } .fa-ul { padding-left: 0; margin-left: 2.14285714em; list-style-type: none; } .fa-ul > li { position: relative; } .fa-li { position: absolute; left: -2.14285714em; width: 2.14285714em; top: 0.14285714em; text-align: center; } .fa-li.fa-lg { left: -1.85714286em; } .fa-border { padding: .2em .25em .15em; border: solid 0.08em #eeeeee; border-radius: .1em; } .fa-pull-left { float: left; } .fa-pull-right { float: right; } .fa.fa-pull-left { margin-right: .3em; } .fa.fa-pull-right { margin-left: .3em; } /* Deprecated as of 4.4.0 */ .pull-right { float: right; } .pull-left { float: left; } .fa.pull-left { margin-right: .3em; } .fa.pull-right { margin-left: .3em; } .fa-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; } .fa-pulse { -webkit-animation: fa-spin 1s infinite steps(8); animation: fa-spin 1s infinite steps(8); } @-webkit-keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .fa-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } :root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { filter: none; } .fa-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .fa-stack-1x, .fa-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .fa-stack-1x { line-height: inherit; } .fa-stack-2x { font-size: 2em; } .fa-inverse { color: #ffffff; } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .fa-glass:before { content: "\f000"; } .fa-music:before { content: "\f001"; } .fa-search:before { content: "\f002"; } .fa-envelope-o:before { content: "\f003"; } .fa-heart:before { content: "\f004"; } .fa-star:before { content: "\f005"; } .fa-star-o:before { content: "\f006"; } .fa-user:before { content: "\f007"; } .fa-film:before { content: "\f008"; } .fa-th-large:before { content: "\f009"; } .fa-th:before { content: "\f00a"; } .fa-th-list:before { content: "\f00b"; } .fa-check:before { content: "\f00c"; } .fa-remove:before, .fa-close:before, .fa-times:before { content: "\f00d"; } .fa-search-plus:before { content: "\f00e"; } .fa-search-minus:before { content: "\f010"; } .fa-power-off:before { content: "\f011"; } .fa-signal:before { content: "\f012"; } .fa-gear:before, .fa-cog:before { content: "\f013"; } .fa-trash-o:before { content: "\f014"; } .fa-home:before { content: "\f015"; } .fa-file-o:before { content: "\f016"; } .fa-clock-o:before { content: "\f017"; } .fa-road:before { content: "\f018"; } .fa-download:before { content: "\f019"; } .fa-arrow-circle-o-down:before { content: "\f01a"; } .fa-arrow-circle-o-up:before { content: "\f01b"; } .fa-inbox:before { content: "\f01c"; } .fa-play-circle-o:before { content: "\f01d"; } .fa-rotate-right:before, .fa-repeat:before { content: "\f01e"; } .fa-refresh:before { content: "\f021"; } .fa-list-alt:before { content: "\f022"; } .fa-lock:before { content: "\f023"; } .fa-flag:before { content: "\f024"; } .fa-headphones:before { content: "\f025"; } .fa-volume-off:before { content: "\f026"; } .fa-volume-down:before { content: "\f027"; } .fa-volume-up:before { content: "\f028"; } .fa-qrcode:before { content: "\f029"; } .fa-barcode:before { content: "\f02a"; } .fa-tag:before { content: "\f02b"; } .fa-tags:before { content: "\f02c"; } .fa-book:before { content: "\f02d"; } .fa-bookmark:before { content: "\f02e"; } .fa-print:before { content: "\f02f"; } .fa-camera:before { content: "\f030"; } .fa-font:before { content: "\f031"; } .fa-bold:before { content: "\f032"; } .fa-italic:before { content: "\f033"; } .fa-text-height:before { content: "\f034"; } .fa-text-width:before { content: "\f035"; } .fa-align-left:before { content: "\f036"; } .fa-align-center:before { content: "\f037"; } .fa-align-right:before { content: "\f038"; } .fa-align-justify:before { content: "\f039"; } .fa-list:before { content: "\f03a"; } .fa-dedent:before, .fa-outdent:before { content: "\f03b"; } .fa-indent:before { content: "\f03c"; } .fa-video-camera:before { content: "\f03d"; } .fa-photo:before, .fa-image:before, .fa-picture-o:before { content: "\f03e"; } .fa-pencil:before { content: "\f040"; } .fa-map-marker:before { content: "\f041"; } .fa-adjust:before { content: "\f042"; } .fa-tint:before { content: "\f043"; } .fa-edit:before, .fa-pencil-square-o:before { content: "\f044"; } .fa-share-square-o:before { content: "\f045"; } .fa-check-square-o:before { content: "\f046"; } .fa-arrows:before { content: "\f047"; } .fa-step-backward:before { content: "\f048"; } .fa-fast-backward:before { content: "\f049"; } .fa-backward:before { content: "\f04a"; } .fa-play:before { content: "\f04b"; } .fa-pause:before { content: "\f04c"; } .fa-stop:before { content: "\f04d"; } .fa-forward:before { content: "\f04e"; } .fa-fast-forward:before { content: "\f050"; } .fa-step-forward:before { content: "\f051"; } .fa-eject:before { content: "\f052"; } .fa-chevron-left:before { content: "\f053"; } .fa-chevron-right:before { content: "\f054"; } .fa-plus-circle:before { content: "\f055"; } .fa-minus-circle:before { content: "\f056"; } .fa-times-circle:before { content: "\f057"; } .fa-check-circle:before { content: "\f058"; } .fa-question-circle:before { content: "\f059"; } .fa-info-circle:before { content: "\f05a"; } .fa-crosshairs:before { content: "\f05b"; } .fa-times-circle-o:before { content: "\f05c"; } .fa-check-circle-o:before { content: "\f05d"; } .fa-ban:before { content: "\f05e"; } .fa-arrow-left:before { content: "\f060"; } .fa-arrow-right:before { content: "\f061"; } .fa-arrow-up:before { content: "\f062"; } .fa-arrow-down:before { content: "\f063"; } .fa-mail-forward:before, .fa-share:before { content: "\f064"; } .fa-expand:before { content: "\f065"; } .fa-compress:before { content: "\f066"; } .fa-plus:before { content: "\f067"; } .fa-minus:before { content: "\f068"; } .fa-asterisk:before { content: "\f069"; } .fa-exclamation-circle:before { content: "\f06a"; } .fa-gift:before { content: "\f06b"; } .fa-leaf:before { content: "\f06c"; } .fa-fire:before { content: "\f06d"; } .fa-eye:before { content: "\f06e"; } .fa-eye-slash:before { content: "\f070"; } .fa-warning:before, .fa-exclamation-triangle:before { content: "\f071"; } .fa-plane:before { content: "\f072"; } .fa-calendar:before { content: "\f073"; } .fa-random:before { content: "\f074"; } .fa-comment:before { content: "\f075"; } .fa-magnet:before { content: "\f076"; } .fa-chevron-up:before { content: "\f077"; } .fa-chevron-down:before { content: "\f078"; } .fa-retweet:before { content: "\f079"; } .fa-shopping-cart:before { content: "\f07a"; } .fa-folder:before { content: "\f07b"; } .fa-folder-open:before { content: "\f07c"; } .fa-arrows-v:before { content: "\f07d"; } .fa-arrows-h:before { content: "\f07e"; } .fa-bar-chart-o:before, .fa-bar-chart:before { content: "\f080"; } .fa-twitter-square:before { content: "\f081"; } .fa-facebook-square:before { content: "\f082"; } .fa-camera-retro:before { content: "\f083"; } .fa-key:before { content: "\f084"; } .fa-gears:before, .fa-cogs:before { content: "\f085"; } .fa-comments:before { content: "\f086"; } .fa-thumbs-o-up:before { content: "\f087"; } .fa-thumbs-o-down:before { content: "\f088"; } .fa-star-half:before { content: "\f089"; } .fa-heart-o:before { content: "\f08a"; } .fa-sign-out:before { content: "\f08b"; } .fa-linkedin-square:before { content: "\f08c"; } .fa-thumb-tack:before { content: "\f08d"; } .fa-external-link:before { content: "\f08e"; } .fa-sign-in:before { content: "\f090"; } .fa-trophy:before { content: "\f091"; } .fa-github-square:before { content: "\f092"; } .fa-upload:before { content: "\f093"; } .fa-lemon-o:before { content: "\f094"; } .fa-phone:before { content: "\f095"; } .fa-square-o:before { content: "\f096"; } .fa-bookmark-o:before { content: "\f097"; } .fa-phone-square:before { content: "\f098"; } .fa-twitter:before { content: "\f099"; } .fa-facebook-f:before, .fa-facebook:before { content: "\f09a"; } .fa-github:before { content: "\f09b"; } .fa-unlock:before { content: "\f09c"; } .fa-credit-card:before { content: "\f09d"; } .fa-feed:before, .fa-rss:before { content: "\f09e"; } .fa-hdd-o:before { content: "\f0a0"; } .fa-bullhorn:before { content: "\f0a1"; } .fa-bell:before { content: "\f0f3"; } .fa-certificate:before { content: "\f0a3"; } .fa-hand-o-right:before { content: "\f0a4"; } .fa-hand-o-left:before { content: "\f0a5"; } .fa-hand-o-up:before { content: "\f0a6"; } .fa-hand-o-down:before { content: "\f0a7"; } .fa-arrow-circle-left:before { content: "\f0a8"; } .fa-arrow-circle-right:before { content: "\f0a9"; } .fa-arrow-circle-up:before { content: "\f0aa"; } .fa-arrow-circle-down:before { content: "\f0ab"; } .fa-globe:before { content: "\f0ac"; } .fa-wrench:before { content: "\f0ad"; } .fa-tasks:before { content: "\f0ae"; } .fa-filter:before { content: "\f0b0"; } .fa-briefcase:before { content: "\f0b1"; } .fa-arrows-alt:before { content: "\f0b2"; } .fa-group:before, .fa-users:before { content: "\f0c0"; } .fa-chain:before, .fa-link:before { content: "\f0c1"; } .fa-cloud:before { content: "\f0c2"; } .fa-flask:before { content: "\f0c3"; } .fa-cut:before, .fa-scissors:before { content: "\f0c4"; } .fa-copy:before, .fa-files-o:before { content: "\f0c5"; } .fa-paperclip:before { content: "\f0c6"; } .fa-save:before, .fa-floppy-o:before { content: "\f0c7"; } .fa-square:before { content: "\f0c8"; } .fa-navicon:before, .fa-reorder:before, .fa-bars:before { content: "\f0c9"; } .fa-list-ul:before { content: "\f0ca"; } .fa-list-ol:before { content: "\f0cb"; } .fa-strikethrough:before { content: "\f0cc"; } .fa-underline:before { content: "\f0cd"; } .fa-table:before { content: "\f0ce"; } .fa-magic:before { content: "\f0d0"; } .fa-truck:before { content: "\f0d1"; } .fa-pinterest:before { content: "\f0d2"; } .fa-pinterest-square:before { content: "\f0d3"; } .fa-google-plus-square:before { content: "\f0d4"; } .fa-google-plus:before { content: "\f0d5"; } .fa-money:before { content: "\f0d6"; } .fa-caret-down:before { content: "\f0d7"; } .fa-caret-up:before { content: "\f0d8"; } .fa-caret-left:before { content: "\f0d9"; } .fa-caret-right:before { content: "\f0da"; } .fa-columns:before { content: "\f0db"; } .fa-unsorted:before, .fa-sort:before { content: "\f0dc"; } .fa-sort-down:before, .fa-sort-desc:before { content: "\f0dd"; } .fa-sort-up:before, .fa-sort-asc:before { content: "\f0de"; } .fa-envelope:before { content: "\f0e0"; } .fa-linkedin:before { content: "\f0e1"; } .fa-rotate-left:before, .fa-undo:before { content: "\f0e2"; } .fa-legal:before, .fa-gavel:before { content: "\f0e3"; } .fa-dashboard:before, .fa-tachometer:before { content: "\f0e4"; } .fa-comment-o:before { content: "\f0e5"; } .fa-comments-o:before { content: "\f0e6"; } .fa-flash:before, .fa-bolt:before { content: "\f0e7"; } .fa-sitemap:before { content: "\f0e8"; } .fa-umbrella:before { content: "\f0e9"; } .fa-paste:before, .fa-clipboard:before { content: "\f0ea"; } .fa-lightbulb-o:before { content: "\f0eb"; } .fa-exchange:before { content: "\f0ec"; } .fa-cloud-download:before { content: "\f0ed"; } .fa-cloud-upload:before { content: "\f0ee"; } .fa-user-md:before { content: "\f0f0"; } .fa-stethoscope:before { content: "\f0f1"; } .fa-suitcase:before { content: "\f0f2"; } .fa-bell-o:before { content: "\f0a2"; } .fa-coffee:before { content: "\f0f4"; } .fa-cutlery:before { content: "\f0f5"; } .fa-file-text-o:before { content: "\f0f6"; } .fa-building-o:before { content: "\f0f7"; } .fa-hospital-o:before { content: "\f0f8"; } .fa-ambulance:before { content: "\f0f9"; } .fa-medkit:before { content: "\f0fa"; } .fa-fighter-jet:before { content: "\f0fb"; } .fa-beer:before { content: "\f0fc"; } .fa-h-square:before { content: "\f0fd"; } .fa-plus-square:before { content: "\f0fe"; } .fa-angle-double-left:before { content: "\f100"; } .fa-angle-double-right:before { content: "\f101"; } .fa-angle-double-up:before { content: "\f102"; } .fa-angle-double-down:before { content: "\f103"; } .fa-angle-left:before { content: "\f104"; } .fa-angle-right:before { content: "\f105"; } .fa-angle-up:before { content: "\f106"; } .fa-angle-down:before { content: "\f107"; } .fa-desktop:before { content: "\f108"; } .fa-laptop:before { content: "\f109"; } .fa-tablet:before { content: "\f10a"; } .fa-mobile-phone:before, .fa-mobile:before { content: "\f10b"; } .fa-circle-o:before { content: "\f10c"; } .fa-quote-left:before { content: "\f10d"; } .fa-quote-right:before { content: "\f10e"; } .fa-spinner:before { content: "\f110"; } .fa-circle:before { content: "\f111"; } .fa-mail-reply:before, .fa-reply:before { content: "\f112"; } .fa-github-alt:before { content: "\f113"; } .fa-folder-o:before { content: "\f114"; } .fa-folder-open-o:before { content: "\f115"; } .fa-smile-o:before { content: "\f118"; } .fa-frown-o:before { content: "\f119"; } .fa-meh-o:before { content: "\f11a"; } .fa-gamepad:before { content: "\f11b"; } .fa-keyboard-o:before { content: "\f11c"; } .fa-flag-o:before { content: "\f11d"; } .fa-flag-checkered:before { content: "\f11e"; } .fa-terminal:before { content: "\f120"; } .fa-code:before { content: "\f121"; } .fa-mail-reply-all:before, .fa-reply-all:before { content: "\f122"; } .fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before { content: "\f123"; } .fa-location-arrow:before { content: "\f124"; } .fa-crop:before { content: "\f125"; } .fa-code-fork:before { content: "\f126"; } .fa-unlink:before, .fa-chain-broken:before { content: "\f127"; } .fa-question:before { content: "\f128"; } .fa-info:before { content: "\f129"; } .fa-exclamation:before { content: "\f12a"; } .fa-superscript:before { content: "\f12b"; } .fa-subscript:before { content: "\f12c"; } .fa-eraser:before { content: "\f12d"; } .fa-puzzle-piece:before { content: "\f12e"; } .fa-microphone:before { content: "\f130"; } .fa-microphone-slash:before { content: "\f131"; } .fa-shield:before { content: "\f132"; } .fa-calendar-o:before { content: "\f133"; } .fa-fire-extinguisher:before { content: "\f134"; } .fa-rocket:before { content: "\f135"; } .fa-maxcdn:before { content: "\f136"; } .fa-chevron-circle-left:before { content: "\f137"; } .fa-chevron-circle-right:before { content: "\f138"; } .fa-chevron-circle-up:before { content: "\f139"; } .fa-chevron-circle-down:before { content: "\f13a"; } .fa-html5:before { content: "\f13b"; } .fa-css3:before { content: "\f13c"; } .fa-anchor:before { content: "\f13d"; } .fa-unlock-alt:before { content: "\f13e"; } .fa-bullseye:before { content: "\f140"; } .fa-ellipsis-h:before { content: "\f141"; } .fa-ellipsis-v:before { content: "\f142"; } .fa-rss-square:before { content: "\f143"; } .fa-play-circle:before { content: "\f144"; } .fa-ticket:before { content: "\f145"; } .fa-minus-square:before { content: "\f146"; } .fa-minus-square-o:before { content: "\f147"; } .fa-level-up:before { content: "\f148"; } .fa-level-down:before { content: "\f149"; } .fa-check-square:before { content: "\f14a"; } .fa-pencil-square:before { content: "\f14b"; } .fa-external-link-square:before { content: "\f14c"; } .fa-share-square:before { content: "\f14d"; } .fa-compass:before { content: "\f14e"; } .fa-toggle-down:before, .fa-caret-square-o-down:before { content: "\f150"; } .fa-toggle-up:before, .fa-caret-square-o-up:before { content: "\f151"; } .fa-toggle-right:before, .fa-caret-square-o-right:before { content: "\f152"; } .fa-euro:before, .fa-eur:before { content: "\f153"; } .fa-gbp:before { content: "\f154"; } .fa-dollar:before, .fa-usd:before { content: "\f155"; } .fa-rupee:before, .fa-inr:before { content: "\f156"; } .fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { content: "\f157"; } .fa-ruble:before, .fa-rouble:before, .fa-rub:before { content: "\f158"; } .fa-won:before, .fa-krw:before { content: "\f159"; } .fa-bitcoin:before, .fa-btc:before { content: "\f15a"; } .fa-file:before { content: "\f15b"; } .fa-file-text:before { content: "\f15c"; } .fa-sort-alpha-asc:before { content: "\f15d"; } .fa-sort-alpha-desc:before { content: "\f15e"; } .fa-sort-amount-asc:before { content: "\f160"; } .fa-sort-amount-desc:before { content: "\f161"; } .fa-sort-numeric-asc:before { content: "\f162"; } .fa-sort-numeric-desc:before { content: "\f163"; } .fa-thumbs-up:before { content: "\f164"; } .fa-thumbs-down:before { content: "\f165"; } .fa-youtube-square:before { content: "\f166"; } .fa-youtube:before { content: "\f167"; } .fa-xing:before { content: "\f168"; } .fa-xing-square:before { content: "\f169"; } .fa-youtube-play:before { content: "\f16a"; } .fa-dropbox:before { content: "\f16b"; } .fa-stack-overflow:before { content: "\f16c"; } .fa-instagram:before { content: "\f16d"; } .fa-flickr:before { content: "\f16e"; } .fa-adn:before { content: "\f170"; } .fa-bitbucket:before { content: "\f171"; } .fa-bitbucket-square:before { content: "\f172"; } .fa-tumblr:before { content: "\f173"; } .fa-tumblr-square:before { content: "\f174"; } .fa-long-arrow-down:before { content: "\f175"; } .fa-long-arrow-up:before { content: "\f176"; } .fa-long-arrow-left:before { content: "\f177"; } .fa-long-arrow-right:before { content: "\f178"; } .fa-apple:before { content: "\f179"; } .fa-windows:before { content: "\f17a"; } .fa-android:before { content: "\f17b"; } .fa-linux:before { content: "\f17c"; } .fa-dribbble:before { content: "\f17d"; } .fa-skype:before { content: "\f17e"; } .fa-foursquare:before { content: "\f180"; } .fa-trello:before { content: "\f181"; } .fa-female:before { content: "\f182"; } .fa-male:before { content: "\f183"; } .fa-gittip:before, .fa-gratipay:before { content: "\f184"; } .fa-sun-o:before { content: "\f185"; } .fa-moon-o:before { content: "\f186"; } .fa-archive:before { content: "\f187"; } .fa-bug:before { content: "\f188"; } .fa-vk:before { content: "\f189"; } .fa-weibo:before { content: "\f18a"; } .fa-renren:before { content: "\f18b"; } .fa-pagelines:before { content: "\f18c"; } .fa-stack-exchange:before { content: "\f18d"; } .fa-arrow-circle-o-right:before { content: "\f18e"; } .fa-arrow-circle-o-left:before { content: "\f190"; } .fa-toggle-left:before, .fa-caret-square-o-left:before { content: "\f191"; } .fa-dot-circle-o:before { content: "\f192"; } .fa-wheelchair:before { content: "\f193"; } .fa-vimeo-square:before { content: "\f194"; } .fa-turkish-lira:before, .fa-try:before { content: "\f195"; } .fa-plus-square-o:before { content: "\f196"; } .fa-space-shuttle:before { content: "\f197"; } .fa-slack:before { content: "\f198"; } .fa-envelope-square:before { content: "\f199"; } .fa-wordpress:before { content: "\f19a"; } .fa-openid:before { content: "\f19b"; } .fa-institution:before, .fa-bank:before, .fa-university:before { content: "\f19c"; } .fa-mortar-board:before, .fa-graduation-cap:before { content: "\f19d"; } .fa-yahoo:before { content: "\f19e"; } .fa-google:before { content: "\f1a0"; } .fa-reddit:before { content: "\f1a1"; } .fa-reddit-square:before { content: "\f1a2"; } .fa-stumbleupon-circle:before { content: "\f1a3"; } .fa-stumbleupon:before { content: "\f1a4"; } .fa-delicious:before { content: "\f1a5"; } .fa-digg:before { content: "\f1a6"; } .fa-pied-piper:before { content: "\f1a7"; } .fa-pied-piper-alt:before { content: "\f1a8"; } .fa-drupal:before { content: "\f1a9"; } .fa-joomla:before { content: "\f1aa"; } .fa-language:before { content: "\f1ab"; } .fa-fax:before { content: "\f1ac"; } .fa-building:before { content: "\f1ad"; } .fa-child:before { content: "\f1ae"; } .fa-paw:before { content: "\f1b0"; } .fa-spoon:before { content: "\f1b1"; } .fa-cube:before { content: "\f1b2"; } .fa-cubes:before { content: "\f1b3"; } .fa-behance:before { content: "\f1b4"; } .fa-behance-square:before { content: "\f1b5"; } .fa-steam:before { content: "\f1b6"; } .fa-steam-square:before { content: "\f1b7"; } .fa-recycle:before { content: "\f1b8"; } .fa-automobile:before, .fa-car:before { content: "\f1b9"; } .fa-cab:before, .fa-taxi:before { content: "\f1ba"; } .fa-tree:before { content: "\f1bb"; } .fa-spotify:before { content: "\f1bc"; } .fa-deviantart:before { content: "\f1bd"; } .fa-soundcloud:before { content: "\f1be"; } .fa-database:before { content: "\f1c0"; } .fa-file-pdf-o:before { content: "\f1c1"; } .fa-file-word-o:before { content: "\f1c2"; } .fa-file-excel-o:before { content: "\f1c3"; } .fa-file-powerpoint-o:before { content: "\f1c4"; } .fa-file-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before { content: "\f1c5"; } .fa-file-zip-o:before, .fa-file-archive-o:before { content: "\f1c6"; } .fa-file-sound-o:before, .fa-file-audio-o:before { content: "\f1c7"; } .fa-file-movie-o:before, .fa-file-video-o:before { content: "\f1c8"; } .fa-file-code-o:before { content: "\f1c9"; } .fa-vine:before { content: "\f1ca"; } .fa-codepen:before { content: "\f1cb"; } .fa-jsfiddle:before { content: "\f1cc"; } .fa-life-bouy:before, .fa-life-buoy:before, .fa-life-saver:before, .fa-support:before, .fa-life-ring:before { content: "\f1cd"; } .fa-circle-o-notch:before { content: "\f1ce"; } .fa-ra:before, .fa-rebel:before { content: "\f1d0"; } .fa-ge:before, .fa-empire:before { content: "\f1d1"; } .fa-git-square:before { content: "\f1d2"; } .fa-git:before { content: "\f1d3"; } .fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before { content: "\f1d4"; } .fa-tencent-weibo:before { content: "\f1d5"; } .fa-qq:before { content: "\f1d6"; } .fa-wechat:before, .fa-weixin:before { content: "\f1d7"; } .fa-send:before, .fa-paper-plane:before { content: "\f1d8"; } .fa-send-o:before, .fa-paper-plane-o:before { content: "\f1d9"; } .fa-history:before { content: "\f1da"; } .fa-circle-thin:before { content: "\f1db"; } .fa-header:before { content: "\f1dc"; } .fa-paragraph:before { content: "\f1dd"; } .fa-sliders:before { content: "\f1de"; } .fa-share-alt:before { content: "\f1e0"; } .fa-share-alt-square:before { content: "\f1e1"; } .fa-bomb:before { content: "\f1e2"; } .fa-soccer-ball-o:before, .fa-futbol-o:before { content: "\f1e3"; } .fa-tty:before { content: "\f1e4"; } .fa-binoculars:before { content: "\f1e5"; } .fa-plug:before { content: "\f1e6"; } .fa-slideshare:before { content: "\f1e7"; } .fa-twitch:before { content: "\f1e8"; } .fa-yelp:before { content: "\f1e9"; } .fa-newspaper-o:before { content: "\f1ea"; } .fa-wifi:before { content: "\f1eb"; } .fa-calculator:before { content: "\f1ec"; } .fa-paypal:before { content: "\f1ed"; } .fa-google-wallet:before { content: "\f1ee"; } .fa-cc-visa:before { content: "\f1f0"; } .fa-cc-mastercard:before { content: "\f1f1"; } .fa-cc-discover:before { content: "\f1f2"; } .fa-cc-amex:before { content: "\f1f3"; } .fa-cc-paypal:before { content: "\f1f4"; } .fa-cc-stripe:before { content: "\f1f5"; } .fa-bell-slash:before { content: "\f1f6"; } .fa-bell-slash-o:before { content: "\f1f7"; } .fa-trash:before { content: "\f1f8"; } .fa-copyright:before { content: "\f1f9"; } .fa-at:before { content: "\f1fa"; } .fa-eyedropper:before { content: "\f1fb"; } .fa-paint-brush:before { content: "\f1fc"; } .fa-birthday-cake:before { content: "\f1fd"; } .fa-area-chart:before { content: "\f1fe"; } .fa-pie-chart:before { content: "\f200"; } .fa-line-chart:before { content: "\f201"; } .fa-lastfm:before { content: "\f202"; } .fa-lastfm-square:before { content: "\f203"; } .fa-toggle-off:before { content: "\f204"; } .fa-toggle-on:before { content: "\f205"; } .fa-bicycle:before { content: "\f206"; } .fa-bus:before { content: "\f207"; } .fa-ioxhost:before { content: "\f208"; } .fa-angellist:before { content: "\f209"; } .fa-cc:before { content: "\f20a"; } .fa-shekel:before, .fa-sheqel:before, .fa-ils:before { content: "\f20b"; } .fa-meanpath:before { content: "\f20c"; } .fa-buysellads:before { content: "\f20d"; } .fa-connectdevelop:before { content: "\f20e"; } .fa-dashcube:before { content: "\f210"; } .fa-forumbee:before { content: "\f211"; } .fa-leanpub:before { content: "\f212"; } .fa-sellsy:before { content: "\f213"; } .fa-shirtsinbulk:before { content: "\f214"; } .fa-simplybuilt:before { content: "\f215"; } .fa-skyatlas:before { content: "\f216"; } .fa-cart-plus:before { content: "\f217"; } .fa-cart-arrow-down:before { content: "\f218"; } .fa-diamond:before { content: "\f219"; } .fa-ship:before { content: "\f21a"; } .fa-user-secret:before { content: "\f21b"; } .fa-motorcycle:before { content: "\f21c"; } .fa-street-view:before { content: "\f21d"; } .fa-heartbeat:before { content: "\f21e"; } .fa-venus:before { content: "\f221"; } .fa-mars:before { content: "\f222"; } .fa-mercury:before { content: "\f223"; } .fa-intersex:before, .fa-transgender:before { content: "\f224"; } .fa-transgender-alt:before { content: "\f225"; } .fa-venus-double:before { content: "\f226"; } .fa-mars-double:before { content: "\f227"; } .fa-venus-mars:before { content: "\f228"; } .fa-mars-stroke:before { content: "\f229"; } .fa-mars-stroke-v:before { content: "\f22a"; } .fa-mars-stroke-h:before { content: "\f22b"; } .fa-neuter:before { content: "\f22c"; } .fa-genderless:before { content: "\f22d"; } .fa-facebook-official:before { content: "\f230"; } .fa-pinterest-p:before { content: "\f231"; } .fa-whatsapp:before { content: "\f232"; } .fa-server:before { content: "\f233"; } .fa-user-plus:before { content: "\f234"; } .fa-user-times:before { content: "\f235"; } .fa-hotel:before, .fa-bed:before { content: "\f236"; } .fa-viacoin:before { content: "\f237"; } .fa-train:before { content: "\f238"; } .fa-subway:before { content: "\f239"; } .fa-medium:before { content: "\f23a"; } .fa-yc:before, .fa-y-combinator:before { content: "\f23b"; } .fa-optin-monster:before { content: "\f23c"; } .fa-opencart:before { content: "\f23d"; } .fa-expeditedssl:before { content: "\f23e"; } .fa-battery-4:before, .fa-battery-full:before { content: "\f240"; } .fa-battery-3:before, .fa-battery-three-quarters:before { content: "\f241"; } .fa-battery-2:before, .fa-battery-half:before { content: "\f242"; } .fa-battery-1:before, .fa-battery-quarter:before { content: "\f243"; } .fa-battery-0:before, .fa-battery-empty:before { content: "\f244"; } .fa-mouse-pointer:before { content: "\f245"; } .fa-i-cursor:before { content: "\f246"; } .fa-object-group:before { content: "\f247"; } .fa-object-ungroup:before { content: "\f248"; } .fa-sticky-note:before { content: "\f249"; } .fa-sticky-note-o:before { content: "\f24a"; } .fa-cc-jcb:before { content: "\f24b"; } .fa-cc-diners-club:before { content: "\f24c"; } .fa-clone:before { content: "\f24d"; } .fa-balance-scale:before { content: "\f24e"; } .fa-hourglass-o:before { content: "\f250"; } .fa-hourglass-1:before, .fa-hourglass-start:before { content: "\f251"; } .fa-hourglass-2:before, .fa-hourglass-half:before { content: "\f252"; } .fa-hourglass-3:before, .fa-hourglass-end:before { content: "\f253"; } .fa-hourglass:before { content: "\f254"; } .fa-hand-grab-o:before, .fa-hand-rock-o:before { content: "\f255"; } .fa-hand-stop-o:before, .fa-hand-paper-o:before { content: "\f256"; } .fa-hand-scissors-o:before { content: "\f257"; } .fa-hand-lizard-o:before { content: "\f258"; } .fa-hand-spock-o:before { content: "\f259"; } .fa-hand-pointer-o:before { content: "\f25a"; } .fa-hand-peace-o:before { content: "\f25b"; } .fa-trademark:before { content: "\f25c"; } .fa-registered:before { content: "\f25d"; } .fa-creative-commons:before { content: "\f25e"; } .fa-gg:before { content: "\f260"; } .fa-gg-circle:before { content: "\f261"; } .fa-tripadvisor:before { content: "\f262"; } .fa-odnoklassniki:before { content: "\f263"; } .fa-odnoklassniki-square:before { content: "\f264"; } .fa-get-pocket:before { content: "\f265"; } .fa-wikipedia-w:before { content: "\f266"; } .fa-safari:before { content: "\f267"; } .fa-chrome:before { content: "\f268"; } .fa-firefox:before { content: "\f269"; } .fa-opera:before { content: "\f26a"; } .fa-internet-explorer:before { content: "\f26b"; } .fa-tv:before, .fa-television:before { content: "\f26c"; } .fa-contao:before { content: "\f26d"; } .fa-500px:before { content: "\f26e"; } .fa-amazon:before { content: "\f270"; } .fa-calendar-plus-o:before { content: "\f271"; } .fa-calendar-minus-o:before { content: "\f272"; } .fa-calendar-times-o:before { content: "\f273"; } .fa-calendar-check-o:before { content: "\f274"; } .fa-industry:before { content: "\f275"; } .fa-map-pin:before { content: "\f276"; } .fa-map-signs:before { content: "\f277"; } .fa-map-o:before { content: "\f278"; } .fa-map:before { content: "\f279"; } .fa-commenting:before { content: "\f27a"; } .fa-commenting-o:before { content: "\f27b"; } .fa-houzz:before { content: "\f27c"; } .fa-vimeo:before { content: "\f27d"; } .fa-black-tie:before { content: "\f27e"; } .fa-fonticons:before { content: "\f280"; } .fa-reddit-alien:before { content: "\f281"; } .fa-edge:before { content: "\f282"; } .fa-credit-card-alt:before { content: "\f283"; } .fa-codiepie:before { content: "\f284"; } .fa-modx:before { content: "\f285"; } .fa-fort-awesome:before { content: "\f286"; } .fa-usb:before { content: "\f287"; } .fa-product-hunt:before { content: "\f288"; } .fa-mixcloud:before { content: "\f289"; } .fa-scribd:before { content: "\f28a"; } .fa-pause-circle:before { content: "\f28b"; } .fa-pause-circle-o:before { content: "\f28c"; } .fa-stop-circle:before { content: "\f28d"; } .fa-stop-circle-o:before { content: "\f28e"; } .fa-shopping-bag:before { content: "\f290"; } .fa-shopping-basket:before { content: "\f291"; } .fa-hashtag:before { content: "\f292"; } .fa-bluetooth:before { content: "\f293"; } .fa-bluetooth-b:before { content: "\f294"; } .fa-percent:before { content: "\f295"; } goconvey-1.6.1/web/client/resources/css/themes/000077500000000000000000000000001266412531300214755ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/css/themes/dark-bigtext.css000066400000000000000000000225321266412531300246000ustar00rootroot00000000000000/* This is a fork of the dark.css theme. The only changes from dark.css are near the very end. */ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-corner { background: transparent; } ::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, .35); border-radius: 10px; } body { color: #D0D0D0; background: fixed #040607; background: fixed -moz-linear-gradient(top, hsl(200,27%,2%) 0%, hsl(203,29%,26%) 100%); background: fixed -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(200,27%,2%)), color-stop(100%,hsl(203,29%,26%))); background: fixed -webkit-linear-gradient(top, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); background: fixed -o-linear-gradient(top, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); background: fixed -ms-linear-gradient(top, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); background: fixed linear-gradient(to bottom, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#040607', endColorstr='#2f4756',GradientType=0 ); } a, .toggle-all-pkg { color: #247D9E; } a:hover, .toggle-all-pkg:hover { color: #33B5E5; } input[type=text] { border-bottom-color: #33B5E5; color: #BBB; } ::-webkit-input-placeholder { color: #555; } :-moz-placeholder { color: #555; } ::-moz-placeholder { color: #555; } :-ms-input-placeholder { color: #555; } .overall { /* Using box-shadow here is not very performant but allows us to animate the change of the background color much more easily. This box-shadow is an ALTERNATIVE, not supplement, to using gradients in this case. */ box-shadow: inset 0 150px 100px -110px rgba(0, 0, 0, .5); } .overall.ok { background: #688E00; } .overall.fail { background: #DB8700; } .overall.panic { background: #A80000; } .overall.buildfail { background: #A4A8AA; } .overall .status { color: #EEE; } .server-down { background: rgba(255, 45, 45, 0.55); color: #FFF; } .toggler { background: #132535; } .toggler:hover { background: #1C374F; } .controls { border-bottom: 1px solid #33B5E5; } .controls li { color: #2A5A84; } .controls li:hover { background: #132535; color: #33B5E5; } .sel { background: #33B5E5 !important; color: #FFF !important; } .pkg-cover-name { text-shadow: 1px 1px 0px #000; } .pkg-cover-name b, .story-pkg-name b { color: #FFF; font-weight: bold; } .pkg-cover:hover, .pkg-cover:hover b { color: #FFF; } .expandable { border-top-color: #33B5E5; } .expandable { background: rgba(0, 0, 0, .2); } .history .item.ok { background: #3f5400; background: -moz-linear-gradient(top, hsl(75,100%,16%) 0%, hsl(76,100%,28%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(75,100%,16%)), color-stop(100%,hsl(76,100%,28%))); background: -webkit-linear-gradient(top, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); background: -o-linear-gradient(top, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); background: -ms-linear-gradient(top, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); background: linear-gradient(to bottom, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3f5400', endColorstr='#698f00',GradientType=0 ); } .history .item.fail { background: #7f4e00; background: -moz-linear-gradient(top, hsl(37,100%,25%) 0%, hsl(37,100%,43%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(37,100%,25%)), color-stop(100%,hsl(37,100%,43%))); background: -webkit-linear-gradient(top, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); background: -o-linear-gradient(top, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); background: -ms-linear-gradient(top, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); background: linear-gradient(to bottom, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7f4e00', endColorstr='#db8700',GradientType=0 ); } .history .item.panic { background: #660000; background: -moz-linear-gradient(top, hsl(0,100%,20%) 0%, hsl(0,100%,33%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(0,100%,20%)), color-stop(100%,hsl(0,100%,33%))); background: -webkit-linear-gradient(top, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); background: -o-linear-gradient(top, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); background: -ms-linear-gradient(top, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); background: linear-gradient(to bottom, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#660000', endColorstr='#a80000',GradientType=0 ); } .history .item.buildfail { background: #282f33; background: -moz-linear-gradient(top, hsl(202,12%,18%) 0%, hsl(208,5%,48%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(202,12%,18%)), color-stop(100%,hsl(208,5%,48%))); background: -webkit-linear-gradient(top, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); background: -o-linear-gradient(top, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); background: -ms-linear-gradient(top, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); background: linear-gradient(to bottom, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#282f33', endColorstr='#757c82',GradientType=0 ); } .enum { border-color: #2B597F; } .enum > li { border-left-color: #2B597F; } .enum > li:hover { background: rgba(55, 114, 163, .25); } .group { background: -moz-linear-gradient(top, rgba(16,59,71,0) 0%, rgba(16,59,71,1) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(16,59,71,0)), color-stop(100%,rgba(16,59,71,1))); background: -webkit-linear-gradient(top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); background: -o-linear-gradient(top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); background: -ms-linear-gradient(top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); background: linear-gradient(to top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00103b47', endColorstr='#103b47',GradientType=0 ); } .stats { color: #FFF; } .error { color: #F58888 !important; background: rgba(255, 45, 45, 0.35) !important; } .spin-slowly, .spin-once { color: #33B5E5 !important; } .frame .col, footer { border-color: #33B5E5; } footer { background: rgba(0, 0, 0, .5); } footer .recording .fa { color: #CC0000; } footer .replay .fa { color: #33B5E5; } footer .paused .fa { color: #AAA; } footer .recording.replay .fa { color: #33B5E5; } .buildfail-pkg { background: rgba(255, 255, 255, .1); } .buildfail-output { background: rgba(255, 255, 255, .2); } .panic-pkg { background: rgba(255, 0, 0, .3); } .panic-story { padding: 10px; background: rgba(255, 0, 0, .1); } .panic-story a, .panic-summary { color: #E94A4A; } .panic-output { color: #FF8181; } .failure-pkg { background: rgba(255, 153, 0, .42); } .failure-story { padding: 10px; background: rgba(255, 153, 0, .1); } .failure-story a { color: #FFB518; } .failure-output { color: #FFBD47; } .failure-file { color: #FFF; } .diffviewer td { border-color: rgba(0, 0, 0, .3); } /* prettyTextDiff expected/deleted colors */ .diffviewer .exp, .diff del { background: rgba(131, 252, 131, 0.22); } /* prettyTextDiff actual/inserted colors */ .diffviewer .act, .diff ins { background: rgba(255, 52, 52, 0.33); } .story-links a, .test-name-link a { color: inherit; } .story-pkg { background: rgba(0, 0, 0, .4); } .story-pkg:hover { background: rgba(255, 255, 255, .05); } .story-line + .story-line { border-top: 1px dashed rgba(255, 255, 255, .08); } .story-line-desc .message { color: #999; } .story-line-summary-container { border-right: 1px dashed #333; } .story-line.ok .story-line-status { background: #008000; } .story-line.ok:hover, .story-line.ok.story-line-sel { background: rgba(0, 128, 0, .1); } .story-line.fail .story-line-status { background: #EA9C4D; } .story-line.fail:hover, .story-line.fail.story-line-sel { background: rgba(234, 156, 77, .1); } .story-line.panic .story-line-status { background: #FF3232; } .story-line.panic:hover, .story-line.panic.story-line-sel { background: rgba(255, 50, 50, .1); } .story-line.skip .story-line-status { background: #AAA; } .story-line.skip:hover, .story-line.skip.story-line-sel { background: rgba(255, 255, 255, .1); } .statusicon.ok { color: #76C13C; } .statusicon.fail, .fail-clr { color: #EA9C4D; } .statusicon.panic, .statusicon.panic .fa, .panic-clr { color: #FF3232; } .statusicon.skip, .skip-clr { color: #888; } .log .timestamp { color: #999; } .clr-red { color: #FF2222; } .tipsy-inner { background-color: #FAFAFA; color: #222; } .tipsy-arrow { border: 8px dashed #FAFAFA; } .tipsy-arrow-n, .tipsy-arrow-s, .tipsy-arrow-e, .tipsy-arrow-w, { border-color: #FAFAFA; } /***************************************************************/ /*************************** Tweaks ****************************/ /***************************************************************/ /* More space for stories */ div#col-3 { display: none; } /* hides the log */ div#col-2 { width: 85%; } /* fill it in with stories */ /* Bigger Text */ .story-line { font-size: 16px; } .story-line b { font-size: 20px; } td.story-pkg-name { font-size: 24px; } /* Smaller Header */ div.overall { padding: 10px 0 0px; } .overall .status { font-size: 36px; } /***************************************************************/ goconvey-1.6.1/web/client/resources/css/themes/dark.css000066400000000000000000000212671266412531300231400ustar00rootroot00000000000000::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-corner { background: transparent; } ::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, .35); border-radius: 10px; } body { color: #D0D0D0; background: fixed #040607; background: fixed -moz-linear-gradient(top, hsl(200,27%,2%) 0%, hsl(203,29%,26%) 100%); background: fixed -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(200,27%,2%)), color-stop(100%,hsl(203,29%,26%))); background: fixed -webkit-linear-gradient(top, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); background: fixed -o-linear-gradient(top, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); background: fixed -ms-linear-gradient(top, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); background: fixed linear-gradient(to bottom, hsl(200,27%,2%) 0%,hsl(203,29%,26%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#040607', endColorstr='#2f4756',GradientType=0 ); } a, .toggle-all-pkg { color: #247D9E; } a:hover, .toggle-all-pkg:hover { color: #33B5E5; } input[type=text] { border-bottom-color: #33B5E5; color: #BBB; } ::-webkit-input-placeholder { color: #555; } :-moz-placeholder { color: #555; } ::-moz-placeholder { color: #555; } :-ms-input-placeholder { color: #555; } .overall { /* Using box-shadow here is not very performant but allows us to animate the change of the background color much more easily. This box-shadow is an ALTERNATIVE, not supplement, to using gradients in this case. */ box-shadow: inset 0 150px 100px -110px rgba(0, 0, 0, .5); } .overall.ok { background: #688E00; } .overall.fail { background: #DB8700; } .overall.panic { background: #A80000; } .overall.buildfail { background: #A4A8AA; } .overall .status { color: #EEE; } .server-down { background: rgba(255, 45, 45, 0.55); color: #FFF; } .toggler { background: #132535; } .toggler:hover { background: #1C374F; } .controls { border-bottom: 1px solid #33B5E5; } .controls li { color: #2A5A84; } .controls li:hover { background: #132535; color: #33B5E5; } .sel { background: #33B5E5 !important; color: #FFF !important; } .pkg-cover-name { text-shadow: 1px 1px 0px #000; } .pkg-cover-name b, .story-pkg-name b { color: #FFF; font-weight: bold; } .pkg-cover:hover, .pkg-cover:hover b { color: #FFF; } .expandable { border-top-color: #33B5E5; } .expandable { background: rgba(0, 0, 0, .2); } .history .item.ok { background: #3f5400; background: -moz-linear-gradient(top, hsl(75,100%,16%) 0%, hsl(76,100%,28%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(75,100%,16%)), color-stop(100%,hsl(76,100%,28%))); background: -webkit-linear-gradient(top, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); background: -o-linear-gradient(top, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); background: -ms-linear-gradient(top, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); background: linear-gradient(to bottom, hsl(75,100%,16%) 0%,hsl(76,100%,28%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3f5400', endColorstr='#698f00',GradientType=0 ); } .history .item.fail { background: #7f4e00; background: -moz-linear-gradient(top, hsl(37,100%,25%) 0%, hsl(37,100%,43%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(37,100%,25%)), color-stop(100%,hsl(37,100%,43%))); background: -webkit-linear-gradient(top, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); background: -o-linear-gradient(top, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); background: -ms-linear-gradient(top, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); background: linear-gradient(to bottom, hsl(37,100%,25%) 0%,hsl(37,100%,43%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7f4e00', endColorstr='#db8700',GradientType=0 ); } .history .item.panic { background: #660000; background: -moz-linear-gradient(top, hsl(0,100%,20%) 0%, hsl(0,100%,33%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(0,100%,20%)), color-stop(100%,hsl(0,100%,33%))); background: -webkit-linear-gradient(top, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); background: -o-linear-gradient(top, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); background: -ms-linear-gradient(top, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); background: linear-gradient(to bottom, hsl(0,100%,20%) 0%,hsl(0,100%,33%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#660000', endColorstr='#a80000',GradientType=0 ); } .history .item.buildfail { background: #282f33; background: -moz-linear-gradient(top, hsl(202,12%,18%) 0%, hsl(208,5%,48%) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,hsl(202,12%,18%)), color-stop(100%,hsl(208,5%,48%))); background: -webkit-linear-gradient(top, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); background: -o-linear-gradient(top, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); background: -ms-linear-gradient(top, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); background: linear-gradient(to bottom, hsl(202,12%,18%) 0%,hsl(208,5%,48%) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#282f33', endColorstr='#757c82',GradientType=0 ); } .enum { border-color: #2B597F; } .enum > li { border-left-color: #2B597F; } .enum > li:hover { background: rgba(55, 114, 163, .25); } .group { background: -moz-linear-gradient(top, rgba(16,59,71,0) 0%, rgba(16,59,71,1) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(16,59,71,0)), color-stop(100%,rgba(16,59,71,1))); background: -webkit-linear-gradient(top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); background: -o-linear-gradient(top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); background: -ms-linear-gradient(top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); background: linear-gradient(to top, rgba(16,59,71,0) 0%,rgba(16,59,71,1) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00103b47', endColorstr='#103b47',GradientType=0 ); } .stats { color: #FFF; } .error { color: #F58888 !important; background: rgba(255, 45, 45, 0.35) !important; } .spin-slowly, .spin-once { color: #33B5E5 !important; } .frame .col, footer { border-color: #33B5E5; } footer { background: rgba(0, 0, 0, .5); } footer .recording .fa { color: #CC0000; } footer .replay .fa { color: #33B5E5; } footer .paused .fa { color: #AAA; } footer .recording.replay .fa { color: #33B5E5; } .buildfail-pkg { background: rgba(255, 255, 255, .1); } .buildfail-output { background: rgba(255, 255, 255, .2); } .panic-pkg { background: rgba(255, 0, 0, .3); } .panic-story { padding: 10px; background: rgba(255, 0, 0, .1); } .panic-story a, .panic-summary { color: #E94A4A; } .panic-output { color: #FF8181; } .failure-pkg { background: rgba(255, 153, 0, .42); } .failure-story { padding: 10px; background: rgba(255, 153, 0, .1); } .failure-story a { color: #FFB518; } .failure-output { color: #FFBD47; } .failure-file { color: #FFF; } .diffviewer td { border-color: rgba(0, 0, 0, .3); } /* prettyTextDiff expected/deleted colors */ .diffviewer .exp, .diff del { background: rgba(131, 252, 131, 0.22); } /* prettyTextDiff actual/inserted colors */ .diffviewer .act, .diff ins { background: rgba(255, 52, 52, 0.33); } .story-links a, .test-name-link a { color: inherit; } .story-pkg { background: rgba(0, 0, 0, .4); } .story-pkg:hover { background: rgba(255, 255, 255, .05); } .story-line + .story-line { border-top: 1px dashed rgba(255, 255, 255, .08); } .story-line-desc .message { color: #999; } .story-line-summary-container { border-right: 1px dashed #333; } .story-line.ok .story-line-status { background: #008000; } .story-line.ok:hover, .story-line.ok.story-line-sel { background: rgba(0, 128, 0, .1); } .story-line.fail .story-line-status { background: #EA9C4D; } .story-line.fail:hover, .story-line.fail.story-line-sel { background: rgba(234, 156, 77, .1); } .story-line.panic .story-line-status { background: #FF3232; } .story-line.panic:hover, .story-line.panic.story-line-sel { background: rgba(255, 50, 50, .1); } .story-line.skip .story-line-status { background: #AAA; } .story-line.skip:hover, .story-line.skip.story-line-sel { background: rgba(255, 255, 255, .1); } .statusicon.ok { color: #76C13C; } .statusicon.fail, .fail-clr { color: #EA9C4D; } .statusicon.panic, .statusicon.panic .fa, .panic-clr { color: #FF3232; } .statusicon.skip, .skip-clr { color: #888; } .ansi-green { color: #76C13C; } .ansi-yellow { color: #EA9C4D; } .log .timestamp { color: #999; } .clr-red { color: #FF2222; } .tipsy-inner { background-color: #FAFAFA; color: #222; } .tipsy-arrow { border: 8px dashed #FAFAFA; } .tipsy-arrow-n, .tipsy-arrow-s, .tipsy-arrow-e, .tipsy-arrow-w, { border-color: #FAFAFA; } goconvey-1.6.1/web/client/resources/css/themes/light.css000066400000000000000000000106201266412531300233150ustar00rootroot00000000000000::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, .35); border-radius: 10px; } ::-webkit-input-placeholder { color: #CCC; } :-moz-placeholder { color: #CCC; } ::-moz-placeholder { color: #CCC; } :-ms-input-placeholder { color: #CCC; } body { color: #444; background: #F4F4F4; } a { color: #247D9E; } a:hover { color: #33B5E5; } .overall.ok, .history .item.ok { background: #8CB700; /* Can't decide: #5AA02C */ } .overall.fail, .history .item.fail { background: #E79C07; } .overall.panic, .history .item.panic { background: #BB0000; } .overall.buildfail, .history .item.buildfail { background: #828c95; } .overall .status { color: #EEE; } .server-down { background: #BB0000; color: #FFF; } .toggler { background: #6887A3; color: #FFF; } .toggler:hover { background: #465B6D; } .toggler .fa { color: #FFF; } #logo { color: #6887A3; } .controls { border-bottom: 1px solid #33B5E5; } li.fa, a.fa, .toggle-all-pkg { color: #6887A3; } li.fa:hover, a.fa:hover, .toggle-all-pkg:hover { color: #465B6D; } li.fa:active, a.fa:active, .toggle-all-pkg:active { color: #33B5E5; } .controls li, .enum > li { border-left-color: #33B5E5; } .controls li:hover, .enum > li:hover { background: #CFE6F9; } .enum { border-color: #33B5E5; } .sel { background: #33B5E5 !important; color: #FFF !important; } .pkg-cover-name b, .story-pkg-name b { color: #000; font-weight: bold; } .expandable { background: rgba(0, 0, 0, .1); border-top-color: #33B5E5; } .history .item { color: #FFF; } .spin-slowly, .spin-once { color: #33B5E5 !important; } input[type=text] { border-bottom-color: #33B5E5; color: #333; } .error { color: #CC0000 !important; background: #FFD2D2 !important; } footer { background: #F4F4F4; } .frame .col, footer { border-color: #33B5E5; } footer .recording .fa { color: #CC0000; } footer .replay .fa { color: #33B5E5; } footer .paused .fa { color: #333; } .buildfail-pkg { background: #CCC; } .buildfail-output { background: #EEE; } .panic-pkg { background: #E94D4D; color: #FFF; } .panics .panic-details { border: 5px solid #E94D4D; border-top: 0; border-bottom: 0; } .panic-details { color: #CC0000; } .panics .panic:last-child .panic-details { border-bottom: 5px solid #E94D4D; } .panic-story { padding: 10px; } .panics .panic-output { background: #FFF; } .failure-pkg { background: #FFA300; color: #FFF; } .failures .failure-details { border: 5px solid #FFA300; border-top: 0; border-bottom: 0; } .failures .failure:last-child .failure-details { border-bottom: 5px solid #FFA300; } .failure-story { padding: 10px; color: #A87A00; } .stories .failure-output { color: #EA9C4D; } .failures .failure-output { background: #FFF; } .failure-file { color: #000; } .diffviewer td { border-color: #CCC; background: #FFF; } /* prettyTextDiff expected/deleted colors */ .diffviewer .exp, .diff del { background: #ADFFAD; } /* prettyTextDiff actual/inserted colors */ .diffviewer .act, .diff ins { background: #FFC0C0; } .story-links a, .test-name-link a { color: inherit; } .story-pkg { background: #E8E8E8; } .story-pkg:hover { background: #DFDFDF; } .story-line { background: #FFF; } .story-line-desc .message { color: #888; } .story-line + .story-line { border-top: 1px dashed #DDD; } .story-line-summary-container { border-right: 1px dashed #DDD; } .story-line.ok .story-line-status { background: #8CB700; } .story-line.ok:hover, .story-line.ok.story-line-sel { background: #F4FFD8; } .story-line.fail .story-line-status { background: #E79C07; } .story-line.fail:hover, .story-line.fail.story-line-sel { background: #FFF1DB; } .story-line.panic .story-line-status { background: #DD0606; } .story-line.panic:hover, .story-line.panic.story-line-sel { background: #FFE8E8; } .story-line.skip .story-line-status { background: #4E4E4E; } .story-line.skip:hover, .story-line.skip.story-line-sel { background: #F2F2F2; } .statusicon.ok { color: #76C13C; } .statusicon.fail, .fail-clr { color: #EA9C4D; } .statusicon.panic, .statusicon.panic .fa, .panic-clr { color: #FF3232; } .statusicon.skip, .skip-clr { color: #AAA; } .ansi-green { color: #76C13C; } .ansi-yellow { color: #EA9C4D; } .log .timestamp { color: #999; } .clr-red, a.clr-red { color: #CC0000; } .tipsy-inner { background-color: #000; color: #FFF; } .tipsy-arrow { border: 8px dashed #000; } .tipsy-arrow-n, .tipsy-arrow-s, .tipsy-arrow-e, .tipsy-arrow-w, { border-color: #000; } goconvey-1.6.1/web/client/resources/css/tipsy.css000066400000000000000000000031421266412531300220720ustar00rootroot00000000000000.tipsy { font-size: 12px; position: absolute; padding: 8px; z-index: 100000; font-family: 'Open Sans'; line-height: 1.25em; } .tipsy-inner { max-width: 200px; padding: 5px 7px; text-align: center; } /* Rounded corners */ /*.tipsy-inner { border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; }*/ /* Shadow */ /*.tipsy-inner { box-shadow: 0 0 5px #000000; -webkit-box-shadow: 0 0 5px #000000; -moz-box-shadow: 0 0 5px #000000; }*/ .tipsy-arrow { position: absolute; width: 0; height: 0; line-height: 0; } .tipsy-n .tipsy-arrow, .tipsy-nw .tipsy-arrow, .tipsy-ne .tipsy-arrow { border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent; } .tipsy-n .tipsy-arrow { top: 0px; left: 50%; margin-left: -7px; } .tipsy-nw .tipsy-arrow { top: 0; left: 10px; } .tipsy-ne .tipsy-arrow { top: 0; right: 10px; } .tipsy-s .tipsy-arrow, .tipsy-sw .tipsy-arrow, .tipsy-se .tipsy-arrow { border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; } .tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -7px; } .tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; } .tipsy-se .tipsy-arrow { bottom: 0; right: 10px; } .tipsy-e .tipsy-arrow { right: 0; top: 50%; margin-top: -7px; border-left-style: solid; border-right: none; border-top-color: transparent; border-bottom-color: transparent; } .tipsy-w .tipsy-arrow { left: 0; top: 50%; margin-top: -7px; border-right-style: solid; border-left: none; border-top-color: transparent; border-bottom-color: transparent; }goconvey-1.6.1/web/client/resources/fonts/000077500000000000000000000000001266412531300205515ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/fonts/FontAwesome/000077500000000000000000000000001266412531300230005ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/fonts/FontAwesome/FontAwesome.otf000066400000000000000000003261701266412531300257520ustar00rootroot00000000000000OTTO  CFF R?EPAR*0OS/22zU`cmapL.head 6hhea nD$hmtxw|h maxpvP0name'x8postX  FontAwesomeC   U6U6 -r-k ",04<>EGMT\_ehmqy}#)4>HT_lp{ '4=GRYfoy &,39COVcoz"/5;FPUZes}&+16<EOW_hmqv| )04=DPX\aju(,26GYhy %16;>EMUckox    $ 5 G V g l p v    & * - 0 3 6 9 < ? B F O _ c u     & 5 B Q a f m t y    ! % ) - 1 5 9 = A H L P T X \ ` d h l p t x |       % , 3 7 ; ? C G K O V Z ^ b f j n r v z ~   !%)-159=AEJNRVZ^bfjnrvz~ "&*.26:>BFJNRVZ^bfjnrvz~ "&*.2alglassmusicsearchenvelopeheartstarstar_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroaddownload_altdownloaduploadinboxplay_circlerepeatrefreshlist_altlockflagheadphonesvolume_offvolume_downvolume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalictext_heighttext_widthalign_leftalign_centeralign_rightalign_justifylistindent_leftindent_rightfacetime_videopicturepencilmap_markeradjusttinteditsharecheckmovestep_backwardfast_backwardbackwardplaypausestopforwardfast_forwardstep_forwardejectchevron_leftchevron_rightplus_signminus_signremove_signok_signquestion_signinfo_signscreenshotremove_circleok_circleban_circlearrow_leftarrow_rightarrow_uparrow_downshare_altresize_fullresize_smallexclamation_signgiftleaffireeye_openeye_closewarning_signplanecalendarrandomcommentmagnetchevron_upchevron_downretweetshopping_cartfolder_closefolder_openresize_verticalresize_horizontalbar_charttwitter_signfacebook_signcamera_retrokeycogscommentsthumbs_up_altthumbs_down_altstar_halfheart_emptysignoutlinkedin_signpushpinexternal_linksignintrophygithub_signupload_altlemonphonecheck_emptybookmark_emptyphone_signtwitterfacebookgithubunlockcredit_cardrsshddbullhornbellcertificatehand_righthand_lefthand_uphand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilterbriefcasefullscreennotequalinfinitylessequalgrouplinkcloudbeakercutcopypaper_clipsavesign_blankreorderulolstrikethroughunderlinetablemagictruckpinterestpinterest_signgoogle_plus_signgoogle_plusmoneycaret_downcaret_upcaret_leftcaret_rightcolumnssortsort_downsort_upenvelope_altlinkedinundolegaldashboardcomment_altcomments_altboltsitemapumbrellapastelight_bulbexchangecloud_downloadcloud_uploaduser_mdstethoscopesuitcasebell_altcoffeefoodfile_text_altbuildinghospitalambulancemedkitfighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_downangle_leftangle_rightangle_upangle_downdesktoplaptoptabletmobile_phonecircle_blankquote_leftquote_rightspinnercirclereplygithub_altfolder_close_altfolder_open_altexpand_altcollapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcodereply_allstar_half_emptylocation_arrowcropcode_forkunlink_279exclamationsuperscriptsubscript_283puzzle_piecemicrophonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchorunlock_altbullseyeellipsis_horizontalellipsis_vertical_303play_signticketminus_sign_altcheck_minuslevel_uplevel_downcheck_signedit_sign_312share_signcompasscollapsecollapse_top_317eurgbpusdinrjpyrubkrwbtcfilefile_textsort_by_alphabet_329sort_by_attributessort_by_attributes_altsort_by_ordersort_by_order_alt_334_335youtube_signyoutubexingxing_signyoutube_playdropboxstackexchangeinstagramflickradnf171bitbucket_signtumblrtumblr_signlong_arrow_downlong_arrow_uplong_arrow_leftlong_arrow_rightapplewindowsandroidlinuxdribbleskypefoursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378vimeo_square_380plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629Copyright Dave Gandy 2015. All rights reserved.FontAwesome aoC  %)M16=_fmqu|:>BFRhl'07>CjZ^)5:>CGKPTY]   & - 1 : E Q U \ b h m      ) , ; @ G u y   ! ( 0 [ e q     B F R [ i n s w ~   " , 1 6 > C H g  %19@GNTn $)>LR^jx} -9>EINSh}(09>CLSWdk} %+39=CJPU]bipu|#16DIOX_ensy %-28=BGLQ\akr}+ ! T fAVS @? x lfPzz  c 4 B KH K\j l vvo K KW l '  l  /@EXXE+y}}yKd:+EXXE 33 33 (  `lT~~  4 fT @4 s ) .TO@O << / 2 A 5P y_ V- ? G c < A  M HU ; C < e8 }y hnnhhnd  (T$ E  5 nh h w  y} } y}}yy}}y^ w ʆiimdod $@~ Kz&w{yyw}| |}xz{wa&zK $|'˒a . 9 - |zKz||zKz|K   ff ~ ) T* U " Z $   o ! ) T  [=s T , }yTy}}yT  VT- T? `V hh h@@h |z b c k  j]^hYE֊ׅB ?Gߩмqٴ̟'(͔͂z'w!q=wVF7HJ?xs]C$ 8 8 . 3CC   z  W (K$ hn .TO a T0   tkQE;wOVVOcZwE;ɩL1HD hnnhhnnh =  J ! TT TT} [ A ;(=ZXWG/9;/_Mknmn9:YIƑP`q~d_i iii G! } . 9 l - F/Bi NPuc]T!o>9U G @X V``V}~d3fTw@t(suwN5~w}+}PV q y}>  rcrr jih t <<rcrr rrcr     tp    yyrrrry * t D$$D !5   ! MQ :< 0A  &T+ 5e 11e BB  quuqqu;;uq tH t ZKS  { * }t / `   `uttu~w STdJ,]շ49 arwwvyr/ (DB%$AΌ 4 4 x T s wrr   Ez*6z*E!  0  D$$D _  yy >T 8 ;; ' : y  TT_Ld g__gg__g ,l [ ˻WL @ E##EE##E  ~w] NTQ    o"7l $> j s   P : G 0    << x G z{ y}|z !5 $$   l c c   $ EQj ip q~ 1   @h c  t44t :z{ `M`M   - t) & ( y} E##E i tB   ^ ɽYM s%$  *10 B ~v `V ; =  @@ yT 5 !4 ,$P++ 0 h  0   r  ^ w  z zz{  \$"WT f  ` S Z  j   )Wbit     }hv,0/vdpW  X 0 8 F  h\_h3`7cSg4^ 3U^ VIM I | !?!""m"""#h$$%%&':'()X)**A*}+.++,&,f,,-[-k-./002)2=223Y34 4G456B7C788H89s99::;5;<=<=>?@ABB]BBGVGGH4HIIIIIKKLKM[MNO?OGO[OPQSSbSTwU*UVOVW`WhWpWWWWXX XYY;Z$ZZ[2[\\]&^^h^^_`V``aAaabccddde$eMe~eeeeefffYffg>gGg]guhh hziEij"j$j&jqjjkNl0lmOmjmn@noowpqqKqqr0r}sYst2ttu9uvvFvwvvw?wxTxxxyy{yzwzz{ {}{|+|||}%}d}}~=P7>.0;=1|Ab#*/+B%V;jR!B'?h$:'aPÉŏzưǙ_ȿq˟b́ϓ$)lաV׳ءq0ۥb޼cG8]^>:<?lBsH[Na z    ,   ^  t>".GqsuA1 A nA 3 !""#N$[$%F%&&R&&'( (*;+,g-f./0001M334557B789z::;X=>?O?f??@@k@AAB2BpBC[CDCE+EEFGGHXHIJJJJK KLMJMN#NNNNNNNNNNTt TT4c 4 z..ȮhKhh3c # ^uiƭRl  @- ? FMffMZnnw   c  `Vc~ofa[Y  T=  @suw#$L>$#69JX"!!`V+/EE+V1RE __r@3CC3e \ ; p]  ksu[ztg U1 q9 [[9:QQ:Mqksu[ztg U1l vVlXXlVv6*336W) Ki l  i4e @ { { { { \ R T1R `VV``VTV`ԜT1\ R T1 TV``VT R  TV``VT TVTV``VT  ^y$%'+ hhjyy''+ +  ttB KH ttH K\tt jtt=  H K\j= n tW&S:aR`S:a))6 z6)õ`a;R`W&tP;;QEEQQEEQь STT@kmzK}zaEV" nmloL{yry}{{OJNll~n|i&js^^[{m~mkNo|y|rz{Kpijki\f_i]QM[!|Lz~rǑ̒Ȫ'fgiM    ([popHH4h l nnt, s~oJ,lW`aGahc~v~AHHF!4t4tt 4# ){||||N g|5pp Ty~}y:y~Tppur5|gccn_Tz} y}}zT Tdgf[wXX[fe? tqT% T TT TTlT~~ 8 6(' TT6k,T,ThXhYm}}chhcqj}}iVgvW wxrwwvttv# c w!SY;;PylD&)'C3 Y4# T[ t}|}zcesd,.9/F- . T4 T"Q>W"SX5z|[,9FZ3} T[ _ " "" T@Ա Q @3CC3e TTT T+ kT^^^^Tkwh ]bt\jK__=1lno1"-SKq~n}s{x}zsz: ;3n L T T/WW/!(ZMj: kBP K* k+8V=_GxɁHKxMG_8+  Me e N-hnog? ?go e N-hnog? ?go_QPox}yCQ(Csyrp}t{xodPQ_K n{}|zx8 S``*S8 qxozo||{}s}|{n:  K     ;x ʪʪꪫʪ骫kihvvvijiʌq|1|w|||1| g1| | | | Q kllqʁ qijivvviijp )p 8_^X*DtcX_^sjii}jttjjhs, g|vtywxog`vf/TFw.qra\zzzaM{tswxyzzVc,sj|wut{tv\h2p]yx}xzuxWi:mY{pvzs~{sww}e_^#:/r8u 4S 4K 4"Kme,,eBV4K"44"4\t4T? 4t* T33333333T4tXr=EE=UIrXt` ( l PT, ie%/,xxx(((#Ɏ wR'VbgfVpoqqq{\/j}}Yh^?DFG@EatV@ha%-n<scsŔO5*VJM(0x[[_}~ %;AHW{'Qbgfg FIGf=R!Gv^]^z8'n\PuH#hPMqJK{-ЊxġMMN[ĐơϦԖУ!!!x$ǁΓmr;ni~GhftnOlFKwz6 ;p6p_ph6hpo;_}oh6h6}_Ǐ\|}Cy ^^^LuZq< R eptcCDC  ǐ]|zb||}3mrS667W, "< R ~yv}u ] y]h vp|zwwzv {y{  |p hy ' 9 -' 9 c -' 9 [ y ' 9 -t' 9 [ y . 9 -. 9 c -. 9 [ y EEEt  @\ tX=l TX \ T: H k utX {tz{~'&9+ T'T& T&:'' )TG4444Tl  |z@ g4ka@ @  xD~~UT448~sjiij}st:944::,mM NLT_p’tH @M ϠHGwwsr@ mXXj:bkkcv`~:jX;Y;l-&@yyL _  S+,,||~KK. fccL +4444400f,,fMff// gl }{|y~wj. |z@ "L   {zt{tqT4 7\3ulz* p4Tqt   l KK.  fccL {kkYkkkYkkkkYkBBk   } 0 ` .  ` gs EfZE Z SfZEZZZZrZhlvlr|h@h|kc @_G_[ kc @  ZC ZZ ZZrwhZ c  ZC Z  @C }rrw_rZZ w. ::zzzzr:: ' zz:::: zzJb $Z !  Jhn~ k}2zz11zIIII{zzz1IIIIIIII1zzz{IIII{zv zz{z&vv,+&1zz6 k4y}}yTeTN T4,#Q?`\pnZt ҫȧPKgjzx}wy\O~#7@TKT k4< T.4O+.4O8C 4 4 44 `$$` $`${ $$w $`$9  #Zk==k# #kZ==Zk#9 #k==kZ#w #k==k#[ ]  &&  &&  &&  &&kK# g %''%% ::!8#  %56&{SjjQh[=<<=>o>n ^CT}s@skiij}sstDjt }sTӸ~ssjiik}ss@@st jtTC^OGGOTsDjs@t  K8sjiij~stsDks@sTC^ǸTs KT8@sjiij}ttT Ttjiij}tsA@sDjt t ,jl t,Qa! KtkvqCt kt Ԅ k <<p+>|Ri/8Crb{Zja_qV  P_ 44T( V``V N tY c  T s ^ nc  TT1 noqqon1 !5  Tft//tq:v++n+*mm*+n33+ äyppv-) mERQDEQ6 ERQDEQҌQE9},~ q 2srqt-}}N}}~ZTYprr~n pwefc~rrq/s~|~M}~,soppndmfnen s -}N1kmo/DD\ l y[  p6$7dI.3Tfo1\s\k <^  U/Sk ?Ÿj-@  +6 @ Dɝ·lZ'#ik}ts')2OKebh`i_mdG1dq^ nm]a".e G.3GNOH 6  t@K̬-*osr^ ?<k篞 Y xxytR]ssvkc\k}\vs򺊧1fzk~rvdOJ.eY$n:mo^ nq1d_`cJl2)t}ǏymD g  @KM>M>KR4)<5Mnɿ<5)4RP p];  dr3CT ~ϧX'T& ~ϧ4 {{{J{J IYU:=YϿڼWG j8Ke`bz|vw{ ̋{&,(i"z 4t4ToN T480QEEQQEEQ08: (y{wA[ _ l & . T/TL _@ DD D N DDl  + ^GofC3Tz ^Go  ^!Y1/)Yb1+ o ԹV``VRzf|Xm}[YKKkK+++K+K$>+++k˙̚zfR_L<L aNi`ʆ ŕXP+ ! t]r[t ˺?ApDU88Dp?? \pTTz{{z~TT# T~ Tp !8ZZ.n82Y\uZHm{(r^-Ʒ֫Ϧ [ {wx^^]Up[c\ˀtbdee  $fb%aa>"ipuleǞëѯ wC3. 4+ t 3&   w&;*226;*u qXsIm[FHNMo;otpлͩ&oxtt_Jdwry0Ayu{&Ay  (TQrLyJγʣMfEpB}P7.G$%Frrs3Xo[{TO(QVY`1(mpnnvww ."4X+prq/#>VK?ʹķSp.v/nQ1h/ p%]8rwsp TTT]]TT4V+T ,[ ) j @ @ @Q ttf g   TGzi.],++,]i{{}zyjpnjry''{{~{y#joicciq#44VV4@Ա Q 2t1v~z1vF4YtHAAHZEtYrtpԊ  c 4TttfT EuFF6!1=۴ n_F( RD\\ T$4` .G^SSG^J(@twT3fX V``V}~d3fTw@t(EQT!yTk`wrPNxyprNV[Pwrqqyxyprrwwr[PNrpyxxyprNP[rwwrrpyxyprrwP[VNrpyxNPrw}PNVVNPx_ 4.TO l FPPFs\k >\V?Ckk++JL@ =3`?.Qm\ibgbjnG5[^ nfuel.=  _ .Gc4`C>[B atĹixFP+֫ঽtttuV]]B1 s [GngimQ`?34=_`b    =acf}|}KKYS#L "K V?Ck1B]]Vvuut+PFxiԹta ?MQYKK}|}fca=    b`_=43?`QmigجnG[w  ʰ"l ZB xxyatRt]ssvikcx\j_qFPPFGOLJ++kkC>[J G! kfufs ^ [5Gjnbgbi\m.Q?`3<    =؉ˠSL@JQQ{z@r0060  {zz{QQW  00TQQ{QQ %0{z% 00{QQb QQT {z 00y &QQd QQ {z E݂v <<>Gww|&xjUt=N,BQ?FE    {tq z z w44@  44te takw$$Ti Tqt{stoy$$$$tqT4 TA $$v v$$# T-T$$* Wn|`_]#v:[vVi\\iVv6*446Y TWu܎v#6]_`uuu0n1W@^;Y  TT`4S2S@ zyrrrrybcyjdL djyddysqSUmtvwjoXV``VXojvwtnrry@dd> ybcyrrUnTddUA??BnUU'&UVlA?>CTddUmի3STk@< ?BUbcTmԨ'&* J,>i KQtd_O>Kj }|},D!/G  # # @*! ! @i##flA\3T3T K"~xF͇F6)-1?pWSRWn?=%(EUmþBB_XS-(mU6EF(%=?VXp򎬇F˞y\&sqb]NENewdG&NS6}dNDwO0]bqNñџsSe&GF\}w~vt:4+q4CKtېE,5  4dYztdV4VAlff,,fflAV4S T? Vi?fflAV4L444L4|+fLdUS55TTd..Ġ ..||eWT6LL6UVe[o!"m\à B)%h;=h&)CMe0 0 4VԚ44S ? 4{}~bx4TԱ TQ kmeeBV4@? kc kc Tttt\ Gl 4B 3 E Gl 4B 3 E T 3 E  h $@7_H,`djXg]SˈScfzhebpR3^v"Om(;.?GdFjPyi7voMyyy4 @(!?:::  (l T@sTz|@=\ @3/{pkgGR[".__ušȟmNgG&߅ȂAP_ATeAa6226^%OLJnpsosxZWS]{`lcmcbnXzyY\a\^cbhnnpszf%_whY+W~ cv͉ΒИhv9!݉}t{D$p_Civ9U:j\i9%9) o'0qi? ?@ieM#&nYA ,Ómxwr]9 FfH4 ze`c``c#NW[S 9Z))));7eefeefeefee)l  {r|sv>(T+J~ff~JJ~ff~J`  P ( _4 ,[ q nTT{zTTlTT TT  o 4 f@ @ Tq nTq n mjingr;<7 M7#?#77 <:fime B4@ V7)0[/1/^//10#sEAA*,?m6"mF=(G`$.ƣ 0n ;;YS<! 8sjiel{ppmoy,,yrrUg[giyxtq]um~~~~mu]qtyxgi[gUrry,,+ ompp{leijtt, MTTM@u^9v:p%"M$%MڑhiMMTTMT&&&&@;$yz%:@ %%_ T DddDWXYV_lw}v~v*AdD[  yo6$7p ^~ )?cwrvy~x]͈}|*YvvT  +TT? VԿT T+V``VS ? V+TT+? V+TT+?   XvvuuvvHNNHHN?0   1j j/ b zb zeU=k?0 ) $ 4S 4T˱ TQ K4ime,,~V4T? #x:4tT.H pF E 4KqHaZxuuvwtD6O'xODwuxaq\_ II_ \DD$2?? nzykjstz{ztsjmy}z{JlQeűťž̛{yn׭ |zT|a T`t3 `Tz|* tE TQ tC tu* 4z}|yt Tty}u tT4T?hnnhiN[cG=B^60QEEQQEhuI7#e  #7upjj_pB:1 !5ܾئ_Wc[7+447W 5!1 7EpF m;4U?ua[t RҢ&F & RD[apdu茆0 U;4mph]@ @h֦t t KH wK K$4` (@twT3fX V``V}~d3fTw@t(EQT!yT)T1 K5!( Phh4 tT ?0 4nh0 4nh0 :Bp|צ_)\tEQF!44K$T/T* ttT3T/T3T/ t" "KT|zKz||zKz|FT|zKz||zKz||zKz||zKz|2 E 4c @_4 ,[ It" "2 "=4 kS T? K+ KԱ Q + *Q _UVTk,[ )x` MWWl2M4" T. 4 4hZwrrlZZrrwZh4!""( "T[ 4l 4̒4" TtkH w44K k)tK +4Kk44Tt+kkTkTsTskkTkTt44Kk4 Ftˋ |g>DRTT˫kTTktkKh@@hTTx Tb b d d 4 Jb $Z W Z4 ~]  ~] Zx x P tIIP 4I I t] ~YY Y P IP I )g|ze3C4KGf9-K ) 4ԋT fT kE Q T ԃ`t4+V`@Ӷ+A: a 4ԃT Q TC3v  d_gg_ d4T Q TT` A EQ 6 Ԗ TNT@"RDEQRDEQb@TT@QE^ EQҌXx z  @T b'&Qk *j4a,t{ztC8qbbb{y{x{K  t44t224\<-7ʗ7-tD&c+zi0&H. 0,-##s& &2iGz@@RQT+c& &t  l c tV``V V`T5TTTK 4 &)l |~aiEjVulѬo70 XDQ547mGGT4+ &naxjigxi j(C(jgjixhi5'=='5G5 n5Y'=='5YihC ix5  T_-T5 )TT< TTr TTAOTTA 8TTC KM`M  M yy p< ZL )xIpm F m t:+tm F 4m  :+m F m HF m  F m F m F m ` :+t$as ^ na jM Pdioo '.X@Qh  @\  s]QT3T)&  Y ff ff zM{yz zyz  %tJjZ!! !"н $yf+/Y kzX,Hn|}1d Z\IێĬ TTTpK =b/tQ( 0>mUzxwyysq ggKgywxzpTmӨ'&h~zUB>>CnUU'&TUmC>>CTz~p> y 7Q( 0>/+=  K : Khnnh% T,[ P% t, wohhonhhn S3@B< ;|#&%6Nkj>hW@ x}pU3@@B< Y;|$&%6Nli>hW y|p* 9Iv]Yfh{osjeV]]nw uKJQT*FhltnݖݘƎqDA5%!*QTFhulstnl_a99:P~݀*Pk9okթ ? ]]?  DvD)D$$DK? ?CI 9 .. 9~`n ? TAENK ^ )T% 7;L9\XpqTT_4 9 $9 x#4@a T+}~| z knr]J'V{ke{ohc-#/&|~T+ `t{yS;RQPIODwt{K6K tqn;<-=vvkhF@8k!!7 ZZ ZZ9 %! ka!7 %  9 ZZ !7 7 % ZZ9 ZZ! 7 ZZ 9 9 %X ?6IY(uC XVYx\b66 PeSGQGz5:5'DN5(TKKT( Ta 4Q~~'1 A3ZpT2T7׷i ` ,9_7XT4  / TZA1 ~P(~uQ1  Q1.g TTt/ G]]CkVY  M yyL ? ? % UTUTUUTUTUsM- |a99az~ z |33z} z99S k <<`C3+ L 9{sYsn{xput}T4T~T>Tw}4TTru|utpxnurT}ynnA7  9 gggg9 % T(@WWS+}}F簰ɋf,,fMff zq{ttz{v7 % vxt~ t 4G{zs{4O!mFNB9x*}}~5W]4xG ttTc## yussu~uvqxTzTQK y7}TxvvxzT}xqvu~K zTxqvu~ussuTTt< T.TOT}yf dyDs4>$0K_|h)!Ch&5`Q?vk}>P * z|% e@1* %$?nPDsQ](E5UW+M3T)3w'T<|#P >}ykאSS8x_uaz`{{sk=Vjs#$6$$q @{_,1!T!1NH( t()$t t* $tTq ;>TP NH\ @3uk1@:6zi 4QG%/쎔|~}.)|}~}*1~|3"C3d4}3;e:}38i1..`zJ1Z.cbb.jjlh8ʟgk&wl`lK`\..H̢W/&~kSڡ#ڨZDpA4Ikl,,}V``VS @? V`k,,}llp8V`V``VS @? t T T )8 }3 | H4 )8 1H4 2 }3 | t)8 Q4^4^T4T^4kQ4>t)8 4QT4T>TTQ4>TTQ4G s=)8 І ma G =)8 d   4Tgnohgo! 4' 4 ,-3#؋Gt `aMPQOddlli`g]_Q+ fjoojhovuf\#ͥȅ֤ TnhgooghnG40  q~ )|mxrze`I3}y?z#\fLuOvhimohjo Q]`ldOQPMatGmqvin4^ːΆ—̀ƏnX+}j{xtzj1HLzii|E;;]SHv|~}Iqzxcypst}qv5Hίp}Gq|z{t}ypjip~rx}xoddnyr~Wvuyi0izj60w7~Q[`R|R[~wߋƻő|ą`P805]A]|s|z|WW[ dm}yrxq~jiqy}~rxndI mpr|rv|{H l Dzك{цԨ_~q|||||f|mm|t^]Z'X"-Ibgiwknvv}(]jvgrxhklm[2+*mxfwj]Ynwwy{hsfy\\hqxAzireV$G4]t~%]~smn}ft]fcqyJ>LNMMNwK=KQx<rCu)k,##,)CrrutturӠ,#ˮ&~'+'}~~}}3 +t4b4tD809mi%if+qU3? ==BRippiip!~b^^jcjc~9?>99>?9elleBel9Ble9Bd2222v< <g  k&]&8t#4#4-_G_G r 9*Hb=gh`̀, ް5-"MM/8(x,(90KDzіɕOTOm̀ցQ\Y5Yy{))+)jxYhmG{IUsV7=o{vu! z'f@o&d1caaPEb4"f|aunO鿦ɯ˱nno5.OB\WQĦdRۛ~-aOpbKI2C@lU[s^Yoc`̄ƃ~ƒΑ~vD,@aD1"@3byЀѐl"k"rbsIr3p1o1]_qewG1('$:er)n'y*ԧӥؘؒ6;2]zt[uns PDcl|P~_q<}Nx0k<Nkpti"d-"`#69VѺDMV"TAK$ `~tJ t~~@`@~t ttQ t~򕃘t~~t <t~qqPV]]tסжihhMD;ZQuItI[nt]FEQZ-[+@@*e-8;@@4uvǹߤ p7ZYCYCq5( >>>-r>->j7)1auabtavzyvvzyu:uzyvvzyvLR]]SBR]ĸB]Sx*.NZwR]ĹwwR]ĹwǼ|CNGCCG|pNC!C,313, q|]RS]^RBR]Ĺw$䔻kiᦿůI7Y=+kt}n~x?z}}}b;u{{~YP KS{TSm{qiTAsFGKiwzwo_ewkjZ˒lshztu|Цyu"5@'\ϊ؊sqٱ.&7e}|_g͗5|qD|unlaK]~diqqquzw|wʎó^=~Şv}M,7QupzTS(pzKYNGJ b/ѓcctup4K6gp1zyyr7Y}{w\ @wxFis}txyoGqt sp^)X )iz=JFdf|oL{1$+#~[G0`SQRne*wXjsIx[Ͽ^d7,vX9 ZY deҦt-tE##E)o}}4u{zu\ O#nWvZh,lt:$4Zsj{rglb1XldvG'bQ^{yqa|x|{jjs}.Ӣѡ?IY–Kk.#4)sV 1| XRf 7n]Mw]^}ǟxwVo] ytyywyB A'!3EMM!#] ([B4WtImnxWxWtIWȇ$rzӎlQ3J>Rq_(%vv==)G/H{uAR6=zkwlkkwllaelj{RI7 A5ifsgffsh./gge0lF kmiE#=[Z\Z#=EOiNQ@QyQ@QzE&}9ً܉{H[1N[GCJۋz"q*g2EKa"81&*a/rwxrrwT(v]*I0 330H 3 Tz|4# T|a 5T4# T?~~TzwwvxT24K Y 6 dpF47zw8,lr7RZ(x[ts[{+;f DK^Fxukrlqv}K ?(&PX+)#JU ^mmm jgenyiYW»ëP7iSպԤÎ˒rSppoG.B%r tTt TQ4( Zdz{ IP 4* . l  tQ) K* [s`C3+ L )4՘ΖT˫KT]HAF-"Kg_yz}>Q~{{~؉}zy_gK飳ܩn_ZZp_bn:vkbA*t%ndʋ̫44m4tbm++44kkLJJl.d |{|8S"1ÞH=|}}6TV5wSLTT=g}}RIcZYccYZccYZccYZc \pcdwywxRj.j.Rcoͭ}t qZbZZcbYZc\L gSVIm> k.L.k?+llH\\HlZ釧鏼0T T kcthjz{{z7LvvK7isùĨwлQahaahhaai?Ul[Ĺ]SZ +)**MOvrqvvq 25 3 + qv6!Mr342oqv*  )```NW{WM}|XLyR]^SS]TTVQ~ùù]SS]^SS]WQURTTl 4''tTTttTTtT a`aa`aMk`8aMakap`a9M<97Ba8M97Bagg[o2 @2 CG%:`dhbgbۏ֯Ȱ:%G?G%;adhbgbN;%GH 7@ Q Yr3FZXaXxwx_blkx B) K%Lo3BJwu~kuxuk?Oz!xyxvzAY Ϲ[Djmhl|{{̡ԡԈ֊ j8ч5T&9E Z$j@b<r(B{]<6TY uZ|iJC^E,g_zsyubՖӪu^@q-1ݛzJ1jI1jgTiԻ EY}MF{M`@]~tvtz,~@Y=U/0Aqtתdz}PPxvtnos~}mzVz-cObPru[N S=)id<&li@XsŒՍ0ZZ6:3W4U_U266WBN@ h[aj6GUv@cLj^HI,+T(jjc+,54+,mmZZ;ZZ۽+,33m0vH9*/o⩩+,44>4 q{7$//)9wh 0m+,54+,44,,nZܼۋZ,,>'l4n,,44,,44,,mZ;ZZZZ;Z+,/o-D/#5>'}n00nm,,54,,44,,ۋZZ;ZZ+,jJѲ"^ z}i{ѧ錐zss^myzSvnnU{uuwz~˜ڦLvewe :rnwt]R{ϝȹ̯\jtazm|}l~~nh~uN?MamJ}fg^%llI%uXBlznxj|Z6{&1~\NULܿI4'6kZ6nNwa T v  `77lf,,fAV4 PW?tqCCC44@4 ,-i ; KT C KT; KT; Ky}}yKy}}yT6 96 y}}yKy}}yT6 ttpfeOefxxxxeOeffeOe  8  *`7Q `6w% Y4W%*% X4j%1g6` Q7*` D4 Y%*&4 X%WT#EE#\[^hnT^\z.}TNNNiYT}||||}TYyi[U\`uTT + @ 8TjMQMQMQWm[FN$l\TT{zzzz{TT\vl]X$FN\vl]X4[^vTtZ TtZ Vo8>A , '>&&2uQeGWn!eq=s)b?ɽX/c o E`(yk2@ /POlAAg e1j*.Nz+8a{z{aY%#y=<==<=<<*```^+LPzlX1Az/-6D&@I`_B   44!3}|~jk/k;j:/d;jkjL`+ T'h uY54Y\55\Z56\~  q@-& T&kD>m2W._Z8nE 5<hLhLQRSu'/>0Agz8(ҒӑP0KC'ZL{o_uOn ɋ#xW{D ߥpBdȋeE)3 +57wp 44tTz  z 4'c7E 7D 44 cT(K7K7D ' t aXt Xt al&'y &'Y  } Y&'} y&'} bKHJjp̃Έb[ aouwr~'89{={mx<*e>okjqpi{AR*7}xE|}jp]VY0-|xpaime{}ld""p*}|blv\&A}xfa) po"_m3m"3s¿8~~}~hs׌ $zctc^_Pvv~w~yf{h{ Z~}}}}}||{|Z} z}{10df}itj\KMuTuzy~00kzzz <!!o !<Ǒml!D4CPWhЌnjʕ|vw||ryIs7h3^1c:gJlXJU>]wD&_nr6Hgdalor@/K&``m}",y }z~|{@Ë)ҧ̞ȭBO`)y)o3hm^Zx:F!4i 1J{z~v$${z~J1 E8)3y{||y38)E1 !4gVQG ?33A HWT! 5|x$5!~ !4t/|h7S.1l~gd`;!Ъwgvph  !4;TTT      PfAVS @? x lfPzz $ c ;44rn99l>SO~~zzK!4 EQj 1g F!44v{v}JJ}X}w}vw}Xe}w}JJ}wevaʁӎyLzzyӈzzyuYaaff6&̶Q HyA~`Dޟ(#PgQ+<3%!!!S|BDMhߺ ђ.-.-.lHs-U7sH<JJJ?H&Urs&l~v~||||~v}~rrrr}d ^)[OK0-npq D:)rJ?t~rIFo9$"%9/iüIIR^rdclmkԧ2*:8)0\pFN[BA\ŸghgGDDl)3=L > jRVVVTPQSyVVV:RjVVyVTPQSVxVVyÁ•VVRj xmŁyVVjRttF4xPp? px4MFqqqqv|y*|8 G}AIrw-u\? 5'p$ PY84I5K G3#T1!I%>HGUB&- -%bbd&-JRprvQiu,t~՗Ӣ9RMgĬx{}ާEvhrjplJ- ?&n@5dbbI,ueui`M6 fXPljiijlPXlf`M6`ZiRuL};pommop|;LRZM6`m[ [ƗM6Ġ|}+vjS&zzgMRjhed9oICAA~CtIo}d{fxgj ;v+Iz5&o? mjhĬ7;jjjjjjjj> \O+:xOa_UTS˄@gftXRweWWk :{z{zzy"J<%wly}jhw|m'!+\! ոϡnMbx7tttpopyjef{m~ Ǻ iii yzyWuf^ V]g`[[f_\ `Ujf#b'^jTm4=yBF$3P:kS43g߫ޯG@pFAw@UMMM%O&iWtLXU_ogBF bWR?d/yH(#-:=;ra``^_^rrukedA~ R?‰“wnmm(?+RVB=jȕwS<;QE>?F X`X4! 55 pqsa_^U^HKʲJpwm7ųu~`//:q~iykkkkkkgfhopypoon0 +(\fmjő¡CB{gtzldg{S)ik-z/Rɮ٫ސq,Þ2=5qnYVL9+3zZ$;;#}MwzVqzvy^oyzzUggTUT¯¯gT{fggTgg¯ggUggUTUgTffgUgggg!Mm#[8ICnyy|죢Ԟ[TI&%7~~Tvtsrv61psYMwpv~Tv~tsrvlUXqsk%]rn ;;YS<!  w? ? U bXkC_}g555333g}cm6ﳽmv%f~~O~~~a}g767/./h~bn1lp.[Rh5kuZi/4oe ^Wf7h7jvWi'2nfz#zCpisL2r@;pEVP<Q;Odlw}#>}x ƭ 4tt ttTttk7>jVRH %HVj[HR>7E##EجHE##E[ ++ +  heXuS + þuh  + ++ SXe  %  +  9/ː/4Gj{fj}^11^rt|qj|$$P|jBGrbrrKK& j Sˤr(Ge~1~w~~w~1 zz0v~0 KQ+( 0NT:< +0A +~w~10  dd> mcFr@:}77:@ڳm-T0>2tM2V33V2Y&Lt>T0-KKKKKKKKTtSTSTS@5gn~STSTS$5 H~HfJT gnT<}~}2TT~}</ Q(4tQ(\ Y:YY%$~~$%YY:YZ$%**44ool8II8oo44**%$Zu*  +  uHd8lhTwwvym\_u5^/7hVfJC22C=+JVhX[<*N?Y3: ]#"S:Y3N%I%%%%F%"F%F%"mmm%@5z"mmmmFFVmyjjgwrPE]}~Su8ӗ)xm6 |uw}un]~')kp{u~ y nkuptogo>4y}Ϧ)Q4  gyr=7TRyytvz3*WJttx~8tA&ysjmm}՗ J T  0 5c 0ta  eepZp %$ B((BP! (''$$ GG(GGs$$zhl?9%$ _{_{b= $ MM M MM MEQQEEQQEM0  q~ $  EQl  lT^_|_j-Z7BG:?)_s:y8CXccs{~syyyyzyoto֎~@,="H(`dine|Anq˗NJܨ,+@מaI Ɓ8%m^9^9&^5 LZ_mOMrqs7bh%7fUiU>!Vvj1 zA@LF){B90kMKpo}q4^i4c2!b˱̩,|l-ƒs|eW"}fڋ\GQ+L~bGDCd5.26J:#:t|mcUJmopmvn]TB4B@Dd$rvJL88˿}~=.|Նs=xzo<BY$lŖ›/¸le3k{ut~irgk{ut(ӥ`xnqx}p[!T77:_\\]k]: rZwxo_(|MfmWisu͐0|u~Lvkcpy}~uz{y\ƊosTuwurl{~CBm]SbVBMjʞwywkws~~zqXIHI}Ons@WJ-E`Ǜx|}jxĨ@6'r[vyo_|MgmWisu͐!t~~yqWIHI}!?|zvYaOD Vhx/Ym1V:FMFVmY%0DF/bbF9@O)nH4(nO9Y"Ω̵i&L̔+`~tvqazpubw& SJZu\ek pkfY ,F):J\^GZgmn|@~~rNvƯri_z{wow{vy}psV1}nso(>}>ptlN[XKH[ͨ>0 "?4'::''::',Ah"ttLR AS1 Sc1J@ֶgLXpjZ  =PBBPOA AOD=̹|ͻMV˹$QG̟^ͫw_BG.O`IΤwϓRϺT}c 3" @"7<`ߊmQ1ryt 8spvu:@rfqvu:@r_F />L6L!+Ohhhh[Nc92;1 y,((, mm<}nik<ytgn(Bnlmv2gW@TPQ~wezuEu@ :PBBPNBG=_"Z*y@u!_M"_HDJiQwrSrNG2JDt( w\Dx]nrTrN:BNcTX.]^ggTW-|cQf@+((+ll>vII<5 YaqT;Qvy{QŷbZ Y`qT;Rwz{Q9RIPP(*/inW|ϊL/b\04]O__@@e,l,} v)@eiyz ) v?} ? 4or^{g=Zi| *>薚=v*0} 9  3os^{f=Z@i| E(J-I4i^xz xY~**)(!= xetpq@tJ͉yiiylHXzdipsl_~UGJhsxyW9Yӿwyk]]s}zw~{mh7k>Yi{ ztdYgrn|oM򹓝gptx*kSk*kl1wGb_]aTfvst+*r\zheN;h_hg__hh_ilu~~$rfP|KEUfav,ɼuaaP@YT@A :~@7뀙v~6{ T4` * ** >TQ4* **) 4* T$drrZ\Jxk^kwwkkw^~|}T|zxk*kw U|zwk-jx T}һxjҺ\DE[[DS^mxH||T}.һһ\D.####k'V''8Ltt22T22 22T22O )$ xrOrmcqly|~"|yy|~ |ylqrkew}xt[pwtoptbptUkr#$Ua m}||}#V䕌OVP[d\R\D?G!cLm?J9_ lq1:KI>?DB(DD(BzD)ANZȼxȼXN=k:jTRR;;PPQ2<;5 ,$()MU]()++\TMqqz΂34ypm1 .oQke^ 'uv& ^ekex#B9o=9B]:#/ݠ"\&"iRex hB RXD@ _* pX@RchE:dM+A * [ $qf]]]U9pttp.ptqtoq$ #$ A#A$ #lL6HpAOYKI++srs I0"/rIHqqIHrﷰg(7]F$ gVc p'7)28]8 j @ j j j @o]" -]" -]" .\#<]i|i|i|j| 66 66Fٯ6Vg <- gwr r r r r ;A A@ !A@!!@A! @9ŵwvmQuLflD^A94wHMZXaǂݏ,|) *) )* )* ** )* *) *) )[OCPZ[P55ZPCO[[PP[(ǻ@:M`edeSO[/:~~|yw{ >g7.iczdfptð+&4R l^vQBR{xxgd~y</Rc4jc'^dcvYXwrlO[MOO[Olr}twXPYv@c>kPS/k_`bjpN1kI7+447o uU)4S'-{:d@G{ &zzEwvlmulchr]tbFs^[XVvN;mЋD1 %/O,jF?j}yykDvDK'wsxx l DvD)l _>hjthhjbgSgT.  T譁bjh>n_KD;Ds ^ ,~ 2+ \ suS&yprxo@nrR/Eoqwn썍c@ ";;dxpXBB}tq۽F Tdmlsur|jt[ttstt/t G ]]  43) \<B4i , {uNvQ*33Q~Fu{uv+NR-Xv T  vXRX,  *6xllsvr}jR_  )[=)R~[~w~5-!/4 B"~v_V=)[ R5 uqu f!D! }qquur|jt[ttsttBtt/tì|rPZ<:`jvg$gJAv<ֽYi}=af44 )5Mk4444_  E E TTE Tl TWTTH 3  TjTtTsR@6{@),\,)əEQTW IIs~xxx{?+)])+8s~T @`c Ti mGTu kc TTTTT//TTTlT T!5 1  4 a4 a4\ }}{ptrmg}e}Mpvwyۏ c ״( ¯#wmݿbt@r|kj>Slst=Sls_tiqnv„Ņ3I`QnN^DyagTQ3I`nȜn;((5;!!6ryPqhn}.d9=k%)}|||{zvvuyyvvx}̖ҹ֐acrppxswzn}{wvvDӍ⟳͂pTlZxeyR{o|WbeVHquOz|n*)j4_SnNe]_\]“†gwkrmn nny{ʼnZlvTdp@JI4X@^xԉjwvw@~ny yorpmue{`nYnpr@^rss~~xvvyv}yuwz{{|z|{}{x}~yz~~} ; `ˉˬ7y88Siˎ; Lp` d|jK='t< $k:tt $K^ \buBs <<[=:0  Yvk2  OTV0OUƀGԫafob~hGSwk9&&  gY8>%˻XM,ɾYMr}QQ|Q'%`em_Jppuiuzzwɺ˿gYv*ʹ%q-u*+?q8$@q+ )5x}2#xww;Q" 7=YjyJLkttTtTg[ MCΫ MC1XNgZ´[VmJJ{K/oqwnbI ѵvj+^ ` d^]  Ub[Քm)xyx^HCii}l\NJp" #kkgko t c7/{{{ ` zf+!` lln%( 0 ǓEt^+jffllɽYM{{}.}PHT/7qͻ]H{4cycq_MYɛǦsjZ\ !}Zcdznp% 0DRɹXNMTYNdkdEXÿ!0WV~Y6R}XcP^Zt|z* z_ q  }z!~q{yzp~"{}~{=UP? Q={~ 4Z]41YW36ЧubQEd]"* T$>/V,'t> 44'%YT8?9|2'8 (%XU7?9|3'94> tt++UUttttC<<4444 TT UUttttC++<<44\ aJZZZZ44cTSc++TS33ZZ> DORKPKaXWaaXWaaWWabWWa 45! 54! 54!-..-......-..-..Xcccccccc0ɂь8`a@aNdC9sbccc@ccbcX9XE-JF,bH5@Y&nË49HbFs̷N{R{ `_`_`_`_9''''pqD-A&aa-D`qX_1`AMtCC%&*)GGbbIc~c͋%)Gc͋cBս_k3PD33DD33DjKgl:VF_-zMWSRn\nnnn\nZECSSnn\nnӾN+F:g˝VC&&ӋlgZG%%GG%%GG%%GG%%GP8 X@ 6DD6srpsG4Tmmv)t~̩vVJk}ltu(vumm $O?$d`zw~y8Mva\tiN߶܎`4s~nkA["gwdLaG$lΥэv~{ҊꅮK-5%L .U \  @j<Z\ fzd?* 1"0-)/!U=ITAIzWdd],O+2=q4{E)|肙i54_:vxH|Q̋yPBCĻ*O8Qz }y2!v\ 2!dx%%uouyf"2E"ciP8+ H>VV> 8PicE0}D8F?:/5mV?_@)*_AUm֡F8~_ :hI K6AOR||| 7::-R=6jsnVK {Qr2w..4$<1Unk;HKTC$[EEq;rI/(6F+G-7+`=(c2F]U=PO>Ul gT|z TeT t3/t  KWWKKW#1bnZyOL/õB+ h'X=-k7yS[rWmK|CO]ew,i@RF˿WK)}xyk~JJ?X7gf3.x,+.46?JGXjkځLJvl~doJLN*4A@Pbaul~xyJJJww}IIJÐN~LkR{mmaUULEC><;;{mDRs*MSPwms}wy<u|ƌ  Y10 Y 1122X48C1£dzʧr]^NJqZoe~|Z~W43XV32X+1fIHJLh67:gfs˂uncor~EMUUaml|ؚѩʵɩӛlG@/' "vg9~{~iyenaMxxw^Fyl}l 66xtm|cw&LL+dtjiJ4qq˚|O)xOpYpZ,,pWwT,JyIE7wt4vQ^6_ c wo K KW l j d ( d (  @l TtP K(t[ttstt/ 4Q3>t# +PPPP]w~PPPP QPQP]PQPQk# ]w~PPpp iP#\ TO ,-] ] i 4tT_`b#w #b`_ yyL Mt33V22VN (!!yrr. K0 , !! e+w TTTrryy!! !!+ @  yuw{{{s{sqvwl zz zm m`mm\ H @= = = = %%WBS qg@\LP{|@)҅%_ ``@@@%% \h<;v-;ݯ].Sg9GFXVi_d:ftl\mM>U:\!-B o-Bvˌ{bє~8w F2SXtegJ]lA9HH8QXi[syxy\HN-fXR22"E`B5 3352E%%%%W*~wwwwA.#C'K]fT O'R/+,{{a{L{{44   km +{t ?0 sw{    oT~ƣ@V 5!7EV@p -F1M \ZG#n' - ! ϼ 1-+q >P * ++EZ[spkT\ ~O@GA BHEB Bc> ----mJ#66"-!!!p[mmVJE46H``Z[|]~c`}pG;-7-m{<8Yn,=auKKvQ.-QjKs[hshs\hF:87s;\Fsh[t3]-3s\hsht[h"eE!sh\s-3~ + ** * }Mz]c.p%$fM55277<&UA++Kq5PPm;XY ;v2 ,TTT ttttk< .O8T tԁtN P * $ Fh͉yy}~a pjM M jprk5jThh i itt R*N^Ȗ* RDejok4ph4hplh/nh4nh9joqjhp4lh\ƙ;/ ;ǾbP0&M q$ ;. O ; $9 q&MsT |~}StK|}Sth =h u=h ttt*w)))((.ddZNNZZNNZQ+A@AA@![  [c `@ W0+. 4wx{0~}94l 4Wp@   &.1<@EIMWktx|#'v ")-;?DTY%=BFNRW[_~,GNY] BGKchrx%.5:]ej,27>Ft{ $*5fl   ) U l u   = H L ] d k | ) 7 I i s w * 2 C N S f n q w & , 7 = F L S Y ] b g l w -:BIPW\q ,38AHMR[bt!&4DTZbhr| #27<@EN\iw $)5AIQW_ejpv{<<T'T& "  t% M   33 0 y}}y : ( 33 ]]]]B TS  ? :  hnnh 9T KTFTKB KH K\ H T\ @  @@? ? % y}}yKy}}yTJ < K. r O8 4 , d N  (  ]]G }t ""  %%%%%% L 0 X N   +  z||z  ff m Tm Tm TT T|zf '& & t R }y J r )  1 V` +[+s/+ " @h `w _OG`E}n\>l9 , EQ |z@z||zTz||zz||zTz| @3 E  - y G~ - YQ ffD ffN~ DRRD } -! O  Z 4 ,  T tzuxu[Brlmyz~5qsU RD^ .    y}}yKy}7 1  TTM8_^X*D4 4D*Y_`t, _@ TTTT < . Bi  ^ D lnl||}_zob^^bzM zz zr^``^?a  }D}}k K$  _hnnhW   0  ~ < T. .O   yy ! ` +t!t      |z@* Tz| }t.+ݭB @3 j l  1 F 4m  6g _ c   Y nh z{ 8T(A(A(A ̍t|~}: @C ~ ~~w~ B T3 Tj fz\J$9:lA . O  ~w]]w~ z  R !!PTj ; %0  ZZ @ ~ o E l  ,, , ,   +S S T?   \xcikvss]tRatyxx h@@hh@ { HM tk G MY } ~w~~  V @ nh ttC xyots{ pttp&pt . 4 QK* _ !- ! < ) y   ` n +<< B !55! QDnty y  @$$@!  QE rrcr  r  p] w__c $  y'& OG  qt ]]Ch   !$DD$ `F B && cesz 0 hn + yy  > 4 z |z a `=db97 haahi`ah <<<< '0cGv=< !  `V  Tt y6%6- _$cX ?}|A ɽ  z P@zyz Nba] ;   @    f    c    ' f RD 3 h@  DR  60 ++P, -  EGxZny /  , _hmx     }y XtxmihbW_)   z} t $4 z T_  5!  `  qt{tsoy 333vK _gg_ &  }jii V @hh   ] ?  wkz||   g }y +: s}  ^   f    %t~  nh &m/ ofZedZd rsyy'& 4X *   ]] @   _33spyrs@  "" n@. !"""`>N^fin~'(.>N^n~>N^n~ !"""`!@P`gjp ()0@P`p!@P`p\QA0ޕR     lT  7A[_<Pt@  npv_]yn2@zZ@55 ZZ@,_@f@ @(@@@- MM- MM@@@ -b   5-8@ D@,*@  m)@@   ' D9>dU*q    R     @ e  %RE    $ k(Pv/ /: /Q /Qc    ^ [ q . [ $ [  s  * <Copyright Dave Gandy 2015. All rights reserved.FontAwesomepyrs: FontAwesome: 2012Version 4.4.1 2015Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeDave Gandyhttp://fontawesome.iohttp://fontawesome.io/license/Copyright Dave Gandy 2015. All rights reserved.FontAwesomeRegularpyrs: FontAwesome: 2012Version 4.4.1 2015Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeDave Gandyhttp://fontawesome.iohttp://fontawesome.io/license/goconvey-1.6.1/web/client/resources/fonts/FontAwesome/README.md000066400000000000000000000111761266412531300242650ustar00rootroot00000000000000#[Font Awesome v4.5.0](http://fontawesome.io) ###The iconic font and CSS framework Font Awesome is a full suite of 605 pictographic icons for easy scalable vector graphics on websites, created and maintained by [Dave Gandy](http://twitter.com/davegandy). Stay up to date with the latest release and announcements on Twitter: [@fontawesome](http://twitter.com/fontawesome). Get started at http://fontawesome.io! ##License - The Font Awesome font is licensed under the SIL OFL 1.1: - http://scripts.sil.org/OFL - Font Awesome CSS, LESS, and Sass files are licensed under the MIT License: - http://opensource.org/licenses/mit-license.html - The Font Awesome documentation is licensed under the CC BY 3.0 License: - http://creativecommons.org/licenses/by/3.0/ - Attribution is no longer required as of Font Awesome 3.0, but much appreciated: - `Font Awesome by Dave Gandy - http://fontawesome.io` - Full details: http://fontawesome.io/license ##Changelog - [v4.5.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?q=milestone%3A4.5.0+is%3Aclosed) - [v4.4.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?q=milestone%3A4.4.0+is%3Aclosed) - [v4.3.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?q=milestone%3A4.3.0+is%3Aclosed) - [v4.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=12&page=1&state=closed) - [v4.1.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=6&page=1&state=closed) - [v4.0.3 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=9&page=1&state=closed) - [v4.0.2 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=8&page=1&state=closed) - [v4.0.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=7&page=1&state=closed) - [v4.0.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=2&page=1&state=closed) - [v3.2.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=5&page=1&state=closed) - [v3.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=3&page=1&state=closed) - [v3.1.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=4&page=1&state=closed) - v3.1.0 - Added 54 icons, icon stacking styles, flipping and rotating icons, removed Sass support - v3.0.2 - much improved rendering and alignment in IE7 - v3.0.1 - much improved rendering in webkit, various bug fixes - v3.0.0 - all icons redesigned from scratch, optimized for Bootstrap's 14px default ## Contributing Please read through our [contributing guidelines](https://github.com/FortAwesome/Font-Awesome/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. ##Versioning Font Awesome will be maintained under the Semantic Versioning guidelines as much as possible. Releases will be numbered with the following format: `..` And constructed with the following guidelines: * Breaking backward compatibility bumps the major (and resets the minor and patch) * New additions, including new icons, without breaking backward compatibility bumps the minor (and resets the patch) * Bug fixes and misc changes bumps the patch For more information on SemVer, please visit http://semver.org. ##Author - Email: dave@fontawesome.io - Twitter: http://twitter.com/davegandy - GitHub: https://github.com/davegandy ##Component To include as a [component](http://github.com/component/component), just run $ component install FortAwesome/Font-Awesome Or add "FortAwesome/Font-Awesome": "*" to the `dependencies` in your `component.json`. ## Hacking on Font Awesome **Before you can build the project**, you must first have the following installed: - [Ruby](https://www.ruby-lang.org/en/) - Ruby Development Headers - **Ubuntu:** `sudo apt-get install ruby-dev` *(Only if you're __NOT__ using `rbenv` or `rvm`)* - **Windows:** [DevKit](http://rubyinstaller.org/) - [Bundler](http://bundler.io/) (Run `gem install bundler` to install). - [Node Package Manager (AKA NPM)](https://docs.npmjs.com/getting-started/installing-node) - [Less](http://lesscss.org/) (Run `npm install -g less` to install). - [Less Plugin: Clean CSS](https://github.com/less/less-plugin-clean-css) (Run `npm install -g less-plugin-clean-css` to install). From the root of the repository, install the tools used to develop. $ bundle install $ npm install Build the project and documentation: $ bundle exec jekyll build Or serve it on a local server on http://localhost:7998/Font-Awesome/: $ bundle exec jekyll -w serve goconvey-1.6.1/web/client/resources/fonts/FontAwesome/fontawesome-webfont.eot000066400000000000000000002122271266412531300275100ustar00rootroot00000000000000LPj^FontAwesomeRegular$Version 4.4.1 2015&FontAwesome RegularBSGP݈YD MFx>ޝƏ)[1ɵH-A)Fٜ1fi)׺U'&a n;c)2nb$'3JV䂡@ꯔy|[\AXFCp-B̄ VܭU_^dV/Hvsrx9*cN%]72Fb-$}3*>q5N6d狲{*q%}BH$Mx{2ꎟ } d! C_ ugƒK.~Ey:G*# Ot5apOҌ) Щ?HVCi`@'@8(P@EefԌ6aGu?e$k DYyC6$FLfV2v㵦UklI&\β[/*d! l 1 D X̨ CH?d. }XBsH'_5 D3˼Pȏjmx׉ @ v{KIJVЕ4p%QH, ¾L|ݍ9@_NS%3hԳ̫G|EH oǙFzk_vȍ2&䅐ZۚII;2H!#nR5Q>YT!~JZf~ #Kiw躛jzd%>aĸ:)ˏՠפS`@`'`/>í#npib?X`_Uʃ(7W,G  H݂A vqߥKEeYbf[<',y j}G c-\\w.<=K+z>jܠ"B'kD e( DbI:Jj)ƴ=+canL/6bVHN}t/ӠvPC2!G \"" L⿅e(nWI+;\M $܎~УGu"0 X]-[Og73gfPE_4\e[m]S:ŘeћG;8Y ,3`2'5Y71ߘLL>54V9 P.VI-Ux9~Ht=%'ng < *3F'y?#[/Jsc $OeHH#F'Lq'kos!hG<Ƚ|4t1BZapq WӞ|:櫌SmGhN 糃D 1HVƵw  W鈢2?J ă0(8 ZJ!Vb;^*IQiuY`sjF T* i1@qJly$q؉Ű qX0@]0& Rw3l]yT8tyJFtiYSNmU&S2nRRUҊ[ #-?Ӹ}yw :h: HG 0 _c`pLJB"j$2c: G2ƏWobh`/%6)ύ!lܢX/ I8]^o { ]dr^O1u,4,R[T??*?Kĉլf;fާ451ЭN3V)'`P61wT,cr-MSPTX Ͳ`,Bt,9uBN0/g [\y0tSx\h)_B.F7o[~7\m𲇂;X}6ĄQ"y"A`=ZI6T'lO!k\W#{z͉%'R։ ۈ]򗌆 CѩM:>_.(4_ƃ|#*+k[2L2u$B9-4.(e5,=@B!{ZED-(%2gsLih[#ϟ>-@;:cEakJ=F2υ'D tGuMޫBz( Ca("% s2K$ﻺ^oO V{Yᵖ: 4Iя5%onm] \:DP;/ /ȸeE-w^&9:~gC 7Bnl,wkf'>>I If3^5_jB@5.@5GqH! R= O[aDgA@Tɧ7.JVxB FuHG1"* hBON8U) Em* ȩ0l lF k,!!I 3 Hn<6@Yqzk 3Ģ3)Q5H[ B hB, Zı,4Z_+C df)]F"k=Zǹi4@ᯘV`T*d7i.Ge]OZv{TmFc&pUq_ 8(z駪jD9XQѤ7, CKMo9CH2g:d]QSnj31jnHxY!l, Y`O<@Gh0 )KAʘa$̑p2HCݸzE3gs7hc<8P)1" x-%/ Ϝb|v~6^AdǑNS'>=Ba' ^ً[.kܲ[bG:ëGEKm&!<7>$CSA uvJT-=c*dX7yҵ7؟ɵJ*6Fvg=璚)N t|:'LQ\6Չ֯&lņ(nHe(3g Q` 8!,,5ށٳ81 szW/si !1;4$g3^w"JtB06pM+2xINP=&*T뽒sZ/Z-0jgYSU_s`Uc`aD>WЦv`w,A .j׍*BǐAKXml{C@LF啴5<<%v*upKI&}*lR{_ ~ʟ0ï hA/>t'u]Mڭh*x !%MVJ]e l .`4\/g߂:FM"Gqiw2'C(e3P{0R$<# -M8@"tÎRjuGk_-`,tIԺQg4c(cl̠hL8E)iݩfmm3 ʻc (\ѓ@4YM'Du` ,e|KEL~%6DUf&m@xT&wV, /' BJ"YC:-!cvkb>ۂb>{d-@WU8AڼRXXbmF2!Xt6Mۑ~B J6\] ~`x^ta4 \N,7' \7A;ҁH "fp#夶`:IDfT6p#MH4^=[!q(Surm?WQ[Э1\`Xg 13>ŲJJT *]U#թ^\ d 4eKo]D,3sb=O62QnD(5)kp_hsCⅧ‰[ԥR8 1d9)$FXˁPx!]NQSw4,IpG#(4GaQ$b86Gь8 ũc`te[9O# $2L)Nn4ګdBY.һޒG=hBxAlaRUܶ.98ЀqL<&܁jԔL.ǃ9i2 yRkҳT/131'@hc hy-)ܘЬK;(MU}NL@OHOB$gKӸMQ4T;`K7JZ(~Kkk(N0Ma%ehl$Y3H]SuO+' V{;I,SC+J("ORIV4[F> !ΛQ3a$4da?(aٺN!EgsWmo>F!Jђ4{T4A (^+42/h5"m/)E掚 c U!`S-ꄳ @Nѓe'G돂n)4VUNy(@HUJDB@NPvEW|4b!8hU}(t0CL/-7΍rwQaeª#mᥳg$:sC+Q_yGnLF@/@psXtPC;v#;?4x&q4߳ѻ2? m #QGHyM > /9j:ݼBuTkMNmWse md#3ƨSTAhqS4wCŔ ̅ P]#C, *@B(볂ܡ}=>yQ1`_g%|&,x#ΘsQZbCLS=p s<7Yv4nզIa2:;t! H/C |9iB/Jgu y`fp2ل7Iu΂s`M\s݀0˳+8 Eg;]cGؾPL%|/ȉa }T9hi Rfݻm#Jզh(7)0Oy}1v*z@(]U%6_q a(AjgE  'fN#~QlG)/-pS5}M*A,]SMCkv8O{M%7˝8,Q@8hG/Yt",Y `4D -V~p՚cA2ߝǡ4?aL ;šRkYz5=ho<8kɑS1 #(%A%(V^<#Kq?Z<8:sF<<:9iiG@GOI "%P͜#HB)2K´%T F:?ʼ?뇶II]1 P1FMHN=4QXc'ZE.eetE62 y`"CFQ#kqx9r>d=@L\H,eBE oj_U@eɏ).qe|)ϵ-Wًp-P.\D#芳w$N@ΌFBQ<8FuYV ;,ӄ!LGg+-Ohű AE<`((u *zN3b %u"nrBu Ńd |̙4\U}HYEPQ$F)ؤSCeCCmPㄊWt$A\W3R(<2s̋ST#F9ncI4URK3$M"Q- .j 5L>?-"ZG= .q `0N7 p'Š;C_s0 ѐe]Wvp"ʛFl+ ,ƏBhHnwg4>\ATRYEJ$m`"#&G2|b$Nx k8?v_oWf3 &#ӤdiHaZLr~f(:'҇wp4of`0Y'[ЄX]4V/VƲRo3Jȓz1wOfވǠbDI 3 ,sC!)}dtz)`t.=!݀O,ʞ0Պ[WOY%1tlsPN|%6;"Ry6Aaĩe cuPS,%|~ $y =[49ees*ZI&#̚]ll!E ղKqNn㈳4'IhN-Ģ z䍣K$Q^spUIN-6DlRg!@h@;%Gf 0(qL'3Z;{]gC¦?I7EiT.L_$JI}TXc~v<%RPb2O"6}uT;aGu( 3Fy =b΂UΒ(]$f*PN'@?IrS8}JPlsKuSNӐ[lPٺgf&[EkeO9KWa҈;1@Is'̊((iI>? ##o4F&Q.:.P?ۋ ʾ4}R8Kk4P)B1z;᧑Lުr_yPZRdƯ7fHºw@z`Xwe0#QhR9?MɷeoiH1*LI?/A9ݒioO;Nܹ si$(˷1"e g | V`o>7#P_W(? $p +XKz(GkGig0!R8*_*$Ƅ1{:~Ip(pوj_ҧM!!˵m:kyi㯗zѢ \T㩥VBpNfB5w\erP6ȥ?9U7k6qB~`l c+xn ^\,/f)SD=ô꒰_ݲaFp q L$1Ur8&,^he?Y_^lK{]b>(Q[>kA/*ʄ9(xKU,td !i2R= ,C&$mEBJLBy|H/%*s{zw@ tXՓ,.MtdP|_BO|mr&T~հī-`ZJId+(&ߴ*4,=gз@fFc ! =eFy3rXy?*X}X*JFݩ1z;X.,>kGX'DZG.PYYq /g,$ 0,(urSKiƔ%9PQh+/xI )ǟKfx0yM/#+s1d (bfđQuJ 6-jfƼ^R[^;tL 9d ¶ sah5,hB ;E ͢Bf<^f u#}$3 l5Xm1! /l NАj9m GAPE-d ,~pJ` w8qZaL WTTԖ ǘȘ"2YcwO벞!uπX#0C~_1VSv,u (`$cMO>$%ͰbGMP&sp0dCNVqm'Ő!72RA$˞1;lp$(0@O?FcԐɹgv3mOEe|o~X6ms'SO%vjwb`)&9H;cr(x:r:{[f(d<'ܧ ƕS+%UU|(1i9S|C PtP "Bu!3栾l뎊a >1'((ăw:@fA hW7Z`,/T# 8aeT J_1̍-ŋxH [Sy۴\TTLG:LLh,MG֧G H[c]> Olu4"8ԭ=U* <`Yf$µ.@9"}D9тq"t8k'4{F҄V_@bhCс(qlu>啢N6/YqUsi~8(By=ApYz,´\tV52y+}aB=1.XCX} 2 `V_4("4ݕJPBZ0"_O&de6@M0C1๢$ՎGMif{?^d1"lsś]R6`@[$ zQ{9Ev[: e'KJhd ƌ ٝ:,`İ$'ъ,g")~f\9\?50NT lӫ^H-(2!)}oG _}y"osZ#L(@܀fCy$~IόL e8ڞ8_[ȅ7[Y $V E[sڱE3ʌ}J'-,8X̸ 'X(d7RЧdJW)t\ޠc87ya#B^_bG[f +c+G:!C*Z:HCP [.GH4C#T _݆J cAcj4e8Z &iQQ*̀&}|UD\X儴J_NK%@6#[xsK,^ `B)8Q}fBoA6GUGFVB jQ!x3vӺk3нE 3`,tH+Y?]Sar"sĈnhEnˆ"aG!G͢%9TĢ2=H!òtVD+o~l;(O p8UbTT;Q9&˔܁*6B7o40ۙٚ Ro/?XH&J=d> YtSH.BW+FܨRR됕DRY~vms$^j¶F݇G(Xk]6X*T hslq=06\Ѳ0gk! HARL)\dD""K^5wQ1P$d_ݹa8TDl0 D+&F2%h6g Ґa`;K #ss~|KVqjTuC-fr`CX5F ?l% Q8 ;)cNH{@rt=K^)]X0Yq? wxXdLJ"\8f5_\c1H#| 7$`/ZИ ni6}$k7*ܩJphnբH5O;$m9wAN#XW9#vĨeoۮ`{p)s~mp_[d`Dw ؤ /$6?#b&eg ޒn̥PW665mfĀ.Gͬa|EHM^Pjp/$@2bk=vspt5p|Vf1 e~\DtKdPV6Ӂn:*RVR*|`82:ip7:ټx)Ѕ'%/OztB$ӅbZ=xOG1g}eQ3sp/PL',v8~ͼیp#Qla20c 2dT!'u%\;$FL :15)Ȁ"i"_:$+Yޚz?<F c+)QiY~U<@:_1#m05 bpx1C!sVrvв)& ؅(i-M,s5EiQZy L9_ɐ,mnA);~fb)@q}C^p;/AS&9:8$ Gs. K[JCoOlXro-S0CRi Y`(e{=*`@R- t:"N~0_kxcT6u%d7&C!׋Y92_9M]< -y=('ua2 Z0aW?#fhXYG7Z k1`DkAݠHJXPH"7-V+s5y]|g  xpcFL~&(/)Em0R4}t@aWSqzi~tOv&j>'Ʌt" S 5ý;tū4R,l%v=x+~ybDKo4L LB$jG*qR t$WY."ΫYxH8#C9pm9H=Snrrz>*2zS~dC3Zb=oQXj,YEHGNyc\~T6Ďj[݃/*'[QT`!@/ (,ˑ}DlH"W6̉`[ #y=6|2lM\kpkewւlS8Bp Oդ!0#F{@ciqP)2(hɑ-Gb Qh?y7EZ~ˑeGx.B6)'ajKʀ߂}R. CXc]C S)ƌM'#,S=:'`HS?u321D S hn@Gev&hU[d0֦֗9 P %@a0= 7Ơ*lLzd(!B5ϒ%-:ug|6OHQT O/= aA˔r }M<:T mN' D+alJ̋.Tl0n2M l'[̀T0XD_k▵v 8Q/sRN @("(OZjo YgjRѰ%RJz*[{dZzC"#QV@0dR!\-3H2U| /QbD:tÒJRŏG糊箊N"s9Ìp#(0?)pN%dX P[3P/[-Gr~,Q]̷5t Jnʗ ғ6jρ`L+nE{!YL_q-q;#gAYX˅X63hDNOUا`59J#&6~XM1P&`pI"3&CoAf^:ZYJƗ8ZD[ D BB lư ިB+͠V[vL dUdt mīD 1*u 3mIk[xJS"nUm/wHzzm/R. B5~v:D(*\V$8_m$0WCd(:k3=w\*싕m /{}Chb Ɣ-(<)~ 8NwV >.%pD~Aێ,<4-wPB- ~-WuBXK`( $4-~nB&Oa*8Q2z g 12Q_Dvl-DrTքᕟ~'q:5j&="%&|Y&~[,aI28DPORsFX;Da1dzf!Wi4iց,MV^#!NjʕogT8Pm'M7@vt DMbLM]QB|1 "Esl̼= r`d NJ[}𢐴&Rrx_ OIϓ%^EϾNq0DU̺= ؙ2+xxɓtO6g>t5 t&NiM!:VaA F9Ddԑ,ţiht=zD:GNr0<ņ-F5 j!ms(T W+02Ѵhd) UA~ov r\x 8nb%>/ Z]ˡ)acpRSc@>--+$c੦r%P llӺ6CCPI̿1jIxyrrabBiaOqX?C^wwC=XL Z1V!b*1 /)JPjM̘=t@rХ&[c+g NͽZšR1"6]"g#(͞ц l+hRϾ+eC!$KHuY O)nյl h<",bL՗جOuYX7˦'W\`0#ů;3`#QdSx5)"wx2>H`g><`R fَp،j.Tɯ|k^LZ]V%u;В'.ZEN`aCpq | `פLqrevuRNj-+`Z6+G D_9G'*;t8&%G=ݙȺMBL~vd+.GYT*; w+idf~{}l?6J/S9y=f4):' .Tb/6IpAa5Q8?&Ց+hyhO9D@s +W%d K9&{F#3EhT2|/גETt~aذxWi㴻e⼍*'2mۨ|Ks`4y9|T$\ Fҟ.hJMOlL7*jPwrKM%GM]\/6:}Ċ|\M"fKMdP6}ӰOD5 yհC'z`pOڀWal@=O %-EOEܘANt}MI]%7+<փ pF#hBd}M7*[ #f#56piΆqj1\:1ڂMV"'Hkr7wחnnMX! DZXrAw| _>RGܠ%К Gm1 {>%:_JeL@bԯa*)_2DǛ+R@5GRD<9,a[Cn q+1uWpS0s =x㎊B狮o+CGa'{ W+xg5t̙=8c[#֓ɸ:Ƨ YB6p,4g̓^?2 z@ FAr.fw ).*.kܘu y{oP=p֒e4I7t,## lޗe:I/4 [jDZjw"8 &?+Nͪxd%R#%Bo§Aݒ٘ ?<&,"[qR@e3L5Q|[||l44HEQ.l u`aPOlS1BX VJ 9 fJԙgFKJL䁭&߈D_0D=roܽ< MGyPKF`8ӕI ZO _ ab9j7|J~h=ů%LY-/Af b0xz.cI `7Yp,4&{M,;e tF%q"&_Y_rA m,jS{.y@ҷ:ofsp)wB_w ;@0 Rl0#/C@,Y9,]蒅l ] ٹ]Okޤ Knլ4a>Oc;oTň^Kqq8FĭEva=E`3{篅=kmgqhRI,QI[ʳլԇðC a2]jj<+,n21#"F 4/# &A _l5޳&8Xΐf3Gp]F̥J6@`1qŅ'&v*0$:WήmTs ?$SliF*-Tp9S P "ۿsiZײz`NE;d'̮.zq|/8\Cr/i =4`Yݒe0lN>z`ҕװk9V㟽ey0+~HPSMIݴ(`f}B蕬5l<]  !K 4\.`dFk!nj~ `P)TDœ&I(X(8|&V+["O+9a\~ %lz\s.GWQG3%Tno(ʑ!_`GH7UVh(cP,x m7"@:TŲ8кGGݑc+Hقs1fբTȼ5m_`R_ܗ{hP\~c7l:M"X{_=s: 8΀N]>әwtvG~7T@yWJ1P# $?7`zx`z?rL2XejiA&Т:Cd4v^.4x'J)XlId:$-cLb8:d$@?50p,Gf⛋*Fajf<@5b($W5 lsGcR]c"K<O^C&!\@b8 F|5-*5a3 ( *l(>V1UO XּC\3DŲlڐ"qfK)WDB -:DOoڝ[ ( !92vOݮU^$+ H桄mt'ACHU6=];{!I0o?V(BFb ^H2 jqF5c|r07WB}֤$6B䥌(m 0t 8,4bUm9@CpTdҝOAB+ZlȨk|*ǻsow;5,NOR ւx6q_SEiTS#"o0+h>9k;!7@Ĉ-S1rjL1k=,=N'V e 4PbRmM6Nz$2p~ֻ(:$?EHZ8yYe0恀͈e};݊J w#GќWG94˜d&ʞ.c#c~o2:b@8y&Zhs|g[Qd`yլ[̔d `[߮6,>F {L͌mZQb:qjUNL2rSAƨJȍ34`5ܯ,UrXJEethfgah%}"K- T;*"Bysݬ#@xEJAAck@L|' '۟ &~8?3e,2݇+ A:ukX2FK_!qKL~fd!ۦ65g Ub O>#CxzP(ٯ0dЕa5.x ^pjwU=1]m[zֵPq^~'@5'jNӽ`qWŦ/٪{E}:? :l|&1 >x/EX$lϤ>?aݣmec0DSpT"CYMЄ:Ѕ샂ԫEٻNM` IrI:2h]-5n԰u+ ƃCٖvҖt5 A 1ֺulAwyA6 Ty>,WŖƐ)K گYմHEc &jP`n?~  @^~Y*G ͋Cͣ!q )UX:1h$.{9&-Y`A`C8 mf/1 \r.U8Y/x / mʁ X\:* R=ˑT0ژ)Ӓ_&txU &`|-uoN3KLRtH9Z7Eaa*/'-RkO<>g8 jW@*F\! H7ҚƄd2M%2@ƖPj`P_/_MQ3phk; 5 ˚ 1 S ieՆ`YX9"basfd9]-$}(,ôE.Qbx)ǢȂ灒a-y<0[$,2%QM@ Á){!ߥR?D'`1$: H>vCʼn6,H:1Gz&+h`+ { <1z -2){-}!#]P(<>w-xبJ?0jF#DVM  3) aݨ?XO4FV}:@4GflS]{ brxĊ4ce9+W(\YiUeKu*sNx&ʱN8z IaD#U#e;MU{\h]vTa`!(mDӽH"Al= 7O&hI[Cԓ|x UV„pr?e (&Lv6 m?ۄ,)XYjռ oquupw {6d=S#;iY ~¹E0\OeTB*yZqTrP0pHP_Dg9+cuۉUeEm;a^c"8}A97D7l .e|<е"L܀JA-jCqH B`M)sg?g;`bheNWJQ_[avwtF߉pO]w{~^W ߣɋ|_] un!!im;0$Y(Ţ$`I 5rZӊb6C+f ֤ Cccx |N8:i*I3'JJg;w3S[Pq#Or!DF+Hm1,CNh<<xs"+5HH/et qr~+d8Cw(2"an1>$p K.ǘD?Tc"F8#! 6+eVp@4 XgMk)h詵2Ǥ4<2zQ9Cv?<({W'o<%'0ܮ.%_J _ś~Z([ ;M@T܏fe_ț<17XD$o"cI Q'U3%TTT^0Q))lÓ. L+A#o"!3]-R( d3fPHត̡{3!6^R WW qm~H?~י7?P"rh/8qЇ"eP<@V)F^|D0G]CqNFȪ=.}U^mX^9=b5esZCS5qtk1fh}ꤋ+k]G\g8 =u&a`%w2cK,mCvՄ )@``Td<1sw d7zz1)ȡxNpA^<-xrCJrE= 79L $Doމ?W_⽫h!'7Lq_(f9!Z*Lbmw|R[- ]Ұ* \m^@U*q2⎏g5@t`dM[l3OħCl6O[BQk";":gѨjf-.J^$rJxP52-c IoFm@,vn@ $V%{.p( ҥ:Ink[Dq.@>\v$5ͬ }pOũ~{ -ɨAt&uWUM_d +_UInjM^pSK m EA5/a/9COVcR?=R$3HA/P$f`967 & [+<.܂jFu:gWTNzZVPܕ+ͅP7V֬ Όbp~o3ӗjŒl*zAJU0U)d`DZ(a `?jKjn u!+@:3ŸG 1# s0 IO>fNMHj!6&. LyG1D`&Y3s."ɔ 6"x1I!uxE^_s74uaO#&Iyo!+ H@G@xr7ի&j`*Q٤ ({BhX*u1V<"$nN\- &b6f89w6>np鰠p>3b+*< NA7ZAhzWqЂ[dsT&ggG A8KCu 蹲"W<ܿ7R95$ $S AY[x:6C$T! ѷ9\9F4YyY50tQޓߌ1`mG7+ 5֑̠uѐr@F1lHY^4lcNwkeR'-Tk\ժ/3Ҟ<"h! ļ%=PQnnO@aN@j')ֹCCt%!ȯΫ @J9 v` l Au7ƉR^3i", RN&g2S,`Bj͚&vbKSp¬=R,f2GRd&N}@?ÆEE)!$ua F>brI&sтZ1a#3EJU,ī*PߒJ,vJ˷6-=ydJqM3 eG+Q%YwȲ$.7 VHi/}Nt&5۬ƓBҔ䩸+V4M@fk~o 5#_!I i~4>C-\ec>pnCqvvBwn HXKfwTŏSw%uc؊[OɠHf$ `!q48Vl\uUnii H3q\V ;Iqp-x"XÂ=\?$|}dz˦<*@P1=㐶hY6^qDՎ\7d)/L膄,DnV2iwJ-g@KYAl?* /=.|9ՙ  q0tu<\rdp8?]%Xe-!g zx6?庍ϧt4 ((̍_D0ۖ|Sɰ֙|܂bpGK_|ɇHmk#KG*:z5]k31O,16frt,ll*rv["~U=xUz3WNL`zAUvy5V'q|L La|:)k ,36&K)Bz׋KM1ŻSC|M2jɚ$ͤ@D[kH aVBBT4r$Mt 1e7;vSZg@tȨEG8P2f;1fq W wCl-xv\ .H$0 !XB5.^7+y1iF)V^AM=\300_~/Gŀ`7<U&m ǛI[dt[ӿx!`p 0r˹<̣[̈Rx4c[?ƹ?S%DPIR2b;"ih;F |Y4,R8YD"M5V=Ed=na:%qV0*2#>o3 r6rCڮSLJjf'܂fZ#7Q|+hYn%6 z=eXDb؈M_8 JzY 5gGN6ޯ96$;Y+MF87٩SQ70Ie$6_984z(Jd$h?!M#A f3 taos<ˤfx1+lp[ Sbӡ딀 tW""#RUr 'V=kcL2YSęNd L,U3"k<::?PҙX,l/nHa8&c}!u>!M-f=;J@7!m~3`)V.wܰx8f HgDc.".i  @ GD;)gn]g y r; ^tA uWG$zEdȷ2/6k}R*PQCT;wPđd֦b|A>?n]y@Ff "AoWZ КoNO& 6W ``zR 5ԁBWIEaU»=I1jc2ȆoKC#]?'D\dMB^|ӿ8u>;YmǀPʈuu'X<%EcV73пwAAQK Fhqm3dk'ɥa,0blMhgٻYwQ2"--zlhr y v@  z0#} X1I6 :HL D0WWYQG#1 -.1)QSE4 $-ďNFz$24ϞzNXWpDET{Y0dQ# MI,fU?O/O>pn;t{KF4A3 l ^  [ʍ[ rDZԔԮa`4_P÷&A,eW⅌Kn8605 B9w|j{d*Vj(yzQ]:u+pp*-s(x08x)o@\0vH1^Mc?>r%'3 wI" o2d2Xp 2j[NBIAm`$%pVÀ\8CD(=(σ( neF6n¡9lvё|xObH09su9mR]L˗(sxll25r <eѪbbpJ%mj>3  .»mg)FH80b9(Q}f7|%6t#]CK0̠cV@ !-rRk1rgC%&a(2r^ft3k o!Y$p۪ E#ȡo;fǰ1a e a@6+vZM 1V]H;} DO*h~ @E$w;1{r~ J6kyG9,WHvazFe%f5T%u ]'tVPth7K)%NEXR; I_ۑ V백f;FL" @ZHT-+NopŹ#I&AȓMy w'3[h"xXae:hCWW"`3T1-M܉!Y_6/l-9`C?CT{d`?IE5V"FygDRQۃ n+kz`aw-劔.Uei0 OsV0JSPޕ7 Uxz+QԬߍ`:#!5chH:F h3rsm.0-J(0RF8v~:6F:е9%@,,uH\ Z NZ.'LoZi-JF&h B\šwӝ;%'%Sښg=qGQ,N"gU>÷M1‚Ke]5l(a@`ZaX5ӄtkV od* a48dV4z1c9)À@@bZ#Xȧ+kj qaWCιzt 9TI?a GA|BwKqT%BZ~ټ;,hjWHi>DM~Vմ?ޱb'e!.#nVe|<#p#b%'=GӎŃn\ (*H.8:Eι9;LF?+Ig/y]Dz%rAZÔf\}!C*W@uղ*ɱv)Zΐ8Vn;ֆ| PT춮 oڊ^<WY%A,@DןT I`yjBW%8ՉOVG5k7n"ĐDƂFt$ M}6@3\ ˸mF3M1>|HgM6P{,ԲU%3 `{plPD$?2ɇ%@ԓ6J"$a3/|ZQ9WM ;n)# Ők)Ґ9F7I5Fql5jJJ%9BmJ89c# B6r@'37DOǢIyr6V2e>7rX9BΧ*6yFҮ,Q$_OaFwv6b=xJH:ESz܎H}41zg\D1>5{T bL^;v86Eq&zz=IΙX ta`|b#6#eUW4'2*Һ`b{S&@qJzY#g@R"SZ%f'f( DI$"@&Bc[J\UB<ekv#}=AyKK:lxځFCRsw\$ミFTٰ /Ic(4\|$^Ol~hԣcL[4ߥ i:_ $ pm5ڸxSN@P=#7jB>N|G| _o#*jcd@DŖ:K[BCSʢB@e8 +U"O`k86nKK&Wim;\ґ޷"U"rs“s5(NN3W.Ȏ @C(zQGd@̰ɖ2p$0}nwbµRr C6>]j ŏ)GJSȐD֒-nC]Ax3 cL hq'o,܊?y9]yZj\`ot$/#w a RŁdo`ɃXœ( (nBɋN+n*n mjZ X00m:: o}¤$rv7BĒB = )L1@Jj 1BV2Gjl`tlɻW {DpO쀁2]D@^/pa˓c~cH QpdiTxRWHM7꠰]"ΐUͣIcdX #v7 q:"С  U-RdB0 ?@vh#_@%ǿM0zdٍ:0.!,0Un!{HB3r5j]NףdLYQlwl|S 6N""oJ ;]x<-p%D^̦*$znF3Wz4 v۶4FOR$xIP\ÊVeeb;*IHDv_#r`!g*#"mi^i?1шs1M0&Ɏht872&eGjqi % hTE^$.CTU@(åxcw~ڨ\App6FVp5Ŷ C)BOv|gebNvdW8B+udȫ,JYQnߋU _2u?gyZ) _BشOe !J q=] ˏWP4F!R"b ҭLOL %>& pi0ѳݢvtm Mꦲb/PC@o  "`CX^MJԲIԁtPqx,pFDJ J"_3VU' qNeƳDN(L`$אq*Vo"Y_ىc *ʾ9)'j/PPkkfEedrhM)לjX('SYj<*} kiL|^laq+ tфlnq@eh^ ޾tɶǨAdfd.S8&?vhLUSsVB3G~MM-hC Qo' FY|D dl2|,S{sg0![(ؒ ;њ 7JV ϒ0+){;S݃ LcȌOMYh= #Ga$@QҌ^'@o=!ma=Ҿ7/^ WҐ;a-iĢ@GD%']K/W>CFԮd2ǩ]rW35XRX M۬&A,* a)_}t'"k :da}1?D45Ӊ` a׹ۙF =ZWY,=PKOH>5 COݻG0;)A@c!Y ގ7 Rjљ}1z>VPa 0,+=oޣQ> F 賱]M\ y腽Q;r:z7%zia&MߩR e9Ä[n9 ϕ#*{X晴ڃՆ9N`YYz%3fm$0F77`/B!V*G@Žjoc0ߘH֛C!>8 2Ơ H{rg*# ⠻Cvɘ5([ 'Pr%ii‚'F4ٽR=!9!SO$l/,Ǘ61fx7,obO!c$}K.A:e<Ot (BS;F &5G y'!Jۿ>ky3L&^-c[WG`i)nW;/aOGT^QؿU\)B ~(j)0qI nRN (vK,(+ ΕHtҞ&m,1H4D2O<1)JS@~ $L|݈*G4l!5ydoa([bT%wJ3- avN$y<khIebI4Zx.)Ù=B*=AbߏбwN q1V#_x?ip`Afw@*E|gdagC1z(ؕ̾* [4~  ~"X;phjP@-(kFFa  aGY4iDj2x4By(4gshi0ͺc މǐ1sSgߥ0 %[hp}񽄲I9VF x90_D.ut*;;zOxC}F|{BTWUMpȹ`LY ܢo_f*Mi{j-pH 1mOfV1&oK,9]ntv&0iلrC~E"OڦE88ףT< 8 ,@9jͫȴ$z=M&ŋYB|R2cs4T`b;i! 3l6$K\W7/ e Q6YaUE{KU_m'=FuBܾ6W["GRkfP&fκt/GT y ʾ)l筮!A y%ʇa e$3uQ1b |ܰN4@S۽ !iz >4AYqbZezHh/Рa FV)aFRnL'%]Q=ny0֤K4b%xс)!e%9>-;b[XV Ƌrʱ<h6$%!Ed$KT[4.DFDG9r.֌b#H+,,:q3P0[q8uQ'|(/$_YW*UyS [ K*+HCbmqSb>%51^? ˠqx% A_&ZEuBn`JFgR~/lOoAR>pvQ.? Fi⍌#?ŕ×bM҇pblU쁽YR(M? N(E4⌓뽥m[}Zmn[7Q{tA__g/rHIIG0 BQ:g[j=FAsG@G޷ᛴ=.(7foUuiƃ5qO88 Y(Y!"WlR,@+3E) `PH՗\UQFi5)/5hȄAd:奺nhw6;ʟЎZN2?o2<1Ll¾R҃aV3ԻDP:c P%`}V[O5_ uTvJFa) d gO $c9.>]?mfс;@}tC>FKό.w[3 Ǐ@dD-'hrSmx8D["15Z=6^4asM&z %lKyH5hW]q ,]G&_$=mAA3!$tc煄7Pnst 4Z\"x,oM/9WH0$pMRؙSep3ˮgZ^nB4o X*E"l }R;pEmȟ{'is<-6MrɷZk"vFxM/dPҘ.B~ /ӁD[3yf;-Wh̹.VZ9Kf QїѢY`u> ]bwC:۱^l9tŢ֬_"V7c+bjsZɐ%Xz45G/azQJ2fCWWN Ue 0<ס/2%J!4Vb t&ǚeʂϽ(vNBroG7^\J@$9!wTХ:@H\[ ͺJ*xOp5a`6rڋN9,/Lzk  a).^iKd`p4ZsC{1b}(k(_p(_*D܇>{@ B ֹX}T cU:Pc?aZ* 1P!|yc%CU|.l i*YKK{N@o^>j=ȼYW,Ӱ8g T=dg(;ϲk|1 |@ͳCkjʹ`)m}ZZB4K!-k:THtFgp.xō4[ƇQUIζ[?w2'f^Ճ괜ԆWZ1eq.@"'tAWN Ԙ?QpIBdy.;.I'0udQx8WЄJs> `nQ΂ttזQ²~Eƍ>]d&5ȳ4_Um2LϚ`2g>q\(e7&DG|}~]t84 e A[YITxo -;b]| 8`utu8WabOخf(qII>o'RM Kp>8G롖EűX1*f]IhX40.({7~d( eّпXy?AR-E{T Q׻HmFz);O<u@l?_qK f2( H> 0@G#fѱjmZ9 # \scHw&GZ%[4Mf A+mUTe:UsO& _l.OLWQJ B$t}厇TX5J2dkzŒwUSk? ǕiKm{s뷃 uqʞ,t7m5ʏj -*\\ٕE*1b%NDN" \ٲC8" FxD` NbE#PTG7vv! 5Ophqmf7W"%ccMo3p,Od8 I{֭,8?w%r6xy7֫ i2JZE@ XFaD/yF\a5̔ۏ oՠI6O~ʘBDS'ao1xuda_2^""' kI9Bm,{ҭyCRߤpX47JW] 8 B3"rtKڝ| ͸E ;l2eE- ᖌ͹G!Ki KT|mo }g$\&b\eܗ0  @~h{@(.: !dz"5w#I/J$ZA'`UT]we}Eb6b!2TcYM+;Tk˳ًT{2{F3LsWod8} U&D$t\hyJsǣ+jF< 8;FCl: 3\ǎEwS:Мj6ZJ$(' 玊Á;57y8oj?W)s:0Լ^TzŸ·HX>l sRc}?^7a#uhOhI4v}LXVZAE'`q)9GEa(_UR H움Q',xdN1lg|:h%)a^); AA-_ P9*:\c۟Qo' -F) (+ ,ɂA0xY557X#@\p|ͱ)o&^_>OFPj=S Z?ҜCYZTռLe]ʼn?SxM- K<[)x&Xj45,%ZN?ɵjSufKM.`"&Vs4(AJ3w&Ab"Xd])B۳JIv=) Isx6nVULO"0;crPP{ڠV"iRjfF3>56.qQd&qisF%^plrF2]V P/ ِdB1H`@"Mơ1~1& LG|V| b(4  P3*eB) ߾Gg?#u; |iS*WrlPhu"՚:4&r 8M%EUXCK&fA&xRV;f4K*@eDC<Z楴% ]J]v^> D1SƓ'9‹/f"cU6j"g}Ƞw~O L+.8XY ~*}Q ђq`"(P+Yt 6d4p0%#\ƒ,n _E(o9uA .ұL{|ڱBzt)PY8~t@jiKiEh*D]A%;8cTdSp+;3oa5!ZCBV,BgL \n z6k4|b3Pc4ߥz9L0xs :dc.QY`YR|QcjAgU2yA/B!B7quyXu o@ [4 XEG,PIfxuS*ƪ25YiVՎ7DS-z}'ԡh.}xS[tLRBg&=7b*:D%@-@xarPؔG,,Ȟ?OuHijdJEBKY0|`L$M䔇ڮce QR>^#٭l:A vNg2h%ӽf\;ͼ/ + dÝ~$z`_.(@IQJ6}t7Ö)=d)1#]=Ɩn)aq8P -v2 B-u!Au^@8tUӕ0 ?Na:8t\12^4k  ;}\a?>CB|%!H'Dq<+CKXD('`tdbQR# B Tb9+}/`^`G QZ fS?&tV^e2|feuI߻,GM2T j(Y."P+ FRLrE#Hp[WKw1뒷|aR\02ڈIẇB6I8o(x L)u+L"TԐtY:ҊVs0g]?NA`Ț%I8qJaGlhL~9aFz]EqJz i, #1fB7 i Kgau Zȁ^J2URp?lKH9gbltp8<&7BO?]9j)$¹^Ő<ER 1_=uJ$H.`GjMo>켗d [bX^!s=H:A ؝n5қ \ۢZY Bkg~m2u\97 xڢ@R˛!S O88L(ָE$Xy)qT^& &V4?bTewfQlŵuI4rTDʿ$Q l %J20lr`gIITl<%l.97֎zyB'qYq'i4ԊS{@d֌7NRkdT/ߍ`#Qt64?m׀uHؚ6Yԇj|3ٗ=bl&ɶhƖ94AW(>}i"y nY|53X1\cVki(KlGMa@]A7T nц/_{Gg _7g2M`+zƑض H~*~(+Jή:Ax ^?F[GdJP<ߪ=)|+#Ц9'_[z9 &$T|S_;Qy&X |H1%%:N8sQ\[fȭ(Qh]HIŃ(Y1WՂ3id[Es=e0_ĀL[{, 8%GnqI)!cL@+IImY"|v.'=b3Yᮄ1++a@,1j…Cwء=#\8-R'@,\Sǝu7ƛ ^_*q)ƧM8<=B蟝:JV^d.HV Iۮ2[mA!,QV=-[33irtDaa!ƽR#,fD'eF kӹƦ6P2DmQP킶>vrE-`%vY2Gv# ֜f <h}'mDaOC+YyEa۳(#AhU Jz$37-J&p$ӛ@`XQLSYMzLjx6.={ 5V;l{ UjA`q [ cކ[ 8"lG!ՅKOY*Ph\m܏ITR&݉;{N[d=>>Yv'^0@"nag7*"LQYGg!驨.$0PȉJբH4ӷ5oTʅ 7iArw-+r4HLEݭy|wJe-=| ߴE#SS G(fhû.-k0Y \ݝƘ)D<,~vl8:Da0k5;|]?:؍fӧZn y'ƌU0i:.Xᖪoz+U49 YF2X̌ ;I\7$BآnۅkqHݑ2wW`t2UIT m9`M'Ljk^b< JԽ u8|"G5_qG \A|Gmk1W<\*>>` `"эK8( qܢrU'p ZhO%T|o0Va17*[%ABC¤ X8YJP!f @_ndi;g=@HN_PUc]d0N\E#MB'*9X=z"P=K-K KXs܎/4~]BKqܞࢠ\ӟxsZF5QD:i䈦:-1P %8R>KT` "9a8SfH6eKg?AAJX[P7R'{頝$ǐ?n%׍cDяE!~Z!IVw/}0*`y3̰s|߾b@j"hL)ϙBWݱWMpל8Vomks VpŹ{$p#i {HAB%0%P׾2ZJkX|7)!IN[4#KjneUZ2=i ,,e`y9,-R\"e];XYgL0+Dn;lg6E{ Ф{;\av'mQT{}QAԾqIQ}A'qq&ݔF;F{#2aPOE!;n4t UvBP9G] 1fnH9h&IX :c@wr"IQF@-{\ $yB7fk/O`Kd%Gi>Z]QT,"%llC YFF\-M_nK۴^yB? Yl<|`oK$󱝎v+C$̘zgCe疤T$(sYӫ̌ :|v?~Kʏ}ȸJF^","ǏJʰzh5EU{V#ibxGTؐINؕmy9]qEwI 55^BzJRfHZY;, gqDޙX mCn5f|3.xFs֖Z$mOgwƠr(4ba_Z{Apl eZܥ gUHF.%tT[D8~*PO9i aWCo,16ԗӾAx2{>ͩ_f\HkEo7;8L`ZASe1bՐ%`;$D#4>\aL G)FzAy'4.2ST 5Yn̚US-;qysn2aSTƓeȄ6;+jx`Z%k.*vܣqكP6Uϫθi<)^n%;&ʠ;k^`.(w:Dk|D̬q9NXnOjAH1 S黸r56]9ҽ/+3b(bypfz,vA}x.ŸF[)E7]+?MȮl6iCDHǒ@kR 9k4MJt'ƐS80kdQ Oܩ&ZO íFax{+HZ+@8=|OvxF?tށx?.~fA>E?9Uݱm'?2҂UNZ ]%dR/@ټ:腾) A9/gun} {%9Jˡ SIK: H@)t=*9II:G&KfGnqHǃ{s]bl^|^݊Z%6̙Ovq9 xJЕ ,n-\0`'$CCSfK+@&L㞇*Ax%$Cbx0nAp/oaIJt"7P%̓k90rۉcśÔͬ#`CVUaIf Eaf шXU]/L20"RAr1#-nW5sdۭHU"W:2yD'4䉈IUȦ$E$b5!P.[nGx*O 8ْ_/Q_,iV ƺn6AW)ǯ%D|Lk&mb…e8 r$8*Sx0ak!IF qi عUHP-08J42%E0U%eht/{Ij|'iP#+y .&o=HLgJlr M^ON WY*}叼񜶉^\2 \C?[u111&Gރ? "44DC ˚͸ؒRl|й{*8GMN/@4fJҊx$f_JǓIJ A n,΁AIOtP#8w0cıYŧsyoSe@P1q 63 w?NP L%^% *ר|$]àČy%6#w)#¹dP~&"cL9* -vt%Wa8zQ o8qܬykɇl V?bтSK4Ga'Rj:_\;h? }·Q2GgZ pf~wװ AmKz xN( uHmI+b0L>M:IR]_нRj xFkѫACmA&EpkVHOdq˙~oZiG;*ؕ(yXQ0Bo:j{Aҟg/ZA3bjȴ:@؏SKKkrܖ*&dm-#QI7FSr{.;x Dnt44NP:Xx` foYPV!(1Hyg55ՠQB+9MHa @zr&j:ɓ;š]F`B_I IsoVE"9ǂaW}0ua;/_n_HI䜾QAI"# hKcn|Sƿ$)O}Pcgjfhɒ~''QeS^>Ha}@Zѭ ג ??( UԆPNg|G{!%gD`6<'B1>5e1 u*)l_ᲔYlz(E42:iQb܍" "BO(<& !vL8E䉩6ψ+'+"_o]yisٺ7l=B?}P `}pm-cnKBMQpȂrEGUk MaoK>LH 2(0NZɐ Tg74;9]Mdz03v̭я/LA5 )}+0k Y/Q#ءZڵxydDG61l4^%yo qS٪"Hc\Oâl랦GS[.6f^kMz${z7} F]8 dXC׏"(# N S qh6ih@-94P[/ޜO{կMqְ}{2V.|*w9f}9v+g ec:wIiˬd J4yaB1Bo9ftE<%ngܝJ`q/,;O39&T8c=L)OMw AQ6U6 SH *:q0ڃ_ Bk١س_P Mk.msx`r,M p1lc;$: o7 PUq*x^cp֨.-<N:OzP3,Ԑٙ8Răl4!h^,&]hLlܷaͬL¨%c* : 2PPY 8IkGRKPE AgB&6 J )mxC"p%-4b*X8auWjPQf!V⬔Ç֡5ČEɔ7XyqjRNHw݄!64#p㴆t)(,nm>86$6PH8{ 1:9V9+\Rcbt '-! BGNLTȝ K̪f[s2L=A!0HZ m:\P;ۑZ zW=r&yjtEuB/R~8iaᖺ..wK" "Qr(D]g&4# U>V›&)j7lqF%|Gd'rP8VĩYawIȀ|G-~fHJ6-*%J@ K`H ] qׯC|q d[)ى%&?L`/+ QQ6Ics[:Uv&{ɯ@ 81&$mKg ^얨2D \KfnO?~݈NeJmZўL5E@ϺfK2 ꚳ^hl94 CoG=%mzfYA{ ٵ)n=n׷ۜo"gƪb\KٌlNXd\p"0앶x-pDaݷ,$Fȴ#H̷͢ėEE0̯mړ,غLE^d.戇|YD"BAZXFǚEYg1%-T,4no 4aTT(?%Dl<0 iֳC`~Hsr*7\*Tɘ4TT;pA0/XjQDNa.bE# T& l)veS.[$:ב@|=QdkToNh7r0>%m2cܛĖ)u‚aio"Sx[qw-}i`$rspl:  0NoDeHwIANS.:<֖j7WN yd b7ߋQ Q0|yuO;3]9@+mj$m~Lۄ4C0D;ugzZT߫UqF*AD%q!) )6.KjTusm*S7r:;'~ >;Ʈ7s*Ի+h0h~ DT-cU'Hl5<MG)LjiAAT%ȫX3f2&-<eGjEʇ5L^^XwY>):(kw&`mEMgH`N"$_m5;N(Zgh#SgS:3iAs4 V;QP"2Ǘ%cCw5M1/.xJspJ.(?@af6J"P1)+a뗶uEf>PZ1URJ"xp@~-Ѯ޻gb>d1<Jg+ƣM/Ƅ(Iy'ZtY*`XK h ٠ .\5wΈ:' Jt6-VI#1uZ_f7<-v||$Qi5#2: Zl-­JDM/ ;ń tn6N?>r΃N,=A?}i;a!?;^TF$ VXA;1M7olj#}74m})gM HԹճrE})K%iWH_nQsz%7gr[N z3²{S)Z_+%ܚRDWfXJKQca(t h~%?"o#ɻFaR\wN؏Zh $U\Tw=.D $$j]#[KW;L3Iq( <_ Uuw,^p>fNB'd7wx:#zYautxP22w iwgܾE^oHfC|Wڸ|vm> p‰$uf nkI&qrrdlѽ>n]w{2'6ɰ<< iALdC9+*o|}A5 a y?Y>ߐ ,>_^*xBm557 j6)yDxi`~= >}"/i%}d{'yLdQ$c[ f 6jT-!.'V5& K }&3OGm 2 =L!s,D=l$$72wI0sr;u/, 6!%9%rC~e†b SU!Y`2G-CE5d=kCkOc F'mZMW>g;ídD3×M8&7/!$FYf{H2tTk2R4[4%x0q~I+zYSab4e a8p![€]3Ƞj tTuRdVv=\5KWΰC-UҾe<[m#{&䪧6("J4W0}lYZShݳI]ڎWZSчC74xFUzq5$NUT ZDADBM閍U@s&1[7PCH<xkM i|85GhFW\那= ߀Q 9Pל8u'r4eqjwˊbD%$ k9lݯ1t0xj4Nr]V( q-e%qV *i@Ơ׺? F1HţE]ZbY}դ,0y3|L NXW>EKHFJ޷"^DB3pV|pjHA`~crip&69]'?H|)*sjbPO֑9F ;</w|s[v3=U!֗f8[߿)]uִʼnz GZ&;Z,Ұlyy!W4,.j6[dgc_{aX{>8wf]k0@ؗg˴@D}"rvwqTSHie`+c;i7qg( "u1\* A>]إUڂbRRkJՋ] -vTQ.>WPPE hT[rF3k2W lƹEC 2T&`~7V , Ki )˵Żs°KD8;oaN1 _@JW_pVԝkHHP,>q4&"1\-ftq4ìyq1hk[j܃ZN\! b}33-OOYBfZ6߲B cۅ&c0ό+`p_1n6QEZp9Ŵ&^%YYl!g|bIܱ$;'R yAL&/{֮`&(=׸Vxu8n0~EҦo7"]U6O"vk$%%-~{}`+Ml3ڟa%!b`q<-//BhIဝK&6l$זZ\ P:?fWr1ާMh2P@[Ԧ08_P D@jl'o5LD"Aj53~"ښ*+R]M@eDlK@!b8q`ty!:Ir@*zS: (U6BZsM魼t*s kcKQt\%9qSbwFf3K8 }Eٍ`.OPJKPWhz0]Dj0XAdwѫwf9!IȲ6'VVppI7U?JH-- ßw2g,a 5L`epVBr[%zUu .n(=&[X?}߯$8ѻB2LI6{G) luэúLc/H0A'ɹ L|DH-8:d(|fk#BJ![;>{k]~Cy+z>c'kT֔`d@0`Y0vJ:7^'؉G,05?иJ Xz%:|'O[*t>fX$ ~YP(pgN3_.P!`T"Hhɼ쏒D")5 Gi湁/IX>y8pAփGGp郆 6f(#A J3iHQ#,F#0+݊.*TAo )LP@"! *8Uqa♅{ )@ThBE' y^$B@Gb%tI(a=fD&HHA="AD*K 懿 M:h?a [  z6 z M T ~ ol `2т HUhrpt (IA  $4x ` qp@NGp .dPGu_bo>O ?|_cۿZ*w?ɟ7]gVx_3zYꯣ>>}b/k=C޾aҮü&vWKɯf9S&yqhok56x&][<'mտKt&- ;&v mlm~Ǜo`k#UB9 EgP^e{u[nyn+Lf:+a.. G!\e󌋍ƍ@wQvY"uTQ+dPv@!c&w`fuO(Fjh0 9aU&Yb$je}AcLWt; ]g2I<ㅀ?#fQ+H<^2l:.BacӈB,Q^G靲`aϱƣ9ˊQcPveK?pN%00,2ȟ}M}KB )MGtigPvab/ *Z H5RE0uG[89p/f]҅-: d)#l'~'U(6-(j0`TtӤpƣǗ^X* 8rbkL!n3χ~F30Ne/~D)x5P@o30|GymB¡(@k~.aFnP! _{+f@'}}b 2ÕtdFDKg8m6E鎕yWZ" EaLk(zCq0vu&OPŖ!uƶK5ƐMٳ&F{I=X;+ʂ_3M:#㑎\=ߘ4h"_?HVÚ7xxi" (mŢsN Jz7W$[~-yHNq@"uStav½ MiYb,z1hb-"I~%xK6%F=~dPMKC|^HDjM>XihH]r%f-%lYVW|vEby[I[_TxVXMLTau<0K!'[¬ -I(u먶t-E"iMK{BNx-"s)gzP5Ea9)*OZxp;LvHcxk.T >ZR1ǐ) tM,7zW4RSCeT`6SŲlFdN2,ob'z\&* D騊MCe|=<9r(RUV:J֗8J$fЗV8һ$wثu@[JxыJ~Q9;a``)wF3I4元_ q1Q2?뛉9'b|:P6A@Y8iǚxQZgaMW4x(]W'鉐11PCF([*.EA^S+ _x:b`T@ـ`$SE:".'W#+I;<6d-O3Bseٸ\%8t< .?^pz4Nhdlxr\nF=/^Fhݺy~66įMtܝ8Ŵs`lH&jׂgŘQ 4#ɫۈ9aElGh B3* N|4 roHY࿂BJjJŭGW*QCUy$&mZ`- Pi9m+Wð$(@X ǒ~$#yMEHvMp'a8 O'gk\J[4faI \Dž'T`0;K`?PQU$ Y,:aCˍi6c 2Ev٩gpb"ΞX-2]B՝ATYi^U` ^)Bbzm| & )jJlOQq$SΡe=E=Q#> baJw]v8g{`QOQBK /I[+&̓"R|x» _S}x آ|RD|f1 1{?S@0A?TӕrxDgNo|錼8NnF A 8V c#t} N%-_ "гhϼݿ_dG<3|{ y 0.< `i^ @JtR{,ݯ|lס WHahcY{r՜V#!IaqZ7וU00DlBݢȬ[l٬[E`V*_rU8!^QPXVXR|*e%f ZJxPr,|-|p@^y>4,ʅ MTAG =鱃0rPj `:D''\ !4߅'g|櫪X@.ʋZ~qAbӑ'T0'=Cy!uDݸ|s2ف|5~UmLQ% j4ǁt5 ([L=ަZisTG/`#Zhrr>$'[@pq-3cVEĝdgwe7p԰p[ goconvey-1.6.1/web/client/resources/fonts/FontAwesome/fontawesome-webfont.ttf000066400000000000000000004253701266412531300275230ustar00rootroot00000000000000`FFTMjo)GDEF OS/2Yz(`cmapmgasp|glyf,q,head U6hhea [$hmtx)* locaiV maxp( name3FHpost7cA webf*VO*=Pu>G33spyrs@ # p@0 / _!"""`%>N^n~.>N^n~>N^n~ / _!"""`%!@P`p 0@P`p!@P`pd]YTC2 ߸ݺ  p7!!!@pp p1]!2#!"&463!&54>3!2+@&&&&@+$(($F#+&4&&4&x+#+".4>32".4>32467632DhgZghDDhg-iWDhgZghDDhg-iW&@ (8 2N++NdN+';2N++NdN+'3 8!  #"'#"$&6$ rL46$܏ooo|W%r4L&V|oooܳ%=M%+".'&%&'3!26<.#!";2>767>7#!"&5463!2 %3@m00m@3%    @ :"7..7":6]^B@B^^BB^ $΄+0110+$ (   t1%%1+`B^^B@B^^"'.54632>324 #LoP$$Po>Z$_dC+I@$$@I+"#"'%#"&547&547%62V??V8<8y   b% I))9I  + % %#"'%#"&547&547%62q2ZZ2IzyV)??V8<8)>~>[   2 b% I))9I '%#!"&54>322>32 &6 yy 6Fe= BSSB =eF6 >xx5eud_C(+5++5+(C_due> /?O_o54&+";2654&+";2654&+";264&#!"3!2654&+";2654&+";264&#!"3!2654&+";2654&+";2654&+";267#!"&5463!2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^BB^^B@B^@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B^^B@B^^/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2L44LL44LL44LL44LL44LL44LL44LL44L4LL44LL4LL44LL4LL44LL4LL44LL /?O_o#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(8 (88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88/?O_#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88(@(88((88((88(@(88(@(88((88(@(88((8 (88((88(88((88(88((88(88((88(88((88(88((88y"/&4?62 62,PP&PP,jPn#$"' "/&47 &4?62 62 PP&P&&P&P&P&&P&P#+D++"&=#"&=46;546;232  #"'#"$&6$   @    @  rK56$܏ooo|W@    @   rjK&V|oooܳ0#!"&=463!2  #"'#"$&6$   @ rK56$܏ooo|W@  @ rjK&V|oooܳ)5 $&54762>54&'.7>"&5462zz+i *bkQнQkb* j*LhLLhLzzBm +*i JyhQQhyJ i*+ mJ4LL44LL/?O%+"&=46;2%+"&546;2%+"&546;2+"&546;2+"&546;2`r@@r@@n4&"2#"/+"&/&'#"'&'&547>7&/.=46?67&'&547>3267676;27632Ԗ #H  ,/ 1)  ~'H  (C  ,/ 1)  $H ԖԖm 6%2X  % l2 k r6 [21 ..9Q $ k2 k w3 [20/;Cg+"&546;2+"&546;2+"&546;2!3!2>!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@@`0 o`^BB^`5FN(@(NF5 @@@L%%Ju  @LSyuS@%44%f5#!!!"&5465 7#"' '&/&6762546;2&&??>  LL >  X   &&&AJ A J Wh##!"&5463!2!&'&!"&5!(8((88((`x c`(8`((88(@(8(D 9 8( ,#!"&=46;46;2.  6 $$ @(r^aa@@`(_^aa2NC5.+";26#!26'.#!"3!"547>3!";26/.#!2W  .@   @.$S   S$@   9I   I6>  >%=$4&"2$4&"2#!"&5463!2?!2"'&763!463!2!2&4&&4&&4&&48(@(88(ч::(8@6@*&&*4&&4&&4&&4& (88(@(8888)@)'&&@$0"'&76;46;232  >& $$ `  (r^aa` @`2(^aa$0++"&5#"&54762  >& $$ ^ ?  @(r^aa` ? (^aa #!.'!!!%#!"&547>3!2<<<_@`&& 5@5 @  &&>=(""='#"'&5476.  6 $$   ! (r^aaJ %%(_^aa3#!"'&?&#"3267672#"$&6$3276&@*hQQhwI mʬzzk)'@&('QнQh_   z8zoe$G!"$'"&5463!23267676;2#!"&4?&#"+"&=!2762@hk4&&&GaF * &@&ɆF * Ak4&nf&&&4BHrd@&&4rd  Moe&/?O_o+"&=46;25+"&=46;25+"&=46;2#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!26#!"&5463!2 @  @  @  @  @  @  @    @    @    @   ^B@B^^BB^`@  @ @  @ @  @ @  @ @  @ @  @ 3@  MB^^B@B^^!54&"#!"&546;54 32@Ԗ@8(@(88( p (8jj(88(@(88@7+"&5&5462#".#"#"&5476763232>32@@ @ @KjKך=}\I&:k~&26]S &H&  &H5KKut,4, & x:;*4*&K#+"&546;227654$ >3546;2+"&="&/&546$ <X@@Gv"DװD"vG@@X<4L41!Sk @ G< _bb_ 4.54632&4&&M4&UF &""""& F&M&&M&%.D.%G-Ik"'!"&5463!62#"&54>4.54632#"&54767>4&'&'&54632#"&547>7676'&'.'&54632&4&&M4&UF &""""& FU &'8JSSJ8'&  &'.${{$.'& &M&&M&%.D.%7;&'66'&;4[&$ [2[ $&[  #/37#5#5!#5!!!!!!!#5!#5!5##!35!!! #'+/37;?3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3???? ^>>~??????~??~??^??^^? ^??4&"2#"'.5463!2KjKKjv%'45%5&5L45&% jKKjK@5%%%%54L5&6'k54&"2#"'.5463!2#"&'654'.#32KjKKjv%'45%5&5L45&%%'4$.%%5&55&% jKKjK@5%%%%54L5&6'45%%%54'&55&6' yTdt#!"&'&74676&7>7>76&7>7>76&7>7>76&7>7>63!2#!"3!2676'3!26?6&#!"3!26?6&#!"g(sAeM ,*$/ !'& JP$G] x6,& `   h `   "9Hv@WkNC<.  &k& ( "$p" . #u&#  %!' pJvwEF#  @   @  2#"' #"'.546763!''!0#GG$/!''! 8""8  X! 8" "8  <)!!#"&=!4&"27+#!"&=#"&546;463!232(8&4&&4 8(@(8 qO@8((`(@Oq8(&4&&4&@` (88( Oq (8(`(q!)2"&42#!"&546;7>3!2  Ijjjj3e55e3gr`Ijjjj1GG1rP2327&7>7;"&#"4?2>54.'%3"&#"#ժ!9&WB03& K5!)V?@L' >R>e;&L::%P>vO 'h N_":- &+# : ' +a%3 4'.#"32>54.#"7>7><5'./6$3232#"&#"+JBx)EB_I:I*CRzb3:dtB2P$ $5.3b[F|\8!-T>5Fu\,,jn OrB,7676'5.'732>7"#"&#&#"$ zj=N!}:0e%  y + tD3~U'#B4 # g  '2 %/!: T bRU,7}%2"/&6;#"&?62+326323!2>?23&'.'.#"&"$#"#&=>764=464.'&#"&'!~:~!PP!~:~!P6 ,,$$% *'  c2N  ($"LA23Yl !x!*%%%% pP,T NE Q7^oH!+( 3  *Ueeu  wga32632$?23&'.5&'&#"&"5$#"#&=>7>4&54&54>.'&#"&'2#".465!#".'&47>32!4&4>Q6 ,,Faw!*' =~Pl*  ($"LA23Yl  )!* <7@@7<  <7@@7<  pP,T MF Q747ƢHoH!+( 3  tJHQ6  wh',686,'$##$',686,'$##$/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?O_o%+"&=46;2+"&=46;2+"&=46;2#!"&=463!2+"&=46;2#!"&=463!2#!"&=463!2#!"&=463!2        @     @   @   @   s  s    s    s  s  /?O#"'&47632#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2     @     @   @  @          s  s  s  /?O#"&54632 #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2`      @     @   @  @     @   s  s  s  #"'#!"&5463!2632' mw@www '*wwww."&462!5 !"3!2654&#!"&5463!2pppp@  @ ^BB^^B@B^ppp@@  @    @B^^BB^^k%!7'34#"3276' !7632k[[v  6`%`$65&%[[k `5%&&'4&"2"&'&54 Ԗ!?H?!,,ԖԖmF!&&!Fm,%" $$ ^aa`@^aa-4'.'&"26% 547>7>2"KjKXQqYn 243nYqQ$!+!77!+!$5KK,ԑ ]""]ً 9>H7'3&7#!"&5463!2'&#!"3!26=4?6 !762xtt`  ^Qwww@?6 1B^^B@B^ @(` `\\\P`tt8`  ^Ͼww@w 1^BB^^B~ @` \ \P+Z#!"&5463!12+"3!26=47676#"'&=# #"'.54>;547632www M8 pB^^B@B^ 'sw- 9*##;Noj' #ww@w "^BB^^B  *  "g`81T`PSA:'*4/D#!"&5463!2#"'&#!"3!26=4?632"'&4?62 62www@?6 1 B^^B@B^ @ BRnBBn^ww@w 1 ^BB^^B @ BnnBC"&=!32"'&46;!"'&4762!#"&4762+!54624&&4&&44&&4&&44&&44&&4&&44&&6'&'+"&546;267: &&&& s @  Z&&&&Z +6'&''&'+"&546;267667: : &&&&  s @  :  Z&&&&Z  : z6'&''&47667S::s @  : 4 : | &546h!!0a   $#!"&5463!2#!"&5463!2&&&&&&&&@&&&&&&&&#!"&5463!2&&&&@&&&&&54646&5-:s  :  :4:  +&5464646;2+"&5&5-&&&&:s  :  : &&&& :  &54646;2+"&5-&&&&s  : &&&&  62#!"&!"&5463!24 @ &&&&-:&&&& "'&476244444Zf "/&47 &4?62S44444#/54&#!4&+"!"3!;265!26 $$ &&&&&&&&@^aa@&&&&&&&&+^aa54&#!"3!26 $$ &&&&@^aa@&&&&+^aa+74/7654/&#"'&#"32?32?6 $$ }ZZZZ^aaZZZZ^aa#4/&"'&"327> $$ [4h4[j^aa"ZiZJ^aa:F%54&+";264.#"32767632;265467>$ $$ oW  5!"40K(0?i+! ":^aaXRd D4!&.uC$=1/J=^aa.:%54&+4&#!";#"3!2654&+";26 $$ ```^aa^aa/_#"&=46;.'+"&=32+546;2>++"&=.'#"&=46;>7546;232m&&m l&&l m&&m l&&ls&%&&%&&%&&%&&&l m&&m l&&l m&&m ,&%&&%&&%&&%&#/;"/"/&4?'&4?627626.  6 $$ I     ͒(r^aaɒ    (_^aa , "'&4?6262.  6 $$ Z4f44fz(r^aaZ&4ff4(_^aa "4'32>&#" $&6$  WoɒV󇥔 zzz8YW˼[?zz:zz@5K #!#"'&547632!2A4@%&&K%54'u%%&54&K&&4A5K$l$L%%%54'&&J&j&K5K #"/&47!"&=463!&4?632%u'43'K&&%@4AA4&&K&45&%@6%u%%K&j&%K55K&$l$K&&u#5K@!#"'+"&5"/&547632K%K&56$K55K$l$K&&#76%%53'K&&%@4AA4&&K&45&%%u'5K"#"'&54?63246;2632K%u'45%u&&J'45%&L44L&%54'K%5%t%%$65&K%%4LL4@&%%K',"&5#"#"'.'547!34624&bqb>#  5&44& 6Uue7D#  "dž&/#!"&546262"/"/&47'&463!2 &@&&4L  r&4  r L&& 4&&&L rI@& r  L4&& s/"/"/&47'&463!2#!"&546262&4  r L&& &@&&4L  r@@& r  L4&& 4&&&L r##!+"&5!"&=463!46;2!28(`8((8`(88(8((8(8 (8`(88(8((8(88(`8#!"&=463!28(@(88((8 (88((88z5'%+"&5&/&67-.?>46;2%6.@g.L44L.g@. .@g. L44L .g@.g.n.4LL43.n.gg.n.34LL4͙.n.g -  $54&+";264'&+";26/a^    ^aa fm  @ J%55!;263'&#"$4&#"32+#!"&5#"&5463!"&46327632#!2$$8~+(888(+}(`8((8`]]k==k]]8,8e8P88P8`(88(@MMO4&#"327>76$32#"'.#"#".'.54>54&'&54>7>7>32&z&^&./+>*>J> Wm7' '"''? &4&c&^|h_bml/J@L@ #M6:D 35sҟw$ '% ' \t3#!"&=463!2'.54>54''  @ 1O``O1CZZ71O``O1BZZ7@  @ N]SHH[3`)TtbN]SHH[3^)Tt!1&' 547 $4&#"2654632 '&476 ==嘅}(zVl''ٌ@uhyyhu9(}VzD##D# =CU%7.5474&#"2654632%#"'&547.'&476!27632#76$7&'7+NWb=嘧}(zVi\j1  z,X Y[6 $!%'FuJiys?_9ɍ?kyhun(}Vz YF  KA؉La  02-F"@Qsp@_!3%54&+";264'&+";26#!"&'&7>2    #%;"";%#`,@L 5 `   `  L`4LH` `   a 5 L@ #37;?Os!!!!%!!!!%!!!!!!!!%!!4&+";26!!%!!!!74&+";26%#!"&546;546;2!546;232 `@ `@ @@ @ @  @  @  @  @ L44LL4^B@B^^B@B^4L  @@@@    @@   @@    M4LL44L`B^^B``B^^B`L7q.+"&=46;2#"&=".'673!54632#"&=!"+"&=46;2>767>3!546327>7&54>$32dFK1A  0) L.٫C58.H(Ye#3C $=463!22>=463!2#!"&5463!2#!"&5463!2H&&/7#"&463!2!2LhLLhLhLLh! &&&&& &4hLLhLLhLLhL%z< 0&4&& )17&4& &&#!"&5463!2!2\@\\@\\@\\\\ W*#!"&547>3!2!"4&5463!2!2W+B"5P+B@"5^=\@\ \H#t3G#3G:_Ht\\ @+32"'&46;#"&4762&&4&&44&&44&&4@"&=!"'&4762!54624&&44&&44&&4&& !!!3!!0@67&#".'&'#"'#"'32>54'6#!"&5463!28ADAE=\W{O[/5dI kDtpČe1?*w@www (M& B{Wta28r=Ku?RZ^GwT -@www$2+37#546375&#"#3!"&5463ww/Dz?swww@wS88 ww#'.>4&#"26546326"&462!5!&  !5!!=!!%#!"&5463!2B^8(Ԗ>@|K55KK55K^B(8ԖԖ€>v5KK55KKHG4&"&#"2654'32#".'#"'#"&54$327.54632@pp)*Pppp)*Pb '"+`N*(a;2̓c`." b PTY9ppP*)pppP*)b ".`(*Nͣ2ͣ`+"' b MRZB4&"24&"264&"26#"/+"&/&'#"'&547>7&/.=46?67&'&547>3267676;27632#"&'"'#"'&547&'&=4767&547>32626?2#"&'"'#"'&547&'&=4767&547>32626?2ԖLhLKjKLhLKjK "8w s%(  ")v  >  "8x s"+  ")v  <  3zLLz3 3>8L3)x3 3zLLz3 3>8L3)x3 ԖԖ4LL45KK54LL45KK #)0C wZ l/ Y N,& #)0C vZl. Y L0"qG^^Gqq$ ]G)FqqG^^Gqq$ ]G)Fq%O#"'#"&'&4>7>7.546$ '&'&'# '32$7>54'VZ|$2 $ |E~E<| $ 2$|ZV:(t}X(  &%(Hw쉉xH(%& (XZT\MKG<m$4&"24&#!4654&#+32;254'>4'654&'>7+"&'&#!"&5463!6767>763232&4&&4N2`@`%)7&,$)' %/0Ӄy#5 +1 &<$]`{t5KK5$e:1&+'3TF0h4&&4&3M:;b^v+D2 5#$IIJ 2E=\$YJ!$MCeM-+(K55KK5y*%Au]c=p4&"24&'>54'64&'654&+"+322654&5!267+#"'.'&'&'!"&5463!27>;2&4&&4+ 5#bW0/% ')$,&7)%`@``2Nh0##T3'"( 0;e$5KK5 tip<& 1&4&&4&#\=E2 JIURI$#5 2D+v^b;:M2gc]vDEA%!bSV2MK55K(,,MeCM$!J@#"&547&547%6@?V8 b% I)94.""'." 67"'.54632>32+C`\hxeH>Hexh\`C+ED4 #LoP$$Po>Q|I.3MCCM3.I|Q/Z$_dC+I@$$@I+ (@%#!"&5463!2#!"3!:"&5!"&5463!462 ww@  B^^B  4&@&&&4 `  ww   ^B@B^ 24& && &%573#7.";2634&#"35#347>32#!"&5463!2FtIG9;HIxI<,tԩw@wwwz4DD43EEueB&#1s@www .4&"26#!+"'!"&5463"&463!2#2&S3 Ll&c4LL44LL4c@& &{LhLLhL'?#!"&5463!2#!"3!26546;2"/"/&47'&463!2www@B^^B@B^@&4t  r &&`ww@w@^BB^^B@R&t r  4&&@"&5!"&5463!462 #!"&54&>3!2654&#!*.54&>3!24&@&&&4 sw  @B^^B  @w4& && &3@w   ^BB^    I&5!%5!>732#!"&=4632654&'&'.=463!5463!2!2JJSq*5&=CKuuKC=&5*q͍S8( ^B@B^ (8`N`Ѣ΀GtO6)"M36J[E@@E[J63M")6OtG(8`B^^B`8%-3%'&76'&76''&76'&76'&6#5436&76+".=4'>54'6'&&"."&'./"?+"&5463!2  2  5    z<: Ʃw 49[aA)O%-j'&]]5r,%O)@a[9( 0BA; + >HCwww  5 /)  u    @wa-6OUyU[q ( - q[UyUP6$C +) (  8&/ &ww'?$4&"2$4&"2#!"&5463!3!267!2#!#!"&5!"'&762&4&&4&&4&&48(@(88(c==c(8*&&*6&4&&4&&4&&4& (88(@(88HH88`(@&&('@1d4&'.54654'&#"#"&#"32632327>7#"&#"#"&54654&54>76763232632   N<;+gC8A`1a99gw|98aIe$IVNz<:LQJ  ,-[% 061I()W,$-7,oIX()oζA;=N0 eTZ  (O#".'&'&'&'.54767>3232>32 e^\3@P bMO0# 382W# & 9C9 Lĉ" 82<*9FF(W283 #0OMb P@3\^e FF9*<28 "L 9C9 & #!"3!2654&#!"&5463!2`B^^B@B^^ީwww@w^BB^^B@B^ww@w#!72#"' #"'.546763YY !''!0#GG$/!''!&UUjZ 8""8  X! 8" "8 EU4'./.#"#".'.'.54>54.'.#"32676#!"&5463!2G55 :8 c7 )1)  05.D <90)$9w@wwwW + AB 7c  )$+ -.1 9$)0< D.59@www,T1# '327.'327.=.547&54632676TC_LҬ#+i!+*pDNBN,y[`m`%i]hbEm}a u&,SXK &$f9s? _#"!#!#!54632V<%'ЭHH (ںR&=4'>54'6'&&"."&'./"?'&54$ 49[aA)O%-j'&]]5r,%O)@a[9( 0BA; + >HCaaoMa-6OUyU[q ( - q[UyUP6$C +) (  8&/ &fMa%+"&54&"32#!"&5463!54 &@&Ԗ`(88(@(88(r&&jj8((88(@(8#'+2#!"&5463"!54&#265!375!35!B^^BB^^B   `^B@B^^BB^  ` !="&462+"&'&'.=476;+"&'&$'.=476; pppp$!$qr % }#ߺppp!E$ rqܢ# % ֻ!)?"&462"&4624&#!"3!26!.#!"#!"&547>3!2/B//B//B//B @   2^B@B^\77\aB//B//B//B/@    ~B^^B@2^5BB52.42##%&'.67#"&=463! 25KK5L4_u:B&1/&.- zB^^B4LvyKjK4L[!^k'!A3;):2*547&5462;U gIv0ZZ0L4@Ԗ@4L2RX='8P8'=XR U;Ig0,3lb??bl34LjjL4*\(88(\}I/#"/'&/'&?'&'&?'&76?'&7676767676` (5 )0 ) *) 0) 5(  (5 )0 )))) 0) 5( *) 0) 5(  )5 )0 )**) 0) 5)  )5 )0 )*5h$4&"24&#!4>54&#"+323254'>4'654&'!267+#"'&#!"&5463!2>767>32!2&4&&4N2$YGB (HGEG HQ#5K4Li!<;5KK5 A# ("/?&}vh4&&4&3M95S+C=,@QQ9@@IJ 2E=L5i>9eME;K55K J7R>@#zD<7?s%3#".'.'&'&'.#"!"3!32>$4&"2#!"#"&?&547&'#"&5463!&546323!2` #A<(H(GY$2NL4K5#aWTƾh&4&&4K5;=!ihv}&?/"( #A  5K2*!Q@.'!&=C+S59M34L=E2 JI UR@@&4&&4&5K;ELf9>igR7J K5h4&"24#"."&#"4&#"".#"!54>7#!"&54.'&'.5463246326326&4&&4IJ 2E=L43M95S+C=,@QQ9@@E;K55K J7R>@#zD9eMZ4&&4&<#5K4LN2$YGB (HGEG HV;5KK5 A# ("/?&}vhi!<4<p4.=!32>332653272673264&"2/#"'#"&5#"&54>767>5463!2@@2*! Q@.'!&=C+S59M34L.9E2 JI UR&4&&4&Lf6Aig6Jy#@>R7J K55K;E@TƾH #A<(H(GY$2NL4K#5#a=4&&4&D=ihv}&?/"( #A  5KK5;+54&#!764/&"2?64/!26 $$ & [6[[j6[&^aa@&4[[6[[6&+^aa+4/&"!"3!277$ $$ [6[ &&[6j[ ^aae6[j[6&&4[j[^aa+4''&"2?;2652?$ $$ [6[[6&&4[^aaf6j[[6[ &&[^aa+4/&"4&+"'&"2? $$ [6&&4[j[6[j^aad6[&& [6[[j^aa   $2>767676&67>?&'4&'.'.'."#&6'&6&'3.'.&'&'&&'&6'&>567>#7>7636''&'&&'.'"6&'6'..'/"&'&76.'7>767&.'"76.7"7"#76'&'.'2#22676767765'4.6326&'.'&'"'>7>&&'.54>'>7>67&'&#674&7767>&/45'.67>76'27".#6'>776'>7647>?6#76'6&'676'&67.'&'6.'.#&'.&6'&.5/a^D&"      4   $!   #          .0"Y +  !       $     "  +       Α      ^aa                        P   ' -( # * $  "  !     * !   (         $      2 ~/$4&"2 #"/&547#"32>32&4&&4V%54'j&&'/덹:,{ &4&&4&V%%l$65&b'Cr! " k[G +;%!5!!5!!5!#!"&5463!2#!"&5463!2#!"&5463!2&&&&&&&&&&&&@&&&&&&&&&&&&{#"'&5&763!2{' **)*)'/!5!#!"&5!3!26=#!5!463!5463!2!2^B@B^&@&`^B`8(@(8`B^ B^^B&&B^(88(^G 76#!"'&? #!"&5476 #"'&5463!2 '&763!2#"'c)'&@**@&('c (&*cc*&' *@&('c'(&*cc*&('c'(&@*19AS[#"&532327#!"&54>322>32"&462 &6 +&'654'32>32"&462QgRp|Kx;CByy 6Fe= BPPB =eF6 ԖV>!pRgQBC;xK|Ԗ{QNa*+%xx5eud_C(+5++5+(C_due2ԖԖ>NQ{u%+*jԖԖp!Ci4/&#"#".'32?64/&#"327.546326#"/&547'#"/&4?632632(* 8( !)(A(')* 8( !USxySSXXVzxTTUSxySSXXVzxT@(  (8 *(('( (8 SSUSx{VXXTTSSUSx{VXXT#!"5467&5432632t,Ԟ;F`j)6,>jK?s !%#!"&7#"&463!2+!'5#8EjjE8@&&&&@XYY&4&&4&qDS%q%N\jx2"&4#"'#"'&7>76326?'&'#"'.'&676326326&'&#"32>'&#"3254?''74&&4&l NnbSVZ bRSD zz DSRb)+USbn \.2Q\dJ'.2Q\dJ.Q2.'Jd\Q2.'Jd`!O` ` &4&&4r$#@B10M5TNT{L5T II T5L;l'OT4M01B@#$*3;$*3;;3*$;3*$: $/ @@Qq`@"%3<2#!"&5!"&5467>3!263! !!#!!46!#!(88(@(8(8(`((8D<++<8(`(8(`8(@(88( 8((`(8((<`(8(``(8||?%#"'&54632#"'&#"32654'&#"#"'&54632|udqܟs] = OfjL?R@T?"& > f?rRX=Edudsq = _MjiL?T@R?E& f > =XRr?b!1E)!34&'.##!"&5#3463!24&+";26#!"&5463!2 08((88(@(8  8((88((`(1  `(88((88(@  `(88(@(8(`#!"&5463!2w@www`@www/%#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&&&&&@'7G$"&462"&462#!"&=463!2"&462#!"&=463!2#!"&=463!2ppppppp @   ppp @    @   Рpppppp  ppp    <L\l|#"'732654'>75"##5!!&54>54&#"'>3235#!"&=463!2!5346=#'73#!"&=463!2#!"&=463!2}mQjB919+i1$AjM_3</BB/.#U_:IdDRE @  k*Gj @   @   TP\BX-@8 C)5Xs J@$3T4+,:;39SG2S.7<  vcc)( %Ll}    5e2#!"&=463%&'&5476!2/&'&#"!#"/&'&=4'&?5732767654'&@02uBo  T25XzrDCBBEh:%)0%HPIP{rQ9f#-+>;I@KM-/Q"@@@#-a[ $&P{<8[;:XICC>.'5oe71#.0(  l0&%,"J&9%$<=DTIcs&/6323276727#"327676767654./&'&'737#"'&'&'&54'&54&#!"3!260% <4"VRt8<@< -#=XYhW8+0$"+dTLx-'I&JKkmuw<=V@!X@ v '|N;!/!$8:IObV;C#V  &   ( mL.A:9 !./KLwPM$@@ /?O_o%54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26#!"&5463!2@@@@@@@@@^BB^^B@B^NB^^B@B^^#+3 '$"/&4762%/?/?/?/?%k*66bbbb|<<<bbbbbbbb%k66Ƒbbb<<<<^bbbbbb@M$4&"2!#"4&"2&#"&5!"&5#".54634&>?>;5463!2LhLLh LhLLhL! 'ԖԖ@' !&  ?&&LhLLhL hLLhL jjjj &@6/" &&J#"'676732>54.#"7>76'&54632#"&7>54&#"&54$ ok; -j=yhwi[+PM 3ѩk=J%62>VcaaQ^ ]G"'9r~:`}Ch 0=Z٤W=#uY2BrUI1^Fk[|aL2#!67673254.#"67676'&54632#"&7>54&#"#"&5463ww+U ,iXբW<"uW1AqSH1bdww'74'!3#"&46327&#"326%35#5##33#!"&5463!20U6cc\=hlࠥYmmnnnnw@wwww&46#Ȏ;edwnnnnn@www ]#/#"$&6$3 &#"32>7!5!%##5#5353Еttu{zz{SZC` cot*tq||.EXN#?? ,<!5##673#$".4>2"&5!#2!46#!"&5463!2rM* *M~~M**M~~M*jjj&&&&`P%挐|NN||NN|*jjjj@&&&&@ "'&463!2@4@&Z4@4&@ #!"&4762&&4Z4&&4@@ "'&4762&4@4&@&4&@ "&5462@@4&&44@&&@ 3!!%!!26#!"&5463!2`m` ^BB^^B@B^  `@B^^BB^^@ "'&463!2#!"&4762@4@&&&&44@4&Z4&&4@ "'&463!2@4@&4@4&@ #!"&4762&&4Z4&&4@:#!"&5;2>76%6+".'&$'.5463!2^B@B^,9j9Gv33vG9H9+bI\ A+=66=+A [">nSMA_:B^^B1&c*/11/*{'VO3@/$$/@*?Nh^l+!+"&5462!4&#"!/!#>32]_gTRdgdQV?U I*Gg?!2IbbIJaaiwE3300 084#"$'&6?6332>4.#"#!"&54766$32z䜬m IwhQQhbF*@&('kz   _hQнQGB'(&*eoz(q!#"'&547"'#"'&54>7632&4762.547>32#".'632%k'45%&+~(  (h  &  \(  (  &  ~+54'k%5%l%%l$65+~  &  (  (\  &  h(  (~+%'!)19K4&"24&"26.676&$4&"24&"24&"2#!"'&46$ KjKKj KjKKje2.e<^P,bKjKKjKjKKj KjKKj##LlLKjKKjK jKKjK~-M7>7&54$ LhяW.{+9E=cQdFK1A  0) pJ2`[Q?l&٫C58.H(Y':d 6?32$64&$ #"'#"&'&4>7>7.546'&'&'# '32$7>54'Yj`a#",5NK ~EVZ|$2 $ |: $ 2$|ZV:(t}hfR88T h̲X(  &%(Hw(%& (XZT\MKG{x|!#"'.7#"'&7>3!2%632u  j H{(e 9 1bU#!"&546;5!32#!"&546;5!32#!"&546;5463!5#"&5463!2+!2328((88(``(88((88(``(88((88(`L4`(88(@(88(`4L`(8 (88(@(88((88(@(88((88(@(84L8(@(88((8L48OY"&546226562#"'.#"#"'.'."#"'.'.#"#"&5476$32&"5462И&4&NdN!>! 1X:Dx+  +ww+  +xD:X1 -U !*,*&4&hh&&2NN2D &  ..J< $$ 767#"&'"&547&547&547.'&54>2l4  2cKEooED ) ) Dg-;</- ?.P^P.? -/<;-gYY  .2 L4H|O--O|HeO , , Oeq1Ls26%%4.2,44,2.4%%62sL1qcqAAq4#!#"'&547632!2#"&=!"&=463!54632  @  `     ` ?`   @  @  !    54&+4&+"#"276#!"5467&5432632   `  _ v,Ԝ;G_j)``    _ ԟ7 ,>jL>54'&";;265326#!"5467&5432632    v,Ԝ;G_j) `   `7 ,>jL>X`$"&462#!"&54>72654&'547 7"2654'54622654'54&'46.' &6 &4&&4&yy %:hD:FppG9Fj 8P8 LhL 8P8 E; Dh:% >4&&4&}yyD~s[4Dd=PppP=d>hh>@jY*(88(*Y4LL4Y*(88(*YDw" A4*[s~>M4&"27 $=.54632>32#"' 65#"&4632632 65.5462&4&&4G9& <#5KK5!!5KK5#< &ܤ9Gpp&4&&4&@>buោؐ&$KjKnjjKjK$&jjb>Ppp %!5!#"&5463!!35463!2+32@\\8(@(8\@@\\@\(88(\@ 34#"&54"3#!"&5!"&5>547&5462;U gI@L4@Ԗ@4L2RX='8P8'=XR U;Ig04LjjL4*\(88(\@"4&+32!#!"&+#!"&5463!2pP@@Pjj@@\@\&0pj \\&-B+"&5.5462265462265462+"&5#"&5463!2G9L44L9G&4&&4&&4&&4&&4&L44L &=d4LL4 d=&&`&&&&`&&&&4LL4  &#3CS#!"&5463!2!&'&!"&5!463!2#!"&52#!"&=4632#!"&=463(8((88((`x c`(8@@@`((88(@(8(D 9 8(`@@@@@/?O_o-=%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!!5463!2#!"&5463!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ &&&&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @   `&&&& /?O_o%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!#!"&=!!5463!24&+"#54&+";26=3;26%#!"&5463!463!2!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 8(@(8 @  @  @  @  @ &&&@8((8@&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @  (88(  @  ``   `` -&&& (88(&@<c$4&"2!#4&"254&+54&+"#";;26=326+"&5!"&5#"&46346?>;463!2KjKKjKjKKj&ԖԖ&&@&&KjKKjK jKKjK .&jjjj&4&@@&&#'1?I54&+54&+"#";;26=326!5!#"&5463!!35463!2+32 \\8(@(8\ \\@\(88(\: #32+53##'53535'575#5#5733#5;2+3@E&&`@@` `@@`&&E%@`@ @ @      @ :#@!3!57#"&5'7!7!K5@   @5K@@@ #3%4&+"!4&+";265!;26#!"&5463!2&&&&&&&&w@www&&@&&&&@&&@www#354&#!4&+"!"3!;265!26#!"&5463!2&&&&&@&&@&w@www@&@&&&&&&@&:@www-M3)$"'&4762 "'&4762 s 2  .   2 w 2  .   2 w 2    2  ww  2    2  ww M3)"/&47 &4?62"/&47 &4?62S .  2 w 2   .  2 w 2  M . 2    2 .  . 2    2 .M3S)$"' "/&4762"' "/&47623 2  ww  2    2  ww  2    2 w 2   .v 2 w 2   .M3s)"'&4?62 62"'&4?62 623 .  . 2    2 .  . 2    2 .   2 w 2v .   2 w 2-Ms3 "'&4762s w 2  .   2 ww  2    2 MS3"/&47 &4?62S .  2 w 2  M . 2    2 .M 3S"' "/&47623 2  ww  2   m 2 w 2   .M-3s"'&4?62 623 .  . 2    2- .   2 w 2/4&#!"3!26#!#!"&54>5!"&5463!2  @ ^B && B^^B@B^ @  MB^%Q= &&& $$ (r^aa(^aa!C#!"&54>;2+";2#!"&54>;2+";2pPPpQh@&&@j8(PppPPpQh@&&@j8(Pp@PppPhQ&&j (8pPPppPhQ&&j (8p!C+"&=46;26=4&+"&5463!2+"&=46;26=4&+"&5463!2Qh@&&@j8(PppPPpQh@&&@j8(PppPPp@hQ&&j (8pPPppP@hQ&&j (8pPPpp@@ #+3;G$#"&5462"&462"&462#"&462"&462"&462"&462#"&54632K54LKj=KjKKjKjKKjL45KKjK<^^^KjKKjppp\]]\jKL45KjKKjKujKKjK4LKjKK^^^jKKjKpppr]]\  $$ ^aaQ^aa,#"&5465654.+"'&47623   #>bqb&44&ɢ5"  #D7euU6 &4&m 1X".4>2".4>24&#""'&#";2>#".'&547&5472632>3=T==T==T==T=v)GG+v@bRRb@=&\Nj!>3lkik3hPTDDTPTDDTPTDDTPTDD|x xXK--K|Mp<# )>dA{RXtfOT# RNftWQ,%4&#!"&=4&#!"3!26#!"&5463!2!28(@(88((88((8\@\\@\\(88(@(88(@(88@\\\\ u'E4#!"3!2676%!54&#!"&=4&#!">#!"&5463!2!2325([5@(\&8((88((8,9.+C\\@\ \6Z]#+#,k(88(@(88(;5E>:5E\\\ \1. $4@"&'&676267>"&462"&462.  > $$ n%%/02 KjKKjKKjKKjKfff^aayy/PccP/jKKjKKjKKjKffff@^aa$4@&'."'.7>2"&462"&462.  > $$ n20/%7KjKKjKKjKKjKfff^aa3/PccP/y jKKjKKjKKjKffff@^aa +7#!"&463!2"&462"&462.  > $$ &&&&KjKKjKKjKKjKfff^aa4&&4&jKKjKKjKKjKffff@^aa#+3C54&+54&+"#";;26=3264&"24&"2$#"'##"3!2@@KjKKjKKjKKjKܒ,gjKKjKKjKKjKXԀ,, #/;GS_kw+"=4;27+"=4;2'+"=4;2#!"=43!2%+"=4;2'+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;54;2!#!"&5463!2`````````````````````p`K55KK55Kp`````````````````````````5KK55KK@*V#"'.#"63232+"&5.5462#"/.#"#"'&547>32327676R?d^7ac77,9xm#@#KjK# ڗXF@Fp:f_ #WIpp&3z h[ 17q%q#::#5KKu't#!X: %#+=&>7p @ *2Fr56565'5&'. #"32325#"'+"&5.5462#"/.#"#"'&547>32327676@ͳ8 2.,#,fk*1x-!#@#KjK# ڗXF@Fp:f_ #WIpp&3z e`vo8t-  :5 [*#::#5KKu't#!X: %#+=&>7p  3$ "/&47 &4?62#!"&=463!2I.  2 w 2   -@). 2    2 . -@@-S$9%"'&4762  /.7> "/&47 &4?62i2  .   2 w E > u > .  2 w 2   2    2  ww !   h. 2    2 . ;#"'&476#"'&7'.'#"'&476' )'s "+5+@ա' )'F*4*Er4M:}}8 GO *4*~ (-/' #"'%#"&7&67%632B;>< V??V --C4 <B=cB5 !% %!b 7I))9I7 #"'.5!".67632y( #  ##@,( )8! !++"&=!"&5#"&=46;546;2!76232-SSS  SS``  K$4&"24&"24&"27"&5467.546267>5.5462 8P88P88P88P8P88P4,DS,4pp4,,4pp4,6d7AL*',4ppP88P8P88P8HP88P8`4Y&+(>EY4PppP4Y4Y4PppP4Y%*54&#"#"/.7!2<'G,')7N;2]=A+#H  0PRH6^;<T%-S#:/*@Z}   >h.%#!"&=46;#"&=463!232#!"&=463!2&&&@@&&&@&&&&&&&&&&&&f&&&&b#!"&=463!2#!"&'&63!2&&&&''%@% &&&&&&&&k"G%#/&'#!53#5!36?!#!'&54>54&#"'6763235 Ź}4NZN4;)3.i%Sin1KXL7觧* #& *@jC?.>!&1' \%Awc8^;:+54&#"'6763235 Ź}4NZN4;)3.i%PlnEcdJ觧* #& *-@jC?.>!&1' \%AwcBiC:D'P%! #!"&'&6763!2P &:&? &:&?5"K,)""K,)h#".#""#"&54>54&#"#"'./"'"5327654.54632326732>32YO)I-D%n  "h.=T#)#lQTv%.%P_ % %_P%.%vUPl#)#T=@/#,-91P+R[Ql#)#|'' 59%D-I)OY[R+P19-,##,-91P+R[YO)I-D%95%_P%.%v'3!2#!"&463!5&=462 =462 &546 &&&&&4&r&4&@&4&&4&G݀&&&&f s CK&=462 #"'32=462!2#!"&463!5&'"/&4762%4632e*&4&i76`al&4&&&&&}n  R   R zfOego&&5`3&&&4&&4& D R   R zv"!676"'.5463!2@@w^Cct~5  5~tcC&&@?JV|RIIR|V&&#G!!%4&+";26%4&+";26%#!"&546;546;2!546;232@@@@L44LL4^B@B^^B@B^4L  N4LL44L`B^^B``B^^B`LL4&"2%#"'%.5!#!"&54675#"#"'.7>7&5462!467%632&4&&4  @ o&&}c ;pG=(  8Ai8^^.   &4&&4&` ` fs&& jo/;J!# 2 KAE*,B^^B! ` $ -4&"2#"/&7#"/&767%676$!28P88PQr @ U @ {`PTP88P8P`  @U @rQ!6'&+!!!!2Ѥ 8̙e;<*@8 !GGGQII %764' 64/&"2 $$ f3f4:4^aaf4334f:4:^aa %64'&" 2 $$ :4f3f4F^aa4f44f^aa 764'&"27 2 $$ f:4:f4334^aaf4:4f3^aa %64/&" &"2 $$ -f44f4^aa4f3f4:w^aa@7!!/#35%!'!%j/d jg2|855dc b @! !%!!7!FG)DH:&H dS)U4&"2#"/ $'#"'&5463!2#"&=46;5.546232+>7'&763!2&4&&4f ]wq4qw] `dC&&:FԖF:&&Cd`4&&4& ]] `d[}&&"uFjjFu"&&y}[d#2#!"&546;4 +"&54&" (88(@(88( r&@&Ԗ8((88(@(8@&&jj'3"&462&    .  > $$ Ԗ>aX,fff^aaԖԖa>TX,,~ffff@^aa/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88((88((88((88((88/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88(88((88(88((885E$4&"2%&'&;26%&.$'&;276#!"&5463!2KjKKj   f  \ w@wwwjKKjK"H   ܚ  f   @www   $64'&327/a^ ! ^aaJ@%% 65/ 64'&"2 "/64&"'&476227<ij6j6u%k%~8p8}%%%k%}8p8~%<@% %% !232"'&76;!"/&76  ($>( J &% $%64/&"'&"2#!"&5463!2ff4-4ff4fw@wwwf4f-f4@www/#5#5'&76 764/&"%#!"&5463!248` # \P\w@www4`8  #@  `\P\`@www)4&#!"273276#!"&5463!2& *f4 'w@www`&')4f*@www%5 64'&"3276'7>332#!"&5463!2`'(wƒa8! ,j.( &w@www`4`*'?_`ze<  bw4/*@www-.  6 $$  (r^aaO(_^aa -"'&763!24&#!"3!26#!"&5463!2yB(( @   w@www]#@##   @ @www -#!"'&7624&#!"3!26#!"&5463!2y((@B@u @   w@www###@  @ @www -'&54764&#!"3!26#!"&5463!2@@####@w@wwwB((@@www`%#"'#"&=46;&7#"&=46;632/.#"!2#!!2#!32>?6#  !"'?_  BCbCaf\ + ~2   }0$  q 90r p r%D p u?#!"&=46;#"&=46;54632'.#"!2#!!546;2D a__ g *`-Uh1    ߫}   $^L  4b+"&=.'&?676032654.'.5467546;2'.#"ǟ B{PDg q%%Q{%P46'-N/B).ĝ 9kC< Q 7>W*_x*%K./58`7E%_ ,-3  cVO2")#,)9;J) "!* #VD,'#/&>AX>++"''&=46;267!"&=463!&+"&=463!2+32Ԫ$   pU9ӑ @/*f o  VRfq f=SE!#"&5!"&=463!5!"&=46;&76;2>76;232#!!2#![       % )   "  Jg Uh BW&WX hU g 84&#!!2#!!2#!+"&=#"&=46;5#"&=46;463!2j@jo g|@~vv u n#467!!3'##467!++"'#+"&'#"&=46;'#"&=46;&76;2!6;2!6;232+32QKt# #FNQo!"դѧ !mY Zga~bm] [o"U+, @h h@@X hh @83H\#5"'#"&+73273&#&+5275363534."#22>4.#2>ut 3NtRP*Ho2 Lo@!R(Ozh=,GID2F 8PuE>.'%&TeQ,jm{+>R{?jJrL6V @`7>wmR1q uWei/rr :Vr" $7V4&#"326#"'&76;46;232!5346=#'73#"'&'73267##"&54632BX;4>ID2F +>R{8PuE>.'%&TeQ,jm{?jJrL6 @`rr :Vr3>wmR1q uWei@ \%4&#"326#!"&5463!2+".'&'.5467>767>7>7632!2&%%&&&& &7.' :@$LBWM{#&$h1D!  .I/! Nr&&%%&&&&V?, L=8=9%pEL+%%r@W!<%*',<2(<&L,"r@ \#"&546324&#!"3!26%#!#"'.'.'&'.'.546767>;&%%&&&& &i7qN !/I.  !D1h$&#{MWBL$@: '.&&%%&&&&=XNr%(M&<(2<,'*%<!W@r%%+LEp%9=8=L  +=\d%54#"327354"%###5#5#"'&53327#"'#3632#"'&=4762#3274645"=424'.'&!  7>76#'#3%54'&#"32763##"'&5#327#!"&5463!2BBPJNC'%! B? )#!CC $)  54f"@@ B+,A  A+&+A  ZK35N # J!1331CCC $)w@www2"33FYF~(-&"o4*)$(* (&;;&&:LA3  8334S,;;,WT+<<+T;(\g7x:&&::&&<r%-@www  +=[c}#"'632#542%35!33!3##"'&5#327%54'&#"5#353276%5##"=354'&#"32767654"2 '.'&547>76 3#&'&'3#"'&=47632%#5#"'&53327''RZZ:kid YYY .06 62+YY-06 R[!.'CD''EH$VVX::Y X;:Y fyd/%jG%EC&&CE%O[52. [$C-D..D^^* ly1%=^I86i077S 3 $EWgO%33%OO%35 EEFWt;PP;pt;PP;pqJgTFQ%33&PP%33%R 7>%3!+}{'+"&72'&76;2+"'66;2U &  ( P *'eJ."-dZ-n -'74'&+";27&+";276'56#!"&5463!2~} 7e  ۩w@www"  $Q #'!# @www/4'&327$ '.'.4>7>76 "!!jG~GkjGGk[J@&& @lAIddIAllAIddIA@ '5557 ,VWQV.RW=?l%l`~0  !#!#%777 5! R!!XCCfff݀# `,{{{`/?%##"547#3!264&#"3254&+";267#!"&5463!2R܂#-$䵀((((tQQttQvQtn?D~|D?x##))((QttQvQtt2#!"&54634&"2$4&"2ww@ww||||||w@www||||||| !3 37! $$ n6^55^h ^aaM1^aaP *Cg'.676.7>.'$7>&'.'&'? 7%&'.'.'>767$/u5'&$I7ob?K\[zH,1+.@\7':Yi4&67&'&676'.'>7646&' '7>6'&'&7>7#!"&5463!2PR$++'TJXj7-FC',,&C ."!$28 h /" +p^&+3$ i0(w@www+.i6=Bn \C1XR:#"'jj 8Q.cAj57!? "0D$4" P[ & 2@wwwD"%.5#5>7>;!!76PYhpN!HrD0M C0N#>8\xx: W]oW-X45/%'#.5!5!#"37>#!"&5463!2p>,;$4 5eD+WcEw@wwwK()F ,VhV^9tjA0/@www@#"'&76;46;23   &  ++"&5#"&7632  ^  c  & @#!'&5476!2 &  ^  b '&=!"&=463!546  &    q&8#"'&#"#"5476323276326767q'T1[VA=QQ3qpHih"-bfGw^44O#A?66%CKJA}} !"䒐""A$@C3^q|z=KK?6 lk)  %!%!VVuuu^-m5w}n~7M[264&"264&"2"&546+"&=##"&5'#"&5!467'&766276#"&54632    *<;V<<O@-K<&4'>&4.'.'.'.'.'&6&'.'.6767645.'#.'6&'&7676"&'&627>76'&7>'&'&'&'&766'.7>7676>76&6763>6&'&232.'.6'4.?4.'&#>7626'.'&#"'.'.'&676.67>7>5'&7>.'&'&'&7>7>767&'&67636'.'&67>7>.'.67 \ U7  J#!W! '  " ';%  k )"    '   /7*   I ,6 *&"!   O6* O $.( *.'  .x,  $CN      * 8   7%&&_f& ",VL,G$3@@$+ "  V5 3"  ""#dA++ y0D- %&n 4P'A5j$9E#"c7Y 6" & 8Z(;=I50 ' !!e  R   "+0n?t(-z.'< >R$A"24B@( ~ 9B9, *$        < > ?0D9f?Ae  .(;1.D 4H&.Ct iY% *  7      J  <    W 0%$  ""I! *  D  ,4A'4J" .0f6D4pZ{+*D_wqi;W1G("% %T7F}AG!1#%  JG 3  '.2>Vb%&#'32&'!>?>'&' &>"6&#">&'>26 $$ *b6~#= XP2{&%gx| .W)oOLOsEzG< CK}E $MFD<5+ z^aa$MWM 1>]|YY^D եA<KmE6<" @9I5*^aa>^4./.543232654.#"#".#"32>#"'#"$&547&54632632':XM1h*+D($,/9p`DoC&JV;267676&#!"&=463!267 #!"'&5463!26%8#! &&Z"M>2! ^I 7LRx_@>MN""`=&&*%I},  L7_jj9/%4&#!"3!264&#!"3!26#!"&5463!2  &&&&&&&&19#"'#++"&5#"&5475##"&54763!2"&4628(3- &B..B& -3(8IggI`(8+Ue&.BB.&+8(kk`%-"&5#"&5#"&5#"&5463!2"&4628P8@B\B@B\B@8P8pPPp@`(88(`p.BB.0.BB.(88(Pppͺ!%>&'&#"'.$ $$ ^/(V=$<;$=V).X^aaJ`"(("`J^aa,I4."2>%'%"/'&5%&'&?'&767%476762%6[՛[[՛o ܴ   $ $ " $ $  ՛[[՛[[5` ^ ^ 2` `2 ^ ^ ` 1%#"$54732$%#"$&546$76327668ʴhf킐&^zs,!V[vn) 6<ׂf{z}))Ns3(@ +4&#!"3!2#!"&5463!2#!"&5463!2@&&&f&&&&@&&&&4&&4&@&&&&&&&& `BH+"/##"./#"'.?&5#"&46;'&462!76232!46 `&C6@Bb03eI;:&&&4L4&F Z4&w4) '' 5r&4&&4&&4}G3#&/.#./.'&4?63%27>'./&'&7676>767>?>%6})N @2*&@P9A #sGq] #lh<* 46+(  < 5R5"*>%"/ +[>hy  K !/Ui%6&'&676&'&6'.7>%.$76$% $.5476$6?62'.76&&'&676%.76&'..676#"NDQt -okQ//jo_  %&JՂYJA-.-- 9\DtT+X?*<UW3' 26$>>W0 {"F!"E    ^f`$"_]\<`F`FDh>CwlsJ@ ;=?s  :i_^{8+?` ) O`s2RDE58/Kr #"'>7&4$&5mī"#̵$5$"^^W=acE*czk./"&4636$7.'>67.'>65.67>&/>z X^hc^O<q+f$H^XbVS!rȇr?5GD_RV@-FbV=3! G84&3Im<$/6X_D'=NUTL;2KPwtPt=  &ռ ,J~S/#NL,8JsF);??1zIEJpqDIPZXSF6[?5:NR=;.&1 +!"&=!!%!5463!2sQ9Qs***sQNQsBUw wUBFHCCTww%1#"&=!"&=463!54632.  6 $$     ` ?(r^aa    (_^aa%1#!#"'&47632!2.  6 $$   @  ` (r^aa  ?  @  (_^aa/#"'&476324&#!"3!26#!"&5463!2&@& @   w@www& @B@ &  @ @www"&462  >& $$ Ԗ*(r^aaԖԖ (^aa]6#"$54732>%#"'!"&'&7>32'!!!2f:лѪz~u: ((%`V6B^hD%i(]̳ޛ *>6߅r#! 3?^BEa߀#9#36'&632#"'&'&63232#!"&5463!2 Q,&U #+' ;il4L 92<D`w@www`9ܩ6ɽ ]`C477&@wwwD+"&5#"'&=4?5#"'&=4?546;2%6%66546;2  wwwwcB G]B Gty]ty #3C#!+"&5!"&=463!46;2!24&#!"3!26#!"&5463!2@`@`^BB^^B@B^www@w@`@`2@B^^BB^^ww@w'/?P+5#"&547.467&546;532!764'!"+32#323!&ln@ :MM: @nY*Yz--zY*55QDDU9pY-`]]`.X /2I$ t@@/!!/@@3,$,3$p$00&*0&& !P@RV2#"&/#"&/#"&546?#"&546?'&54632%'&54632763276%>S]8T;/M77T7%>ww@ww!"5bBBb./ * 8(@(87)(8=%/' #?w@www#~$EE y &L(88e):8(%O r    O?GQaq47&67>&&'&67>&"$32#"#"'654  $&6 $6&$ CoL.*K  Px.* iSƓ i 7J ?~pi{_Я;lLUZ=刈刈_t'<Z :!   @! j`Q7  $ky, Rfk*4LlL=Z=刈&$&546$7%7&'5>]5%w&P?zrSF!| &0 ##!"&5#5!3!3!3!32!546;2!5463) );));;))&&&@@&&&  6 $&727"'%+"'&7&54767%&4762֬>4P t+8?::  ::A W` `EvEEvE<."e$IE&O &EI&{h.`m"&#"&'327>73271[ >+)@ (]:2+D?*%Zx/658:@#N C= E(oE=W'c:#!#"$&6$3 &#"32>7! ڝyy,{ۀہW^F!LC=y:yw߂0H\R%"N^ '&76232762$"&5462"&46274&"&'264&#"'&&#"32$54'>$ $&6$ G>>0yx14J55J5J44J5Fd$?4J55%6E#42F%$fLlLq>>11J44%&4Z%44J54R1F$Z-%45J521Z%F1#:ʎ 9LlL#Qa"'&7622762%"&5462"&546274&#"&'73264&#"'&&#"32654'>#!"&5463!2 55 **.>.-@-R.>.-@-<+*q6- -- 0OpoOxzRrqP6z~{{Prr^aa]054&"#"&5!2654632!#"&57265&'&#".'&'#"&5467%&4>7>3263232654.547'654'63277.'.*#">7?67>?>32#"'7'>3'>3235?KcgA+![,7*  2(-#=  /~[(D?G  |,)"# +)O8,+'6 y{=@0mI#938OAE` -  )y_/FwaH8j7=7?%a % %!?)L J 9=5]~pj  %(1$",I  $@((  +!.S -L__$'-9L 5V+ 6 T+6.8- $ 0 + t |S 16]&#"'&#"67>76'&'&#"67>32764.#"#.32>67>7 $&54>7>7>7rJ@ "kb2)W+ ,5/1   #   Z -!$IOXp7sLCF9vz NAG#/ 5|Հ';RKR/J#=$,9,+$UCS7'2"1  ! / ,   /--ST(::(ep4AM@=I>".)xΤlsY|qK@ %(YQ&N EHv~<Zx'#"&5467&6?2?'&"/.7.546326#"&'&/7264/7'764&"'?>>32.AUpIUxYE.A %%%h% %hJ%D,FZxULs TgxUJrVD %hJ%@/LefL.C %Jh%CV sNUxϠ@.FZyUHpVA %h&%% %Ji%CWpIUybJ/Uy^G,D %Jh%@U sMt UC %hJ%C-KfyEX[_gj&/&'.''67>7>7&'&'&'>76763>7>#&'&'767672'%'7'+"&'&546323267>7%#"'4'6767672,32,+DCCQLDf' % :/d B 4@ }  &!0$?Jfdf-.=6(:!TO? !IG_U% . j+.=; 5gN_X "  ##  292Q41   *6nA;| BS N.  %1$ 6 #nk^ '7GWgw2+"&5463#!"&5463!254&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26#"&=! B^^BB^^B:FjB^8((`( `(8^BB^^B@B^"vEj^B(8(`(8(/?O_o/?2#!"&5463;26=4&+";26=4&+";26=4&+";26=4&+"54&+";2654&+";2654&+";2654&+";2654&+";2654&#!"3!2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`% "&5#"&5&462!762$"&462B\B@B\B8PpP8.BB..BB.8$P88P広3CQ#".54>32#".546322#"&#"#"54>%".54>32%2#"&54> &X=L|<&X=M{2r_-$$-_rUU%&&5%ő'- "'.546762@FF$@B@$.&,&.]]|q#<<#(BB B%'-%'-'%'-"'%&'"'%.5467%467%62@ll@ll,@GG&!@@@@@@!&+#+#6#+$*`:p:px p=`$>>$&@&@ @&p@ &.A!!"!&2673!"5432!%!254#!5!2654#!%!2#!8Zp?vdΊens6(N[RWu?rt1SrF|iZ@7މoy2IMC~[R yK{T:%,AGK2#!"&5463!!2654'654.#532#532"&5!654&#"327#2#>!!ww@ww~uk'JTMwa| DH> I1q Fj?w@wwwsq*4p9O*¸Z^qh LE "(nz8B M'?"&4624&#"'.'324&#"3267##"&/632632.ʏhhMALR vGhг~~K „yO^   ʏʏВ*LM@!שwwȍde)qrOPqȦs:03=7'.?67'67%'>&%'7%7./6D\$>  "N,?a0#O 1G9'/P(1#00  ($=!F "9|]"RE<6 'o9%8J$\ :\HiTe<?}V#oj? d,6%N#" HlSVY]C =@C4&"2!.#!"4&"2+"&=!"&=#"&546;>3!232^^^Y ^^^`pppp`]ibbi]~^^^e^^^PppPPppP]^^]3;EM2+"&=!"&=#"&546;>;5463!232264&"!.#!"264&" ]`pppp`]ibbi^^^dY !^^^]@PppP@@PppP@]^^] ^^^e^^^ 3$#!#!"&5467!"&47#"&47#"&4762++&2 $$ 2&&&4&&Z4&&##&&4&4&44&m4&m+DP4'&#"32763232674'&!"32763 3264'&$#"32763232> $$ g* o`#ə0#z#l(~̠) -g+^aaF s" +g (* 3#!| #/IK/%*%D= )[^aa !!!'!!77!,/,-a/G t%/;<HTbcq%7.#"32%74'&"32765"/7627#"5'7432#"/7632#"5'7432#"&5'74632 #"/6327#"/6327#"/46321"&/462"&/>21"&/567632#!.547632632  *     X    ^  `    ^  b  c   fu U`59u  4J   l~ ~ F 2    m | O,           ru| u  " )9 $7 $&= $7 $&= $7 $&=  $&=46w`ww`ww`wb`VTEvEEvETVTEvEEvET*VTEvEEvET*EvEEvEEvEEv#^cu#!"&5463!2!&'&!"&5!632#"&'#"/&'&7>766767.76;267674767&54&5&'67.'&'&#3274(8((88((`x c`(8!3;:A0?ݫY   ^U 47D$    74U3I  |L38wtL0`((88(@(8(D 9 8(Q1&(!;  (g- Up~R2(/{E(Xz*Z%(i6CmVo8 #Q#!"&5463!2!&'&!"&5!3367653335!3#'.'##'&'35(8((88((`x c`(8iFFZcrcZ`((88(@(8(D 9 8(kk" kkJ ! k#S#!"&5463!2!&'&!"&5!%!5#7>;#!5#35!3#&'&/35!3(8((88((`x c`(8-Kg kL#DCJg  jLD`((88(@(8(D 9 8(jj jjkk kk#8C#!"&5463!2!&'&!"&5!%!5#5327>54&'&#!3#32(8((88((`x c`(8 G]L*COJ?0R\wx48>`((88(@(8(D 9 8(jjRQxk !RY#*2#!"&5463!2!&'&!"&5!!57"&462(8((88((`x c`(8Pppp`((88(@(8(D 9 8(ppp  #*7JR5#5#5#5##!"&5463!2!&'&!"&5##5!"&54765332264&"<(8((88((`x c`(8kޑcO"jKKjK`((88(@(8(D 9 8(SmmS?M&4&&4#9L^#!"&5463!2!&'&!"&5!#"/#"&=46;76276'.'2764'.(8((88((`x c`(8 6ddWW6&44`((88(@(8(D 9 8(. G5{{5]]$5995#3C#!"&5463!2!&'&!"&5!2#!"&5463#"'5632(8((88((`x c`(84LL44LL4l  `((88(@(8(D 9 8(L44LL44L  Z #7K[#!"&5463!2!&'&!"&5!>&'&7!/.?'&6?6.7>'(8((88((`x c`(8` 3  3  3  3 v  ?  `((88(@(8(D 9 8( & & - & &  ?   '6#'. '!67&54632".'654&#"32eaAɢ/PRAids`WXyzOvд:C;A:25@Ң>-05rn`H( ' gQWZc[ -%7' %'-'% %"'&54762[3[MN 3",""3,3"ong$߆]gn$+) ")")" x#Z#"&#!+.5467&546326$32327.'#"&5463232654&#"632#".#"oGn\ u_MK'̨|g? CM7MM5,QAAIQqAy{b& BL4PJ9+OABIRo?z.z n6'+s:zcIAC65D*DRRD*wya$, @B39E*DRRD*'/7  $&6$ 6277&47' 7'"' 6& 6'lLRRZB|RR>dZZLlLZRR«Z&>«|R ! $&54$7 >54'5PffP牉@s-ff`-c6721>?>././76&/7>?>?>./&31#"$&(@8!IH2hM>'  )-* h'N'!'Og,R"/!YQG54'63&547#5#"=3235#47##6323#324&"26%#!"&5463!2F]kbf$JMM$&N92Z2&`9UW=N9:PO;:dhe\=R +)&')-S99kJ<)UmQ/-Ya^"![Y'(<`X;_L6#)|tWW:;X  #'#3#!"&5463!2) p*xeשw@www0,\8@www9I#"'#"&'&>767&5462#"'.7>32>4."&'&54>32JrO<3>5-&FD(=Gq@C$39aLL²L4 &) @]v q#CO!~󿵂72765'./"#"&'&5 }1R<2" 7MW'$  ;IS7@5sQ@@)R#DvTA ; 0x I)!:> +)C 6.> !-I[4&#"324&#"3264&#"324&#"326&#"#".'7$4$32'#"$&6$32D2)+BB+)3(--(31)+BB+)4'--'4'#!0>R HMŰ9ou7ǖD䣣 R23('3_,--,R23('3_,--,NJ ?uWm%#"'%#"'.5 %&'&7632! ; `u%"(!]#c)(  #"'%#"'.5%&'&76 !  (%##fP_"(!)'+ʼn4I#"$'&6?6332>4.#"#!"&54766$32#!"&=46;46;2z䜬m IwhQQhbF*@&('k@z   _hQнQGB'(&*eozΘ@@`  >. $$ ffff^aafff^aa>"&#"#"&54>7654'&#!"#"&#"#"&54>765'46.'."&54632326323!27654'.5463232632,-,,",:! %]& %@2(/.+*)6! <.$..**"+8#  #Q3,,++#-:#"$$ /:yuxv)%$ /?CG%!5%2#!"&5463!5#5!52#!"&54632#!"&5463#5!5`&&&& &&&&&&&&@&&&&&&&&&&&&%2 &547%#"&632%&546 #"'6\~~\h ~\h\ V V VV%5$4&#"'64'73264&"&#"3272#!"&5463!2}XT==TX}}~>SX}}XS>~}w@www~:xx:~}}Xx9}}9xX}@www/>LXds.327>76 $&6$32762#"/&4762"/&47626+"&46;2'"&=462#"'&4?62E0l,  *"T.D@Yooo@5D [  Z  Z  [ ``[ Z  2 ,l0 (T" .D5@oooY@D, Z  [  [  Z ``EZ  [ 5%!  $&66='&'%77'727'%amlLmf?55>fFtuutFLlLHYC L||L Y˄(E''E*( /?IYiy%+"&=46;2+"&=46;2+"&=46;2+"&=46;2%"&=!#+"&=46;2+"&=46;2+"&=46;2+"&=46;2!54!54>$ +"&=46;2#!"&=@&&@3P > P3&&rrr&&rrr he 4LKM:%%:MKL4WT&&%/9##!"&563!!#!"&5"&5!2!5463!2!5463!2&&&&&&  &&&i@&&@&7'#5&?626J%o;j|/&jJ%p&`Jj&p/|jţ%Jk%o%  :g"&5462#"&546324&#!"263662>7'&75.''&'&&'&6463!276i~ZYYZ~@OS;+[G[3YUD#o?D&G3I=JyTkBuhNV!WOhuAiSy*'^CC^'*SwwSTvvTSwwSTvvWID\_"[ gq# /3qFr2/ $rg%4 HffHJ4d#!#7!!7!#5!VFNrmNNN N!Y+?Ne%&'&'&7>727>'#&'&'&>2'&'&676'&76$7&'&767>76 '6# <;11x# *# F-T93%/#0vNZ;:8)M:( &C.J}2 %0  ^*  JF &7'X"2LDM" +6 M2+'BQfXV#+] #' L/(eB9  #,8!!!5!!5!5!5!5#26%!!26#!"&5!5&4& &pPPp@@&&@!&@PppP@*  9Q$"&54627"."#"&547>2"'.#"#"&5476$ "'&$ #"&5476$ (}R}hLK NN Ud: xx 8    ,, |2222 MXXM ic,>>,   ̺  '/7?KSck{4&"2$4&"24&"24&"24&"24&"24&"24&"24&"264&"24&#!"3!264&"2#!"&5463!2KjKKjKjKKjKjKKjKKjKKjKjKKjKjKKjKKjKKjKjKKjKLhLLhLKjKKj&&&&KjKKjL44LL44L5jKKjKKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjK4LL44LLjKKjK&&&&jKKjK4LL44LL 'E!#"+"&7>76;7676767>'#'"#!"&7>3!2W",&7' #$ &gpf5 O.PqZZdS -V"0kqzTxD!!8p8%'i_F?;kR(` !&)w.<\.'.>%#"'.7>.'&67632&'6'&' #"'.766.'&67632Z &+\cc:>'D> 6KD3W6,9(<*0-?")/SW7.Crb  :+OIX3'#C3:@ #*"-A%,1U=}AQfO$"|'"S*`H(:UܳJ?27sZy%+A07C~Ӗ5A"3 >IY#6?>7&#!%'.'33#&#"#"/3674'.54636%#"3733#!"&5463!24  : @7vH%hEP{0&<'VFJo1,1.F6A#L44LL44L"% 7x'6 O\JYFw~v^fH$ ! "xdjD"!6`J4LL44LL $1Ol-#"326%356.#"#"326%4#"326%3#7#'#3%#7#"&546324>54#"47632&#"'"'473254&'&54323#327#"'47673#327#"546327&#7673>7&#"327#"&54632#7#"&54632654#"47632&#7673>73#7#"&54632.#"#&'#67&#"327&'3673326#!"&5463!2 />  0@[W,8 G'"5,Q4/&4/ $&J (W" +Tl +7o _7*#) 83 ( -5G8 .'3/$&I8 48+5%7%{,2,rr,2,x-2.jj.2-xL44LL44L[ < J 2)(*(8$e  '+ , 1)H/ 'H4/// ,~i6_7G*''4fE!%97+" ;=4FYqO" '+ , &2hh_ ,0(5N(ntggtnno__on4LL44LL  BWbjq}+532%+5324&+32763#4&'.546327&#"#"'3265#"&546325&#"32 !264&"2%#'#735#535#535#3'654&+353#!"&5463!29$<=$@?SdO__J-<AA@)7")9,<$.%0*,G3@%)1??.+&((JgfJ*A!&jjjGZYGиwsswPiL>8aA !M77MM77M3! 4erJ]&3YM(, ,%7(#)  ,(@=)M%A20C&Mee(X0&ĖjjjV 8Z8J9N/4$ 8NN88NN  #&:O[ $?b3'7'#3#%54+32%4+324+323'%#5#'#'##337"&##'!!732%#3#3##!"&53733537!572!56373353#'#'#"5#&#!'#'#463!2#"5#"5!&+&+'!!7353273532!2732%#54&+#32#46.+#2#3#3##+53254&".546;#"67+53254&.546;#"#'#'##"54;"&;7335wY-AJF=c(TS)!*RQ+*RQ+Y,B^9^Ft`njUM ') ~PSPRm٘M77Mo7q @)U 8"E(1++NM77Mx378D62W74;9<-A"EA0:A F@1:ؗBf~~""12"4(w$#11#@}}!%+%5(v$:O\zK?* $\amcrVlOO176Nn23266&+"&#"3267;24&+"'&+";27%4&+";2?>23266&+"&#"3267;254+";27#76;2#!"&5463!23%#2%%,,  _3$$2%%M>AL Vb5)LDHeE:< EM j,K'-R M ~M>AR  Vb5)LEHeE:< E J ABI*'! ($rL44LL44Lv%1 %3!x*k $2 %3!;5h n a !(lI;F   rp p8;5h t a !(lI;F ` #k 4LL44LL  2HW[lt#"'5632#6324&'.54327&#"#"&'32767#533275#"=5&#"'#36323#4'&#"'#7532764&"24'&#"327'#"'&'36#!"&5463!2=!9n23BD$ &:BCRM.0AC'0RH`Q03'`.>,&I / * / 8/n-(G@5$ S3=,.B..B02^`o?7je;9G+L44LL44LyE%# Vb;A !p &'F:Aq)%)#orgT$ v2 8)2z948/{ 8AB..B/q?@r<7(g/4LL44LL ?#!"&'24#"&54"&/&6?&5>547&54626=L4@ԕ;U g3 T 2RX='8P8|5 4Ljj U;Ig@   `  "*\(88(]k  &N4#"&54"3 .#"#!"&'7!&7&/&6?&5>547&54626;U gIm*]Z0L4@ԕ=o=CT T 2RX='8P8|5  U;IgXu?bl3@4Ljja`   `  "*\(88(]k/7[%4&+";26%4&+";26%4&+";26!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@0 o`^BB^`5FN(@(NF5@@@u  @LSyuS@%44%,<H#"5432+"=4&#"326=46;2  >. $$ ~Isy9"SgR8vHD w ffff^aam2N+ )H-mF+10*F +fff^aab4&#"32>"#"'&'#"&54632?>;23>5!"3276#"$&6$3 k^?zb=ka`U4J{K_/4^W&  vx :XB0܂ff ) fzzXlz=lapzob35!2BX G@8  ' '=vN$\ff  1 SZz8zX#("/+'547'&4?6276 'D^h  i%5@%[i  h]@]h  i%@5%[i  h^@@)2#"&5476#".5327>OFi-ay~\~;'S{s:D8>)AJfh]F?X{[TC6LlG]v2'"%B];$+l|%!2>7>232>7>322>7>32"&'.#"#"&'.#"#"&'.#"#546;!!!!!32#"&54>52#"&54>52#"&54>52-P&+F) $P.-P$'#+&PZP&+#"+&P-#) $P-.P$(#+$P.-P$'#+&P-.P$+#pP@@PpH85K"&ZH85K"&ZH85K"&Z@Pp@@@pMSK5, :&LMSK5, :&LMSK5, :& !!3 ! @@@  #"$$3!!2"jaѻxlalxaaj!!3/"/'62'&63!2'y  `I  yMy `I y'W`#".'.#"32767!"&54>3232654.'&546#&'5&#" 4$%Eӕ;iNL291 ;XxR`f՝Q8TWiWgW:;*:`Qs&?RWXJ8 oNU0 J1F@#) [%6_POQiX(o`_?5"$iʗ\&>bds6aP*< -;iFn* -c1BWg4'.'4.54632#7&'.#"#"'.#"32767'#"&54632326#!"&5463!2#$( 1$6]' !E3P|ad(2S;aF9'EOSej]m] <*rYshpt.#)$78L*khw@wwwB % $/$G6 sP`X):F/fwH1pdlqnmPHuikw_:[9D'@www34."2>$4.#!!2>#!".>3!2QнQQнQQh~wwhfffнQQнQQнQZZQffff#>3!2#!".2>4."fffнQQнQQffffQнQQн ,\!"&?&#"326'3&'!&#"#"'  5467'+#"327#"&463!!'#"&463!2632(#AHs9q ci<= #]$ KjKKjKKjKKjH#j#H&&&KjKKjKg V i jKKjKKjKKjK ..n(([5KK55KK5[poNv<+#"'#"&546;&546$32322$B$22$$*$22$Xڭӯ$22$tX'hs2$ϧkc$22$1c$2F33F3VVT2#$2ԱVT2#$2g#2UU݃ 2$#2UU1݃2 ,u54#"67.632&#"32654'.#"32764.'&$#"7232&'##"&54732654&#"467&5463254632>32#"'&ru&9%" *#͟O%GR=O&^opC8pP*bY _#$N Pb@6)?+0L15 "4$.Es  5IQ"!@ h "Y7e|J>ziPeneHbIlF>^]@n*9 6[_3#"&54632#.#"32%3#"&54632#.#"326%4&'.'&! ! 7>7>! =39? 6'_ >29? 5'17m-VU--,bW.뮠@Fyu0HC$뮠@Fyu0HC$L= ?? <=! A <`;+"&54&#!+"&5463!2#!"&546;2!26546;2pЇ0pp@Ipp>Sc+"&=46;254&+"&+";2=46;2;2=46;2;2%54&#!";2=;26#!"&5463!2A5DD5A7^6a7MB55B7?5B~```0`rr5A44A5v5AA5f*A``0` !!!! #!"&5463!2ړ7H7jv@vvv':@vvvMUdkpu{#"'!"'!#"&547.547.54674&547&54632!62!632!#!6227'!%!"67'#77!63!!7357/7'%# %'3/&=&' 5#?&547 6!p4q"""6" 'h*[ |*,@?wAUMpV@˝)Ϳw7({*U%K6=0(M "! O dX$k !! ! b [TDOi @6bxBAݽ5  ɝ:J +3,p x1Fi (R 463!#!"&5%'4&#!"3`а@..@A-XfB$.BB..C} )&54$32&'%&&'67"w`Rd]G{o]>p6sc(@wgmJPAjyYWa͊AZq{HZ:<dv\gx>2ATKn+;"'&#"&#"+6!263 2&#"&#">3267&#">326e~└Ȁ|隚Ν|ū|iyZʬ7Ӕްr|uѥx9[[9jj9ANN+,#ll"BS32fk[/?\%4&+";26%4&+";26%4&+";26%4&+";26%#!"&5467&546326$32]]eeeeee$~i qfN-*#Sjt2"'qCB8!'> !%)-159=AEIMQUY]agkosw{! %! 5!#5#5#5#5#57777????#5!#5!#5!#5!#5!#5!#5!#5#537#5!#5!#5!#5!#5!#55#535353535353%"&546326#"'#32>54.&54>3237.#"Q%%%%%%%%%?iiihOiixiiyiixiiArssrrssr%sssrrssNs%%%%%%%%%%'32#".543232654&#"#"&54654&#"#"&547>326ڞUzrhgrxSПdU 7#"&463!2!2&&4&&&&4&KjKKjKjKKj &&&%&& &&4&&&&4&&&5jKKjKKjKKjK%z 0&4&&3D7&4& %&'S4&"4&"'&"27"&462"&462!2#!"&54>7#"&463!2!2&4&4&4&4KjKKjKjKKj &&&%&& &&4&%&&ے&4"jKKjKKjKKjK%z 0&4&&3D7&4& %& & !'! !%!!!!%"'.763!2o]FooZY@:@!!gf//I62'"/"/"/"/"/"/"/7762762762762762762%"/77627&6?35!5!!3762762'"/"/"/"/"/"/%5#5!4ZSS6SS4SS4SS4SS4SS4SS4ZSS4SS4SS4SS4SS4SS4S-4ZSS4S@4SS4ZSS6SS4SS4SS4SS4SS4S@ZSSSSSSSSSSSSSSZSSSSSSSSSSSSSyZRRR@%:= :+: =RRZSSSSSSSSSSSSSCv!/&'&#""'&#" 32>;232>7>76#!"&54>7'3&547&547>763226323@``` VFaaFV      $. .$     yy .Q5ZE$ ,l*%>>%*>*98(QO!L\p'.'&67'#!##"327&+"&46;2!3'#"&7>;276;2+6267!"'&7&#"(6&#"#"' Dg OOG`n%ELL{@&&Nc,sU&&!Fre&&ss#/,<= #]gL oGkP'r-n&4&2-ir&&?o  4 _5OW! .54>762>7.'.7>+#!"&5#"&5463!2"&462{{BtxG,:`9(0bԿb0(9`:,GxtB&@&&@&K55K`?e==e?1O6# ,  #$  , #6OO&&&&5KK?!"'&'!2673267!'. ."!&54632>321 4q#F""8'go#- #,"tYg>oP$$Po> Zep#)R0+I@$$@I++332++"&=#"&=46;.7>76$  @ ᅪ*r@@r'/2+"&5".4>32!"&=463  &@~[՛[[u˜~gr&`u՛[[՛[~~@r=E32++"&=#"&=46;5&547&'&6;22676;2  >``@``ٱ?E,,=?rH@``@GݧH`jjrBJ463!2+"&=32++"&=#"&=46;5.7676%#"&5   &@~``@``  vXr&@``@+BF`rks463!2+"&=32++"&=#"&=46;5&547'/.?'+"&5463!2+7>6 %#"&5   &@~``@``~4e  0  io@& jV  0  Z9r&@``@Gɞ5o , sp &@k^ , c8~~`r8>KR_32++"&=!+"&=#"&=46;.767666'27&547&#"&'2#" @@ 'Ϋ'sggsww@sgg@@-ssʃl99OOr99FP^l463!2+"&=$'.7>76%#"&=463!2+"&=%#"&54'>%&547.#"254&' &@L?CuГP vY &@;"ޥ5݇ޥ5`&_ڿgwBF@&J_ s&&?%x%xJP\h463!2+"&='32++"&=#"&=46;5.7676632%#"&56'327&7&#"2#" &@L? ߺu``@``} ຒɞueeu9uee&_"|N@``@""|a~lo99r9@9;C2+"&5"/".4>327'&4?627!"&=463  &@Ռ .  N~[՛[[u˜N .  gr&`֌  . Ou՛[[՛[~N  . @r9A'.'&675#"&=46;5"/&4?62"/32+  '֪ \  . 4 .  \r|ݧ憛@\ .    . \@r~9A"/&4?!+"&=##"$7>763546;2!'&4?62  m  - @ݧ憛@& -  @rm4 -  ٮ*   - r+"&5&54>2  @[՛[rdGu՛[[r  ".4>2r[՛[[՛r5՛[[՛[[$2#!37#546375&#"#3!"&5463#22#y/Dz?s!#22#2##2S88 2#V#2L4>32#"&''&5467&5463232>54&#"#"'.Kg&RvgD $ *2% +Z hP=DXZ@7^?1 ۰3O+lh4`M@8'+c+RI2 \ZAhSQ>B>?S2Vhui/,R0+ ZRkmz+>Q2#"'.'&756763232322>4."7 #"'&546n/9bLHG2E"D8_ pdddxO"2xxê_lx2X  !+'5>-pkW[C I I@50Oddd˥Mhfxx^ә #'+/7!5!!5!4&"2!5!4&"24&"2!!! 8P88P 8P88P88P88PP88P8 P88P88P88P8 +N &6 !2#!+"&5!"&=463!46;23!#!"&54>32267632#"_>@`     `  L4Dgy 6Fe=OOU4L>   ` `  4L2y5eud_C(====`L43V &6 #"/#"/&54?'&54?6327632#!"&54>32 7632_>     %%Sy 6Fe=J%>     %65%Sy5eud_C(zz.!6%$!2!!!46;24&"2!54&#!"&&&@ԖV@&&@&&ԖԖ@&3!!! !5!'!53!! #7IeeI7CzCl@@@#2#!"&?.54$3264&"!@մppp((ppp#+/2#!"&?.54$3264&"!264&"!@մ^^^@^^^@((^^^^^^v(#"'%.54632 "'% 632U/@k0G,zD# [k# /tg F Gz  #'#3!) p*xe0,\8T #/DM%2<GQ^lw &'&676676&'&7654&'&&546763"#"'3264&7.>&'%'.767&7667&766747665"'.'&767>3>7&'&'47.'.7676767&76767.'$73>?>67673>#6766666&'&6767.'"'276&67&54&&671&'6757>7&"2654&57>&>&'5#%67>76$7&?5.''&'&'#'""#''&'&'&'65.'&6767.'#%&''&'#2%676765&'&'&7&5&'6.7>&5R4&5S9 W"-J0(/r V"-J0(.)#"6&4pOPppc|o}vQ[60XQW1V  # 5X N"& . ) D>q J:102(z/=f*4!> S5b!%  (!$p8~5..:5I  ~T 4~9p# ! ) & ?()5F 1   d%{v*: @e s|D1d {:*dAA|oYk'&<tuut&v HCXXTR;w 71™  Z*&' 1  9? . $Gv 5k65P.$.`aasa``Z9k'9؋ӗa-*Gl|Me_]`F& OܽsDD!/+``aa``a154&'"&#!!26#!"&5463!2    iLCly5)*Hcelzzlec0hb,,beIVB9@RB9J_L44LL44L44%2"4:I;p!q4bb3p (P`t`P(6EC.7BI64LL44LL  .>$4&'6#".54$ 4.#!"3!2>#!"&5463!2Zjbjj[wٝ]>oӰٯ*-oXL44LL44L')꽽)J)]wL`ֺ۪e4LL44LL;4&#!"3!26#!"&5463!2#54&#!";#"&5463!2  @ ^BB^^B@B^  B^^B@B^`@  MB^^B@B^^>  ^B@B^^5=Um ! !!2#!"&=463!.'!"&=463!>2!2#264&"".54>762".54>762?(``(?b|b?B//B/]]FrdhLhdrF]]FrdhLhdrF@@@(?@@ ?(@9GG9@/B//BaItB!!BtI Ѷ!!ь ItB!!BtI Ѷ!!ь-M32#!"&=46;7&#"&=463!2#>5!!4.'.46ՠ`@`ՠ`MsFFsMMsFFsMojjo@@jj@@<!(!!(!-3?32#!"&=46;7&#"&=463!2+!!64.'#ՠ`@`ՠ`  DqLLqDojjo@@jj@@B>=C-3;32#!"&=46;7&#"&=463!2+!!6.'#ՠ`@`ՠ`UVU96gg6ojjo@@jj@@β**ɍ-G32#!"&=46;7&#"&=463!2#>5!!&'.46ՠ`@`ՠ`MsFFsMkkojjo@@jj@@<!(!33!(!9I2#!"&=4637>7.'!2#!"&=463@b":1P4Y,++,Y4P1:"":1P4Y,++,Y4P1:"b@@@7hVX@K-AA-K@XVh77hVX@K-AA-K@XVh7Aj"#54&#"'54&#"3!26=476=4&#"#54&'&#"#54&'&'2632632#!"&5&=4632>3265K @0.B @0.B#6'&& l @0.B 2' .B A2TA9B;h" d mpPTlLc _4.HK5]0CB.S0CB./#'?&&)$$)0CB. }(AB.z3M2"61d39L/PpuT(Ifc_E`1X"#4&"'&#"3!267654&"#4&"#4&26326#!"&'&5463246326\B B\B&@5K&@"6LB\B B\B sciL}QP%&#"!"3!754?27%>54&#!26=31?>Ijjq,J[j.-tjlV\$B.R1?@B.+?2`$v5K-%5KK5.olRIS+6K5̈$B\B 94E.&ʀ15uE& ԖPjjdXUGJ7!.B P2.B %2@ 7K5(B@KjKj?+fU E,5K~!1.>F.F,Q5*H$b2#!"&=%!"&=463!7!"&'&=4634'&#!">3!!"3!32#!"3!23!26=n$7654&#"#654&#"#.!"'.54632&5467>32>3200?t ='/@H@"+4K8"*!4dtB/&> c@0&=  =_JUD29i1"07 {x\YSgSSW]|t eyD0&0D/  I4C+) t .B3%h#/B0&&03|&p>i +#] WsgQT\QglU ]#-39oK_3[_cg"'&#"3!2676=4&"#54&#"#54&#"#4&'2632632632#!"&'&5463246#!#!#5K)B4J&@#\8P8 @0.B J65K J6k cJ/4qG^\hB2.1!~K5y?^\Vljt-.j[J,qjjI7$?1R.B+.B$`2?gvEo.5KK5%-K6+SIR[&.E49 B\B$5KG#!+"&5!"&=463!2+"&' +"' +"'&5>;2>76;2Y    M .x - N     u  , u ?  LW   #  *:J4'&+326+"'#+"&5463!2  $6& $&6$ UbUI-uu,uuڎLlLAX!Jmf\$ 6uuu,KLlL-[k{276/&'&#"&5463276?6'.#"!276/&'&#"&5463276?6'.#"  $6&  $&6]h - %Lb`J%E 5 ,5R- h - %Lb`J%E 5 ,5R-'uu,uulL/hR    dMLc  NhR   dMLc  N1uuu,LlL@  ' 7 '7 ``H ``H !``H ```H` '%  7' 7'7 ' $&6$ X`(W:,:X`(WLLlLX`(W:BX`(XLlL $ %/9ES[#"&54632$"&4624&"26$4&#"2%#"&462$#"&4632#"32&! 24>  !#"&'.'#"$547.'!6$327&'77'&77N77N'qqqqqPOrqEsttsst}||}uԙ[WQ~,> nP/R U P酛n >,m'77'&77N77N6^Orqqqqqqt棣棣(~|| on[usј^~33pc8{y%cq33dqpf L 54 "2654"'&'"/&477&'.67>326?>< x ,  (-'sI  VCV  Hr'-(  $0@!BHp9[%&!@0$u  ]\\]-$)!IHV D V HI!)$-#36>N"&462."&/.2?2?64/67>&  #!"&5463!2]]]3 $; &|v;$ (CS31 =rM= 4TC(G zw@www]]]($-;,540= sL =45,; @www(2#"$&546327654&#" &#"AZ\@/#%E1/##.1E$![A懇@@\!#21E!6!E13"|! gL&5&'.#4&5!67&'&'5676&'6452>3.'5A5RV[t,G'Q4}-&r! G;>!g12sV&2:#;d=*'5E2/..FD֕71$1>2F!&12,@K r#"&5462>%.#"'&#"#"'>54#".'7654&&5473254&/>7326/632327?&$  $6 $&6$ !&"2&^ u_x^h ;J݃HJǭ qE Dm! M G?̯' %o8 9U(F(ߎLlL&!&!SEm|[n{[<ɪ "p C Di% (K HCέ  pC B m8 @Kނ  HF(LlL "*6%&6$ 7&$5%%6'$2"&4}x3nQH:dΏX e8z' li=! 7So?vM '&7>>7'7>''>76.'6'El:Fg r *t6K3U Z83P)3^I%=9 )<}Jk+C-Wd &U-TE+]Qr-< Q#0 C+M8 3':$ _Q =+If5[ˮ&&SGZoMkܬc#7&#"327#"'&$&546$;#"'654'632ե›fKYYKf¥yͩ䆎L1hvvƚwwkn]*]nlxDLw~?T8bb9SA}+5?F!3267!#"'#"4767%!2$324&#"6327.'!.#"۔c28Ψ-\?@hU0KeFjTlyE3aVsz.b؏W80]TSts<hO_u7bBtSbF/o|V]SHކJ34&#!"3!26#!!2#!"&=463!5!"&5463!2  @ ^B `` B^^B@B^   @ @B^@@^BB^^>3!"&546)2+6'.'.67>76%&F8$.39_0DD40DD0+*M7{L *="# U<-M93#D@U8vk_Y [hD00DD00Dce-JF1 BDN&)@ /1 dy%F#"'&'&'&'&763276?6#"/#"/&54?'&763276"&'&'&5#&763567632#"'&7632654'&#"32>54'&#"'.5463!2#!3>7632#"'&'&#"'&767632yqoq>* 432fba  $B? >B BB AA.-QPPR+ 42 %<ciђ:6% hHGhkG@n`IȌ5 !m(|.mzyPQ-.  je  r=@@?ppgVZE|fb6887a %RB? =B ABBAJvniQP\\PRh cDS`gΒ 23geFGPHXcCI_ƍ5" n*T.\PQip [*81 / 9@:>t%6#".'.>%6%&7>'.#*.'&676./&'.54>754'&#"%4>327676= >vwd" l "3 /!,+ j2.|%& (N &wh>8X}xc2"W<4<,Z~fdaA`FBIT;hmA<7QC1>[u])  u1V(k1S) - 0 B2* %M ;W(0S[T]I) A 5%R7&&=,Xq&&@X,LΒw%%;#!"&5463!546;2!2!+"&52#!"/&4?63!5! (&&@&&(&&@&&( (  &&@&&@&&&&  #''%#"'&54676%6%% hh @` !   !    #52#"&5476!2#"&5476!2#"'&546        @  @  @    84&"2$4&"2$4&"2#"'&'&7>7.54$ KjKKjKjKKjKjKKjdne4" %!KjKKjKKjKKjKKjKKjK.٫8  !%00C'Z'.W"&462"&462"&462 6?32$6&#"'#"&'5&6&>7>7&54>$ KjKKjKjKKjKjKKjhяW.{+9E=cQdFK1A  0) LlLjKKjKKjKKjKKjKKjKpJ2`[Q?l&٫C58.H(Yee    Y'w(O'R@$#"&#"'>7676327676#" b,XHUmM.U_t,7A3ge z9@xSaQBLb( VU  !!!==w)@T!!77'7'#'#274.#"#32!5'.>537#"6=4>5'.465! KkkK _5 5 #BH1`L I& v6S F!Sr99rS!`` /7K%s}H XV  P V  e  Vd/9Q[ $547.546326%>>32"&5%632264&#"64'&""&'&"2>&2654&#";2 P 3>tSU<)tqH+>XX|Wh,:UStW|XX>=X*  ))  +^X^|WX=>X:_.2//a:Ru?  Q%-W|XW>J( =u>XX|WX`  *((*  +2 2X>=XW|E03>$32!>7 '&'&7!6./EUnohiI\0<{ >ORDƚ~˕VƻoR C37J6I`Tb<^M~M8O  5!#!"&!5!!52!5463 ^B@B^`B^^B `B^^"^BB^ #D2+#!"$&6$3227%#"$$ %&$#" 7=D9KqMLw9'qnH.Ktfw㿢p??pY9n6 LlLkT ၌.?p㿢p?   7!' !\W\ d;tZ`_O; k54+";2%54+";2!4&"!4;234;2354;2354;&5462!2#!32354;2354;2354;2````pp``` &4& ```@PppPpppppp$&&$ ppppp j#"'&=!;5463!2#!"&=#".'.#!#"&463232>7>;>32#"&'#"!546 %. `@` :,.',-XjjXh-,'.,: kb>PppP>bk .%Z & :k%$> $``6&L')59I"TlԖlT"I95)'L&69GppG9$ >$%k: !+32&#!332 $&6$ ~O88OLlL>pN  iLlL '':Ma4&'#"'.7654.#""'&#"3!267#!"&54676$32#"'.76'&>$#"'.7654'&676mD5)  z{6lP,@KijjOoɎȕ>>[ta) GG 4?a) ll >;_-/ 9GH{zyN@,KԕoN繁y! ?hh>$ D" >â? $ n"&5462'#".54>22654.'&'.54>32#"#*.5./"~~s!m{b6# -SjR,l'(s-6^]Itg))[zxȁZ&+6,4$.X%%Dc* &D~WL}]I0"  YYZvJ@N*CVTR3/A3$#/;'"/fR-,&2-" 7Zr^Na94Rji3.I+ &6W6>N%&60;96@7F6I3+4&#!"3!26%4&#!"3!26 $$ ^aa`@@^aa '7  $ >. %"&546;2#!"&546;2#/a^(^aa(N@@4&#!"3!26 $$ @@^aa`@^aa '  $ >. 7"&5463!2#/a^(n@^aa(N@ %=%#!"'&7!>3!26=!26=!2%"&54&""&546 ##]VTV$KjKKjK$&4&Ԗ&4&>9G!5KK55KK5!&&jj&&#/;Im2+#!"&'#"&463>'.3%4&"26%4&"26%6.326#>;463!232#.+#!"&5#"5KK5sH..Hs5KK5e# )4# %&4&&4&&4&&4&` #4) #%~]eZ&&Ze] E-&&-EKjKj.<<.KjK)#)`"@&&`&&&&`&&)#`)"dXo&&oXG,8&&8!O##!!2#!+"'&7#+"'&7!"'&?63!!"'&?63!6;236;2!2@@8@7 8Q NQ N 8G@ 8GQ NQ N7   8 8  H H  k%  ".>2I20]@]@oo@@oo㔕a22]]p^|11|99|11|(%7'7' ' 7T dltl)qnluul)1$4&"24&"2 &6 +"&5476;2 &6 LhLLhLLhLLhL>  &   &`>hLLhLLhLLhL>&&>jP_< u>u>  ~pU3U3]yn2@ zZ@55 zZZ@,_@s@ @(@@@- MM- MM@@@ -`b $ 648""""""@ D@ ,,@  m)@@   ' D9>dY* w    T     @ f %RE    $!k(PBp<$H<TfT H R , D x 6 \ DLX*(2^n0|bX*Z >n@jDH. 4 n !>:>>?|@@>@xAVABBBBCRCDE:FFxFGVGHH\HHHII0IbIIIJ*JrJK`KL@LMM~NN\NO.OOPZPQQNQQR`SU6UV(VzVVW>WWX"XnXXXYY^YYZ2ZdZ[[[[\l\]]]]]^R^_```a`abb:bbcd$dfdeelef&fvfg gghBhphhi2iriijBjzjk kbkll\llmm8mvmnnbnno8op pbpql Ǣ"ɚʔ| ͜VΤ zвTXҾ&`ӎӎӎ,Ԩn(\֚8\tۆ`ܨRݼ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq rstuvwxyz{|}~     " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuuni00A0uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni202Funi205Funi25FCglassmusicsearchenvelopeheartstar star_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroad download_altdownloaduploadinbox play_circlerepeatrefreshlist_altlockflag headphones volume_off volume_down volume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text_height text_width align_left align_center align_right align_justifylist indent_left indent_rightfacetime_videopicturepencil map_markeradjusttinteditsharecheckmove step_backward fast_backwardbackwardplaypausestopforward fast_forward step_forwardeject chevron_left chevron_right plus_sign minus_sign remove_signok_sign question_sign info_sign screenshot remove_circle ok_circle ban_circle arrow_left arrow_rightarrow_up arrow_down share_alt resize_full resize_smallexclamation_signgiftleaffireeye_open eye_close warning_signplanecalendarrandomcommentmagnet chevron_up chevron_downretweet shopping_cart folder_close folder_openresize_verticalresize_horizontal bar_chart twitter_sign facebook_sign camera_retrokeycogscomments thumbs_up_altthumbs_down_alt star_half heart_emptysignout linkedin_signpushpin external_linksignintrophy github_sign upload_altlemonphone check_emptybookmark_empty phone_signtwitterfacebookgithubunlock credit_cardrsshddbullhornbell certificate hand_right hand_lefthand_up hand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilter briefcase fullscreengrouplinkcloudbeakercutcopy paper_clipsave sign_blankreorderulol strikethrough underlinetablemagictruck pinterestpinterest_signgoogle_plus_sign google_plusmoney caret_downcaret_up caret_left caret_rightcolumnssort sort_downsort_up envelope_altlinkedinundolegal dashboard comment_alt comments_altboltsitemapumbrellapaste light_bulbexchangecloud_download cloud_uploaduser_md stethoscopesuitcasebell_altcoffeefood file_text_altbuildinghospital ambulancemedkit fighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_down angle_left angle_rightangle_up angle_downdesktoplaptoptablet mobile_phone circle_blank quote_left quote_rightspinnercirclereply github_altfolder_close_altfolder_open_alt expand_alt collapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcode reply_allstar_half_emptylocation_arrowcrop code_forkunlink_279 exclamation superscript subscript_283 puzzle_piece microphonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchor unlock_altbullseyeellipsis_horizontalellipsis_vertical_303 play_signticketminus_sign_alt check_minuslevel_up level_down check_sign edit_sign_312 share_signcompasscollapse collapse_top_317eurgbpusdinrjpyrubkrwbtcfile file_textsort_by_alphabet_329sort_by_attributessort_by_attributes_alt sort_by_ordersort_by_order_alt_334_335 youtube_signyoutubexing xing_sign youtube_playdropbox stackexchange instagramflickradnf171bitbucket_signtumblr tumblr_signlong_arrow_down long_arrow_uplong_arrow_leftlong_arrow_rightwindowsandroidlinuxdribbleskype foursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378 vimeo_square_380 plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629VO)goconvey-1.6.1/web/client/resources/fonts/FontAwesome/fontawesome-webfont.woff000066400000000000000000002432041266412531300276610ustar00rootroot00000000000000wOFFF*FFTMDjo)GDEF` OS/2?`Yzcmapwmgasp8glyf@*,,qhead.<16 Uhhea.p$ [hmtx. )*loca1LiVmaxp6D name6d3Fpost8r 7cAwebfF|*VO=Pu>xc`d``b `b`d`dj,` $xc`fsgbʢb l |6Fe ňDfsx͒?kqgI]5 5C W NW "R: %SX!c{M6o~hK҃{{@^;%$ȧ&=d2,<jT֬浨ej]N:Bq!,(*hF-ky+Z٪V$=~!&49-hI+ZӆtWSA# r( jh]уX2b;;r 6݆[WSY'YG$ 2'axBx?x7W+/ʟ|Ƨ|z|[^^(+5Y|`&DTxڼ |T0~9w}Ν-d&&$a'Ĉ. P VZQv_;ݴԶn~b[۾U[߶?[!s?ܙ$$}{Ͼ>y<#6q٠$rPF5m'IC\տiiN|RsuqHH&\1l2ɠTJ~$>\Ѩw$O(W9w yw<, AtG89jYPu4GvXpC Nd- cLe xK7΂Vz~3BPbQټbxpͻJ}Ҁ8ì yh6.@CG͞ x HBi G=cW]u ȏcW݈VF0$@Xͧhō):/G#tvy8us 9."/Yp3E#јpXg.B`DrN!Leemr2| d6ڮ%U (f`V t'sf7^;--نodϯ;[O( .?mڴ="gV>zYg3[?%LFwOhn1[qC§ ?vP:䡔x!4ժrpxU oj]ƿ*>yaAQ U(f#J&V t(NW u57.M~;UUMYgzSSΈ~>zQ>_OԭЫG#L-vL jPW;Fh'8y5[{ԟk^yL|H+ia@U BR=]Y~-9tЭ[>O߽aN&›7|q;]|xs3/xG-M35%zPs+˝]]t*ڌ:pu"2/-4>c?[}GlgsQon4FʩSLX$BUC9^ V ?5$IԇR'Y[<xz>n=fjи;K<R*Haud1@ 'ag䇓plLXSkU7Z%a=qQ7W>zj7 0'}_TQ'0 p.>Č0aX 8,8̐ĆV^HWroG(~,wD>K|x+OEDžV$6Mecw9$=dW꯴P\PT Cc}R4|F/Bp6fY{i is 2<:*a^d)a h0 1Xz2| :P=$OV͵>^Y{?rKKH[#&g3.K,zkA?]vgk;4ųwW~Wh>`mZyɾc۷d&k~SӁNj)wGO}]47]X!9x 55[W/EAcA?# \.DdO7-=P5*sӠ2&[o5n ^+$.Z!toL.DL^Cnn l͹Yo&c055iifi[Z/1 =Չ ۓ:͇(tr3K57?"q,:n:ilGCA*k{QVwJ`ZPl~p6 )l$aX'_Q4yYpGDWw|U֯aؾbvq8Ih!,U~]h!P4s)<+kĥqDRf6Iv?wz<Z s&X":gMˬxFZ}l.k|niPvO6#h%+)>rйo6Fc˖-pǢ^y?S3iLZ7wC,}q)D1G5מX1ί)u y3_]l(lk5u!Ĉ| ;¹ĭ9V U }/R8ndiId$%;py+|Fy.~4p4BP)yS>3bgÙqͥtRx2$'{#w3[{l:WȟEohglQ0" *rl"3JGhz (A7~5H0O@:ZʸR]&h@HBɏ g?z=Bо C& ?֚M8jS%v ڢ*N>AtWn `zXyw;XPi sչVt y?ͺzF]~A~}y/ϋ^d̈́}eP%s , o޵yU2lV><s\8LJSf:j̊þilF3F< "PvUm#r_a2pRِ\z,^:O&GiR<ЦisNTUFy.f$qFv>ND 4;O@):%@=B:[DOKI#Ő+ѕ#d.uF:UgQPw#Ω7 =K;C!ɏG;G2X=ވOX$5H cZ'F,9 6tǿIpnZLow,%:]N/丈+S$C#pGa{.AVDI4H'NH< Ў}CĦKwOv\/Xa( Ň-I_~۽57mN]ޓ~9{fglR9M ʼ!}"۾|ݺ|e>sMޖ-xZ ެ3- v,?rzGzdOti)OtsP/[p,KISw PiQjwγ,>MӽHQ_m]>'3z\{]v B3ll6m훕='6jF\DZ!bUZo.ׯ_zNa$ f.j7atCz[0At]B=`SñB@a[n(/Lv3r Sb8#r-kAfGŋ=8cz,|OEDi5 :b3#ѤHuX((G τ0~"ϻܣ`pCM|".sxsYĘd/?1o!m?G:`ޒ`5odc~tlJ8۝$3% ׇ0Շru ?ݬO%.I%SLD`ը$\)Y4,GInʒ:̇/[GIm>c,w)fN!$&=\) ];s'?a=cGJECȠ\L^Q@o1+?`=YSN'MCx9T:AA@K.j :IbfS]bnѣqaQt^k2(ItH9E+ϵБI&$U@V{K m2o9G! "&R,K0xlx8|$8fN p\0I'J=nh@ ڼ5y| + )ۑ#p&};6ɐ2h遲#4ӑ#hhϱkr\ (czM@ zZՃA4=\wŜh4H9W@ScdJ*1\Ns{&rA>>>PsB{JĢ wB3zON pœչ|t ѿs uzbxyWTR%(`mf ;BNw;y/|RK[⿠"tf\H TJ/S`i"l%p&Fvl=usY}BhݒG\oJiv00$b5>Au_V^[ :bqRNG/il?Z#d(F5!u}7~U.BQطŕgwr:MQ:Rn HbJHvIA|i]n{gym]5VzS[  u.js`*Z,S1 cjn#6[.>me3:b.@T`[Ԡ<Ѵ.9t'Sݭ̨Lısj0#?yԥϕF^Wz:cҀ+ST~Yi!%ӰDa>gfc+|͙WL>)HiNI s F28vI@> h>^zelmU<a<(hvlSdOW)v*IypbyM ~Yo(.܀q6EǗ?I5,Q&+Vj;N=IMbkf*5/j (6A7am0ų(P =Yx5w0¢  07FZ:xU $4F>!7JTS@29q 4Ѽ6vJܥJ4~ >::raS#~9`a Je89|yW7kvV#e*|vYP![0 ղ^댥Z"PɒS?+UGV=ouL6}:ؐj돷^"`9ªCK_,fy<`63Lnֺ{<0^>ɣ $W<<q¾htAt$P(էы*<*mE("mT2H11# ꯡh*wFp. P? (ΥaՠGU/u".Px+uw.!mmp|Ys YbHouz/uG^ ƜZKܮQ켼Z+*]t{јn7_Wi{,kկP-IϢw,}E .,C*Z3Kp־1Y 87aC ]u!hX  ݤ%TyyP& eKuah48>1-q I4ӇyDMmg*pJ{# &JZo{i>tK_ۂ ԢA[R>_ џT_ejOBCdٯVbJLe?^( UBpe|%`v8av`[a<r/Y%CA+LN' Vkn ڕ̜ KA,}IvpS yN&4j}0bOL$\dH-}_Xmf9xoѳGtj߽|fB_ؿҎN ZWE0i~~§Z/'c^І"J2Ie91QTMޮc*Sc 9SNX^g:^$}Ջ_>|>䐱=>_KWd/=3 1O7`#T;=<7"7UXȹuE4KeHcv+"֯ݳU"P>jBoXlӍS.i47s{Wg5_|Cu^YeIj\ϭ/R%T<ȌDckpQrLtBn1nMß@s>M_};W8j75؏~-qm:U}_9VT2+mz+4+r~IT[pL\l bMog]T삶8`ǯ-\]Z y㖿1C'/yjA7G+('tZ'ϾvKfգ7ifpݾ| 'yAF-?if6`fi$wIulYϓܖ-Jc-7zYkh&o5} =/ГF zl/?o:yvh˖Mʖ[8 si?'PW< iCN^o.]ݧV)/3$üq亴A䊫ƏC||?U~ bATK6Z@Tip'>Q7XD=H6V&:iry˘W[6km5<Ήs\ƒj:75ϡq:+yUapl"Æ) `=ʶ_|{-zfzs]fMe|#zJILW`E:`?AO颤9T4Z3GYPs^Oѕ5S1[ `Եۄ ChOG;]_aK'7tLͱ=f ;~й~O4g @:dx^m@bvMֆ[ /tmXxSiO{vko*,i7]\g&EL*~Mh1Qj^rLrVF2\#m+*["@k OYWcDEm n[5čsCX kk˶<"Q4^ӯTZ$wN̷.eUy{8$YO\] f͞ _™XۣZ|ʔG 73 4$qΰKr- 'suI^¨t: G&C9~o9v <gކl~Ƴ^̿U>me%7o%\ 7.ykgeDGeT).q,pJ2O*edc$X*ФJ^@ ,x2"1 ,0^&g]_1׷'R4 $l-5<ڠ1C[ R2rpC9}|:t9w$䏒kVt܉zj֬Tr쑧=mC_q?=4ߛJ1Ryz2%hFdrԞ ;0`wT%lB€z7ECu0{d3ɵ譨`NT;ڋiv}+'Ŭ\EEBjWx&BY%, 2Cd)hd G"GmK)NJRQrJ `'AtT,b=QK0[ ,A%* ruXWh}*nӻ4P~H:dr: Kl]5h<'2շ)=mkDi]fz\lV:M4l0{ͤ,\d/mD J Dh FAD 6#611</2RzTѓ9gןj}z@31 Xksc "v;jF<ܤBm# ift;t-Z,+&YE݈ȉ>ˌ5QK*]yPB}t#}海xy9-(WS44bz2c^v*v2 GYb)k|,GӤL` ]ɠ3xKg1kZ\X3]z϶<|opՄW,z;ء 8,0`c^9Us)S)uuWrogǿ:{QarjA .1X`4( K^ 1]1b`'y,TC; &sտ"~]J'jVZ${ XIeɉ7XjDRL ׮I'%OBm 9p~q}.YvADH7o8v}rJ(RG1dUN,w64~pTdoFUECF#3ZS"j6 eu#C G8y硧MZ.NEѡsU7 ?܆(/m6ե:ZQ%]~a~;tZ v\{,J BA2-56+].aVKLgrA8 X` 5Wknr;n.Т|ƌ|h՟|N7Co>{ّiYMyYwW F.;߸~wZ>~B6>JܽlU_6D÷9^k?Gb|n )#kwj?Yх"1U=~; P5o1E='WK<Ƨټ.k?(-ENjks['eJ?^P:GX;cMg]AdU(X[7:ЉCejH,OUNTk{EMɆ7ήNf dO@7l :a?hJfE+f<GPQT6+8ŌCfk2%BCU.IHg@j]`.<gb65Z+kإVM){!۱;{d;ׄv/A"?Ͽ:Ҵl`[h knۯZ}Z#Ts}Ɍ"5a~`IO+Ms{O%X6]&ZZ[P+{=V{*c_FymXkЅ}Z66E5˲xs$t__D-¥4P ~\{gAd+h 2/)/b ^n>5ZZJ-1;Y@^N݇'y7M 5AeXpFߑmru3}@j$LWҨmr9E~gbJ PS-pb̸?bسELʇ̈́k<7puC}m'6SsUݱ?k_ܮ{ϱUK iͿ)ؑ|}o˓wRMk~owFOqP|w3ײ5OS}'̲̓g/cAg6=!t' }~)bT_|$;nhh{ޔ~1n2KXwuclEG5h0yh/H&GOW͏,C [>{ڭI,J >9>o@`KYrąD^v2N'}Ć gŃgMOuHwNq,^rLȁe{kٝ+M>,:Bu,U5\3F"EO=d_?b4n^2Q ߋ O5ʳ"C{Ќx&xbw9usσ+R_N\KhFOg&Aeވs=yS!nK6@?DS/ɹF3;&S'p\.Z" V {_vY;o z:  `/5wЂ=$k23}AgcvU'_P 2fU;2fSg@hi/N<헎j]09Zgz|R\oS]/vx(׀'eF eO`QXnIdw&쮒t 2 *MLJ!rE6zaIo>:\ :י>n霍sJ'ې mq~Acz1l'z~2NǑc?n_6Tr"cMIC >\Kя'Q}BhTE5ѕȢl֞ ƨ%_j*ڴ7mChC!:c]1MiMETqX3z^ YƷZ$})]l*2ÍXFv]<:wtɌ3Nwfj(eQ"1sH+j@)Ih,ɢ$.zB(v; _?U^dueb.BtG-@DDNJ|EHZ!@Ny*Ya m+ [䆷Xb Pcǒh~ņ.lQjque3i1(etDg!Qr>A,AʦYWUmg+ Mg,m|=CBmI Ʉh# !eJ% qS&%~Q7^ V mh݄x6`AD؊!p%FbD=du] 2x%$a$ <1*wB&(`G&B&@LV6 :ZV` P 0YyDx iiEtECM ,m 9̎+JL-s|$*~\|4 jl<4طNEN h,!ڵ![^W-96u*32TF*H;e64#^t;K1{ExM8biE}2+ZwFh.RкEM䘝pMfp˸5SN MRġ+ _`2?LR Ko[FG>hCmqͶYQ0%-Ko%B⍚!(\]YLi!җ-Zrκ mbe]{-{\]V8gdbQ2l<-wӴٵ}&Vң/)`Q>g}M~0*R{Z5ՓxmcwW;|6OEv{pَ_jՊ;|Pzԛ5x{__ ֏MT|ee;nXj<[g9 .8j䄚%Ү9%?o>v[1rQ: n:x3(؛ug=<{wϡMq-93QR 겚t|IbAK!)}SM?seTQoN}G}W}ϑ_uޮ]tOIY2G:m;$(q&nwfq 9:ٓL96o^mSAҤScfD2Az((YAG!Č;Kk% ]NϛmJ8e{cj~f;wسt$46=KRw%E~NmI,Y{jYh-xB/'|Î9{`/b#Iz#ǣim J/_:/Onnde{I1fS^m_<ϫxknP|K6 ޥ uf2^tU7}cd6 t?{ٞh]Vz UK֏zγod08Qx9YfyXGyAͪa ҮWɆ㋳- (+ǟ4k QFX7xv[vWثg펎mi6?u챶&sWYDNv$j@cqYєqsij{շm'V_cнޡ1b!UZ~?9?ص/n퀭:XΦG3ȘڝI]Sfn2}1`:ئ(ŲIpK6M62nZXͰmB /HvaZW:sAg-v nJfuMs$SS=Z[5Ηӵf6N^ui='kj;:ӗM,ktbWu]D$Gv7U"ƍ+!Js^:FH0)d4êGB ;*$X8[ӔB(ޜj@4*]%2e4 v'whL-̚;"Fw[dofV/BhjsO\©Kp~u <ߥ7tk|}MgǪ3g8Z|\,}ՆPKL:6427,GNW{uU|ы譓mՌɲ>%)jrj=nц̊ܮ2X4Kq\L 46`[DG̵]= +nu)f,P6lonòSͭ44_l_|JtiFo۶wulrn x%4%X3ķ?ݸ3þ:g3! 1YQzQQo-3:-?X>ykyngqfu8?_ol|W}=6F&)ݔe7DwWꨓX& =kТ/t}% 9lV2Ea&7ZqӝI٬7Og/H'~?t㷿?RHђ,CB k>_|].+`x o<ª[vjOxa!M(=?@dz5LL$Gf&"t%hJRJ6GbExb~Yzyd4z "7|a-z?R 4%QfAŖ݈(iOtBuhKW$5~.]uMm͝~cS/mۻ/5͋u؄E9ݻ{Eqg=+j.jƧ ?ዱ{;tw?>ޙm5I+;Փݩ,ElM! Øfӱh'&$P!$BK![3{E6y`Wݍ.ӣ8匛޻X߶}iK=*[ruΓ3dr-rd=e#bpJ2y3}O:b Ѱof\9[ecl~EB ywл{Xl[| lao⚉NV5̛m5ֈA ɯqMX D(qkdJIߣ]V]y媥-}nA!_۝}ꗯnZk_ڎ/!5.St-0Tc牫0:zm+H4bexT7J_ut#pm fμZy#C _ _: * ZPL @`(QJ`˄H3HZ).e'z 1LS8n?(;&$Q,3W1>$L0ye&Hg0LsGƨQTK#Oq:{I=;2tvc=nا?J͏A4H>5FϞOM9+̉0sʑ&^3 IXV|sՆ5M[[Lp%9~lDKU l_] șP>v; .埝G*yQ4>}üV6@EV6N(h8dM/b4f3ϨqT> T1"k5@kt H5+a>PAhrqí$Ez$>/Cz%hd뮃> +>?/g;MuץsI fgQ(g̱ZYˈM\]21 $AOnG'o~`]pV+굺EUVFk~v+yjtZ` MWcGn03gNmP/ji͚lJ4FԳY`?B)Њ؅W Wx(KX薑"D{O#ݥ$f8Lm&L:PBzR9cK})RV# X'>域&|PVcӊވެ\ITLT)&IxfBͯD6XdHL&#`,^)2؟Z("fj9 #>Qc[elYd=]&tń+40cm\lmMSV,{?5y [6|փݭGǖ1DenDAV8icP+ܥ+)8h5Au: 6I Is"7gat}$_8 p4b?>n&!z춡 4u' Li(&+?tu&1R {߹%ƺW,[zzZV[^i-+nM_\T?w"׹ݧX\W.l9БݖbFNҋxJ0BI>@}NH~{8*!Dm6laJ |A'17ۻP)ⴿ٬Ň֡eDJЇg]8A:hh 1ֵ#lEMevU ȾQlb"YW(< 2"38L%e(H[@$^۷FHޒ=SK>Ԧ8Ȩ(F'g0 eÄ"ț&^ӣ[1K$=}SSćbH9DOz>F}ʃ ax.K|6TRd i6ӟ]:7Lɇ)Q,9#J'g15h-P KG#޴g+ǯh6qdVh#;ob^Qf0%eGYG[#A'K{ 4::7P7bP&T00 {K']8b.+ҁ18p{3F#`κwʥq4u~-1'/eŠ ~gGz>Ϯ?]Ũ挷L#͜rT.}"/MI,3 u#ST>P[cs3JqSrrmoQ< xQNZqc_.ʁ 6a<K)QGRr77P߀sޝdos3z|ON===:Is*vhYnqGzd[ŝ]׵hUK~z㑉=4Ip0&20 ][x 14shy> FǶ?ue""3F:4Z"`0~|P3SX:(C7 &Ӡ(SF{s nqx.QVY*ȲY9'0n d(-̭% !Y)$H+~^ʍF%Q|:X`1يWVs#qm:̲֕nm%&~(!uw @3su n+] `TKXjEx&0_]FdH7)h/̄21YoD -Z %|~eNydOpޢW U/7.1WsbY;МE[Κ̙vك#+;~ ʸS2Z93&^CB4ɹDV~2Hb.u2ja bott•ͱ嗋X6T;!$Jp BZ!,Wqx*[nKΰ2Et,mO 0hNQ1:)W5aOH.J:CLA7FcRh`?4!|s~P9ժK@5!id_/. Z^לw˫7VБ2y<6Jmt!EN0j/,QX5$-!JdFQet)Oa01x*_"UE>\uz~.9y~9Rfьp =px6 $]uz= xո||M=5VNƯ\7GckWV:V@7*=FBQh!pt1]#ێ<~1(7v$mƑ3oڵ^g*')G哎,JQPf;K@$b8I"H5fZqkRԆ66vtGRThJ4͠}D;%73]9TÀo@ƾ`O'ͥJl~`a)%y~L*K50ɋ &!M :xe `U|)n9z*87DdT1<8rA7/j7İY7< 7j5p]02/fYӣ|Ʊ̵R,qΊ>$Q~S9u^[YVu&:>OP/a0/\@VprG++*҂sd%*x<&e6eo<gw̧ .xkʁ$š)83Zl]2?U/Y s9Ɩ75lyX5zg1Q+P |!_Ԍq1p3AʄjXkȄ:hQxVYWUgi}{-e Á@=0:~ (׼'Հe_Yek驘<3 tsE&*xɜ[U`Q*%iG=MŘ$။YqtHGIYCfIJGޓ*'#ҷG-H~ =';Ts)CHqJԾ#GA=j,v0[5=yySs` |kpXNȾx ϓϮs$4hVڑȾYk(W M}GވR爪;% ҉of}e!ۀKl1,2?$Ku|IW3Ewo|U0yiя^t.'qk=@bBxhQcGE )]6ZM&s?11T\ގ :$ "g'f)G9M!$u| c ÛF:ƣm@q,Z)ڋND T:Z judki`J1v'/Xo Zt+^)eR ڵǷ ?X4ͫZ3}$[`/ոn%'G5b,: z%{'|UzUOfx4K'=)L/xXZUe9oޡZ+k "k*Q/:x(MU,|u"Q =)|BoW+χɷC5RzR| W DȰQgʫ$@nхn H3 1TF?'0AċIah"Doxi6m/pVmT&F?Xӏ+OWU4xʻ&Ww"KYt_PS@YFhx{Eh e?Q<UyjY7-HƲmn @-G,.mMۗ ʂF^Je\p8'7;7~ݱڨR@A`>&c4hSAkej(KvYDZǷm2w9>߲kjh 1Z؇uenOˣH W Fy\rt)5҆%뉴C z8C(dvؔx'pDDi !SL!^Z}Zkѡ =Ig0ƬO'KI;iړIs9,10f?\oK5󔋊bKkWED0( 不c& K}b>=UVZ#_KF !(~'`Xyh߿UooZh4(TUQӯ\X/PNyZb 3حLfM4$DA QF2v"ʽr]liY Cmˇ20~mPhN(~4 cA4n 1m 0ҋiùUuzxhp[EhgW`vÔ_dJa*='zi|Rrhyh-ĕCYTKhF|JQ4N=T!9rQDŽTA $R B+z.֒ cJ @1HlRC2$gP}>)^"!<+UZRRiFR^f)0|4 LjS8R(ɓ@(' õ^ߊ8eosVP9"}I̍٭;@*Sfps]}/x`>0 f7KǡGJɥ7.#XN_bK ۔`RtͅK{O`Zג3,Aq +HrC@۵K-"BeE8i9OdͰ|4׼\Vg"3" AL ,A%2nEg{5k3d2FKiN&=ov8`5h`e2Xd͠!F%^֟OP;FgȆN oG}!CQIAHoNx4baS7MׅmN+\#ܸmܺgέ= Sŗ7֪LF߽9r]9yQ,1Y31\4vUL&_{eSDtbʆ6q0LF;`0_tfGLN_|x54= ⰌA$Il׷r`ޔP6`H?P_ =YXZ` 6Oi ʃᑽo)n6{H~d\&{>{=f/JON3%.r\i1NUړ]xI,PvqټjE0G2'y!*[-/ Ê3FEJ#"s0J#{GH)Kҙ~lҩ1QN<Z[VO>3}61wgL%pz4 j5 -YB%h! L˶zzrfOZo0f){O jiZKù1{4_Q)Xix]@uaܸ)^Háx5 x$9Iv$\!EvNPdW<&)Ows])^( i<Uk'O*k @<;p}>`pޡ`(.ˡq?"T"A .0 ۾vrΓT g}϶Ia2ykL:ky[@^%Ic[ݱ9޺95&g Y zf8`M:иfjL:WSs'9G̯ORWd#G+2af޺1ZbdAo#a%fcC!Xk`"0ct38tJ < 37aR7&..6߾pN3XR NZDgkTQh֙AwA[!00‚ BsP;RՂZc5z2XKpj$0,SxE}of!X`daЀH_jAbufԂ:BEDRC`Z#ܔj!qIVa RR1 &K=fv^5bmֹuEVKZb҅ˤϤ/X4+.+P:?cz$:Sik-VWtG|_5 E"L'+*4Oc:kyY r3"M( .lr#Nj#V6F#T*qbJsRY_(,j$W3,$> j}h %*ju9uYcdBY$"CZ2//zG@O:L yqjC<`p+<#b 8=~%d!03K/[ <] t 1pXmV,^\5!fV9Kа~ &ME \4,j|.|qމMIzعՆ@aLa`RG01)Pf-ֆ%\nP6Pe ;._%BJ{GeK]{uq\}DS2iYH`a\jgoMO6pV+4N ҌA$?kf=̑ր#Ky}(1W)GN^APf֌R>kqZ4ii/KWGؾ,wH BkiZ؇ +4ju b6VsZbs%ޗO,WLUA=O?' =ZTJ~:[fΝxY[w.Tg[<Ǿ} ^_aYY}sٷ}F1$Dwj [/x MGcʿof^6w+[.E>G# ^Og y{ {,; Ḝ [ADD$mHNHIh4$*'r 3 昈oVm %]_lN3/]#pBp/7~[tQ_Y Ox80>dLO;糕aozjթ|%]GNPv[ ں=9ŝɼ~se$U_5>g_Ta26,E8_=]Wht \uڗw>2Yva!0mi%Rg tP$}w$͊u` FF@8p0r[itr0FSR*Baj5X:B=X>/kY]R:i'}njso[0*[ T_$v3@Kحae`[QR<4Zkp|EtH(g4͇ ~NwklWx82j{\:2yK:Oc)\@ jG1SY}ؖ0(Ok-nԂ=}` ̿ c7>X]eVh8}]uo#WC èV,w('PͥI4Oir j|3.M.BXi 5Ph.SD,4)\QӠʯj/&ԞA%,0HX%%SdHeb8n ͻ0YdĖٳ#7xGU\;eYmX>q@Yx]/z<^aсknobI#|`vL܍֗&e} v<+S0#e J/\rxvBzrX'}6 H31-Vv7S,DR ~eʳܹeG؂da"5=ӱh1v<2>8ci_zc9ٴNY8*&?S;L"|6ing쬰"W7kzsa͔R}*QW wMzkZZ)ۥ5fbɱfGt,ꩽ~`:)˅eo;uіI;4?cI"T%3&w6G+ܚ`%J:c35x.^|Ny羉/?lW|mXU}$ u/ Xx؅JR#LW3uӲf8voJgP&+Ԇ%&/0Nscqь>wa`Y0HogrcGpڂg<=#kkj#z뒍`F:FSXޫth6he8J׫Ur[.=>oEv':3g9$z@XdbEז\_tI_mJE\ E#py`i@=`HtfcĔC!J젴!) d)vp%֛63Ȥ..FlFbaHџQ`= sQ@.@ދ뢋 W5F )}E\^J:^|ErY\`U]IręDv=03 I %yS=\92://[oj D"^artAѲ,\d61F 0lzHZ)--gq4hm6{.%fh@m4P&ĝ6ĮXƌo-'%vZr;sy62&} ƣyJz`KVSj1t<%$(QNBm6h5&[^rN1^h}ބ΂ZN'^GgMo){(P*5x )x8*Xj\u${i>ypҲbO\u)fe&V&lW1}:328_\=M\\uچZc?l[N%Smxد^'㿏? ,o^[ #/Ų9m ΄0!ѥ~50($|A:A.iz_3[F]ڮlHG^ pU;4]5eY6u ,Z2 @,?^ilUBtdU{RK2 4HrFi#'w:U¸!#[ߢB8 d`쟎zH0{JMnv%xPT:RKE i LsLOo10/4-QUcr.y|>{_6 !eEwQ7 << jfXV'6F*K*#F '0AM|Á=*`+ړP1e+ZXB6@!2sI5Ͳ_]H=?z1.:\mRdm}N[xQD b8sny~su :-gz:Īalj{tm4T]u8K87^WIց5em0+ @~)=6Ӂ ZA =T]޾2j]NˆS-CtPtX-VR4FO-%&y*)k/ *lvBQmF+V6"|>>zj6u&D4!A'hx$f&HgÉB^E(jjhQb o6b*-}. =:3Gu== }=u`/u4qm9`v_8޹4|7ꯤp mU{{>Ld&3 B-fǂRT+nIJuq - |7 ٿ>¼w+r=N+>A/Eɻv@jU8;Tg'ȁ (5K~v^爄jph\J??XjzwlX|ލÜzO@;i1O$YtHC1UOk0q}>H}w; 3iܗ~OO\S߆ڥ#3Ϧ~L)$V&_ b}($ά$kR3(8 aPRD8ˤD(O.[9) `0ӎ0H"*@,VMF֏Ĺd'}~$s?}pzXe.6sm3ݜK-)TALӣaYYb,zl:q6 'jGD O  |9|)u_x6(R $2 f-Ul;AUU L*4To{!;pCxYkoJ8 Wk4OVٍoUC.!LPx(G3-~ Ja:MxXI$zɣk@_޹䩍LƱ'7z$8eytjG6y،zV*0 U@'{lx$(L0dSDHIXFb xv0s**VY]$ѣcMX]4ozU?0H=Wi %+*`E#XTUiIQ]|1ܗ:E pcMHoB "_Ƒqk]iӔ>{q| ) ~DSNt;f 5%hC vDK/U1Gy-BUy5y]<"'۽ Md/t\-]9v|-A<]Ivd;?LgW[B9ټ}/iɬvET6\kɋ%.<D_-rXZQ!@INX޽tZ>bhp+wSG;/UûGK: ֮7:KKږ.^Ր9.!OM1ćӇxO_%!fqQ<@Gz_ׁ!g>ڻE–$1=| 99p~ew9PVo˳++ ܢ;ы|OeN {Ik~npl2S5g2ܧG}tR<@1g5Ec:60<`%7|RC$h9!0,x-A2!z KFqE /^b@Ht bi'F~c9gv \j4Xc]zϣ6?s,Qy)k9O!١&@Ω"|m-"Im:jsq4o_9uV&Ma5(>wg̗ \X:XP}D%GEq 遰Tm$yrԖ> JDX"/$Ԭ%/a6qUR& &բQX\K.Rv D8PI2 Q3i@5^vٵ9  V8BӇ%L+y=+Rے@'H華rJLZujTa28x"؅d:N$w /HrD$*#l8*y'h pCu`23Ӭ4Ιe}>.ձ9?e *\8J%`^D:%<[ŮMa WMR2/QJTk{!׺̪J&ٻZ6*S04f6?]FVojԲj]㴅P3oj$,r\{cLx2Ytf,6WrX\f Qw+l;Wʹ6 2uoѧJۇMJ?W4tD(bPE03,yrKZ#WZRUP$#GpYY[gvu-5T7?k}[=uKdȥc?`FCe4dϳpUY TP-l"j 1bre-PJnV( /bo 0Cd;=a!Xp F`VD[TÆaQ]Gk^=~9VK\x^[ݽ]\Gc˔ggݴT=.ZƵegYz%hC3؝QŲѫ[ݻ]5Ǝ5ti>lQ7IěČc&0SDo7m/MT.n胃\?ZTBf^̇-5Vʌ| nYt/THN'A c(M0RGF8%Ed-;Z =;u?9gNӽ-;Su׍)[:0PtNÏTrq5ʢ&4{XV13{~gp߄~ L2~%wyсL$DYyuK°; 2)H<.I%sވb\'a%a3j@} R_ kSF ~Mt%LZvS sbf0;-#L";~Nvq\S3J9 3oN&h?E$~ktu?/_ݍO֜r=|'مv`Onz?]w9Oζ-*ؽ}%Q֕?w5|^A&H$zgq* t`TKFzWu9 _Uץm0r\r\fjL\b~=CԱ4Z|[e{hM.ǡ{Yִgʶ۫ $~M"V6?;Y:%=v?̛t;G_ru  |CnG͑7&<"PD Mcl TL$a2ϤSi;Usj 1aO0}!SBZ-H*|,SF*=˨Dsm|%29x>xۋU1~=৤ />@|܄"bTcB>s| Xٝ=l_׃>Z}7zR_=V9k;X}\=ry&ֈ$ex[=3da "h]za)x'+yb§< lC7@)1 _}PӨGZ5s렼aؘweoV]ZDyp %gw֡#OwLF_2'yܸ6]w0X[,>DO,Dr0'ad|!x\QH{^Km>Rvn63Wþ =ac;0-k} 2~ųsםyl#~1\ ϡ ^>~cB7=7IȠ|cB "_zW0JOPѤ]A:+!]o`K&DA ։Cn;d3:}cR3|,'b0AF<3N͹8z^Yg/~9]m3I*`MGjb'{|<#F>>Hpbɓlb#BIHeS<9r4vesf NRAQar=IT&#咸]7l&mmjd2嘇o/,{Ҟ,>Yp)B}&$/p37i0yy5KUP&m&Ilgi?9Aߏ#@XYQK#"hG P/(bOerL8!hlOn[قtA{c!i0 \!yX9LՃI |;4ՀSt/4Gځji]/d;|ߠ68;}_?ܼg\k7;Vͷ |n;˭^7dyBL2,ǘ!uV8e6ԳNaBΖ*Y.+&B f+`:C C1+ >Z: 3pAN7B_@{]@cOn9+,^ aF1Ә̍nm=FT^%6dQ܌mhݏAoMXN,(Ƴ=k> wZiGp #(D Ĉh^Ē\ 4i;| {L:PJ.S@%3lR%JU@ F#TCP*XdR`?l)drd*U&JىjhI`#d ZY% l0(8R4f4J*S+_h4#P5FtZkh͚?v=HP.SH5f_o9EJW TjyocI+yVz LP2eޒT(A~R}߫rV&Dp!QR{A$ߚL߂2*#\V|Bv! VB"?Tzj ^OݴnW-r/:cO*L3N'TCv+qYǡ:nG_`ѾQ3ꀨq`T= eSRӀ\cg|dk)Yܩ8b^3# >7 $ 7}cu{q{|>Ӌ%T$E?֘ H##;glήT]؎U%Uh,?+P=ݚS63KX'Hd/C6=ں0-R%Eɾgۏ!ϛ`(*ygc#`:@-s0M>$Q $?}d1p|  5MO7{Sh\r?koLt6r‘6G5hI&NVL3`M냩bD#jC"YKVBE3#MΉ)TLqaFmhu3fx9qX}< h0)_jN {hR{&N3]\bi57'N2@XzS1]OG8pOk5 H"zdfQO@&M !@.O0foz*b1 ;+&+R??ELb %_R"`O>)eq.Z J^ͪ7B_J πc$,z_"Z,@s;f;~x5|SkpgA[vecafV^{ۏ|L՗eXfl/b}{=P[z@zB_yߗC@Pzn29{؎KZ/󚄑c.J9R0]Od зьy6ΘvExu+'^xw` Akn@z{4zz(-?o>G=䓓>"FԇYԇ*Z7ҏo*eո_v}<9J6;g4 >|mM+.{8 {f0/MT[1e=X߸wݕDKK,wDmKjs%MSⶦҜuCW={vg@=,w/Xkn[کZ.Z:HLv큈I,jԗyLBP@"XIL&>zC>3N}< f#|jmH#g9tu`Z*;HGTUIі4?+K/^dJN!(r(3 lbfN/9q?PF=h; vL>B2yO`yMMμ6nڿqN=>ODh" 5_ȝlj&Fj‘dҀċz"ԢO}pM:$2J 95ZV  d2 y9;`p{#MC\fvQZE 9N`?DBk+y#Ej#![n^:Õa+%eFpq'x=:2[乍6nպ#+u:ᭋ5͚i0J3hה 3m$f3u> D *ĂQxgb%!j;&ݒc__Ob⣨w+$HZtf! 'Ɯ{>,#u4;JM+u}lZ7LPiGaŽC՟y+][8Pʮ-!ŃyN+uG}W$7)}t'Kh?z嗟T|"dVE{s(YQy򸧤9k!$u@9&Ж=&mb˝oowLIl-obL}%%Jݏf=)p^5YR zp}c.p46ZL b2ˈfcH>1ODPɁLǔ QzD94O&ɇ+Tx$ bOojiF*Ƭ, f- 74lutJv^e*b.N. ֠W E"u5`QKDhX]CfkԼۚ+,nuTGlηX lchu`<="#/w0 x:Lqtsxy_L$@F@NYxj1Dr|KF}(J&jEc^tO`qND\lioq#]֭*vp(o1ЎAk>Y_=dtOO~qrpU )SSwR豕[Kچg̙NlrkJyNֆ,`ȝe1FmF/trF\}pdgB Wt+S8(y9ZeɃ]Y@u՘}j ̄9O!]!w"(At|geP LDF"n#1G!bN]Xl2ScXihU<0xMƆp`n=kMS&S\̒Lוg^!M|mK~;stu|t1lT.v_L܃A}z$(i%!V7X' ["5]P%[D,d?QH1-PK*SC[WDn$,26䗙t&`R|qdB 9߱e#j4Ru4v_QF!,\9~h83xeZsjSQ0Z#J`,3Mn[ٜU2Uo6 /j@8B*bY 󁡏P{x(O8ȑ@gHH A#+tNK)V3lddhؑG(S!*F?CwY|{a]>|(=_" ]yy?'oDá(s8rW&nA6 ][>KU'} \n]"9ƕKy+B$0@(GrjBʿջU20ܸ8N) hJn"IA9*rDx8sڣQ&_g9+PKpm>8ϒl)kJϺpgpB_{mdZΒx!b: Fhbv#à]a#&y\d(Ëוl}4/\ݛ[ &U5Zp(?@Ίk<NJe|՚(?l͛Sv WGDm6|ɜrl6_^j+ ֤ d.N.7'7mך BrR6wD!D9i^jcRjK0rUU&3\\/d=n4v5=9{F8E.Po[`_/nfܸ5A|dC3jĦI~wL9ekV\ʬO1|}zf0vLXZž䋑3{aޅ{fq:Q7nҸnݽ'NHTsl\֜8MvJC&? OwMd6$8{x&htLg'sB|g!=q=n]?́n!Eݪ4?>dyܬ'7V?yh,9*n)Fsư_tܨo rԸK/}d=j$Y \t zd}jZl#]]z# .eO ~Qǔcf`aE3WWBp4#%70M`190.?Ci*Vq]EX4#d,-؟+7Tlw(t CxF`Y)wb3rJ>A&VE\.s&2j zҩ~H&r\.D lr>i|x%2u t;wE hr3a7@2&)tѶmǷEu(8WNbۃQ\ρ`\+nR k.Fcϕ///Kc"Ni^24#"K"ú!Oȧ+'x&*'0G Oѥ2\K&QzQc眅t.}f'Ebx ꫁@Β'hP! 0o]];y8spClD]H:Zx!4W\`;31e@t񘲉SqKx<]O:]pKz7q3;w ?q} wf{GL9d֬!&̄3Z'-%8WQ]:Cޛ@< } 3c@qL0gGKr$38~;Ы@|wYS 3V+3R45%Dw$Q{ ㅈYBAr=< OQOgb,xe(~֧U"ձ-Z J^ke}р]}@|`Rg//+AIY,,cV6C^KMFd@N }UT69[cRM52ydBH %C?&90"931˨94r>«!Y#)I :Ԯ_$ϳ{p0>L_5Q OGcJ7=:p'1HSJg&0,J:N%ۺC*ŔzLLzkD9qP=U&f3*g&KZ1ŌJڂ&A(Žy_Jzu0is c3w[Ft#;l`좉9?g#Mz4'&^hb* IY1BRi#wῒ2s633>%eɞjS8Pt?Dgpzx>Wv`ie\UᲪ} Cm4kZBΫfcu ]_:M&de96qѐ>*Q}ΛW->Qyݵ#v-Bޑ/ز^{ǝCFؓMn]$޵yCױ&|AW{{„}Uz 1I61g#&bMVLT~/N$ q!pl㩅 0ɂ9j&j :Dl^8RUTAC;uC.s݃.`EhLҴxmܢƸ$k?>{ܒl.ve)>BoZ//4%_H^5k:'ke2oFS9##EVf/F]'PNAVB@b8M`]ϸCkuPO1#~b C{LOhY4VJTv+gI{[ H%FJ̎bY$E:TsApDʷ(yn/ v2gFzv%ˋ\U3SCl<@! e:QlL#4~mỳHER9 '`hyըiI.٩pKt_VZL= y|f|; 輥& +L.gfnaƈb/NWa]!M鲛/ai3GQኧ 0|uQh+8B l!IQJ( LI3EHu `Y%>.hwt(bs>_WYWjTrmΝpQ^xpMLe?sdױF&w.N̛Y-c?5> טiTfӕ 5Zۦ_ŗJg(KRlt,q_>\[Z\RĶKQR ^"w.@ZR]ei"6 >˨2·sz"{!>RL2Ye8U}DxxbT0Zm\T ??"wHG3HKKJ랏;q|yy]-;dH#ӛ=^N |\@k<fLG@u]dz/Ɖ240n(z^taJP?W_ˁǭ F|Tx?0C%f-HPkqC#>gH{-n2PN=(zu\ AQ5VM#ݐZR^!P{GY1}@qq\Ht$#BrVf{#­lMK};rv{vvk}چkdUy鐀 #9xܼ:YCj9EOmrav 9e2PN&~T;D+lY=E=eZx$eq2/}W2G u8Jaߘ?zS;GK&1S |w~BO|$ M*kΓWxs GDP|Ky 4 4"afB"@.!l Q쌨 ~SL^[i]&Kq9m4祑<-0ä/k\\x+jں0CJb N1$"063f3hfwqL]̼0uTb-#2rM1"u*K 1 ]?)3JXӛϥzOW@́͢;g蝇>qyY_`_y7ԇ V>)69R*Rd[Ь?(M،coܱ[V]frIJ`uqM% ŭ 6ڝFFrB >m˜# />Քns_51X5me˶_ږ]mXK‘O/2SykX*O':m+!'Hhg$~8a:Ewe,uh{EA,h) 9y,7顅L2**_{ߜR9˟(iΞ{yN>X'WP?8.0.k2g/k`ǬUC![޲쑻ї% eNk[**OФ@ *)t-:5{^{¡3* 1ń@10 _ $^KZ)JSrX S`͝+wݳ@{Nc.@X .ĝ$1d(W,,>~tqAWNc*it:0i)ٲGGes-@1@6 iȰ+?. ;agjBdlذXR< ]+++*VYt]Olqoyg_*!LT#ZzQ!qG9`ไ*O#?|lf{Qta gл|=ۇef[OnqPt`{c43fT\wG³lEFf ?(`3x;(2of-z"sƑ@IX4XuEBi]1..F"L8'& I|iwh3MqΐWT6-UrWʤ8"~XRx8#'tdʌ[7@I~V}Ãzw/wz^/jf۠ [rLy5v5mZMݖU}þSج/)xi8h0v5Ae.ʏBAgSSz?ZGL=h7,aiCFMI5;QK>ٙ8ng@tbK~d ǜxl:PГI$>7̜'W&_Y[6yknW:_-)GUEHz,T yIݖn4oI\<"6|W ?_=򯇺k׬(R„'zRjNV_)UyOf-V*^a_?Mui/tS/jзy[Ecw0'֓B'>"]4^]g(6'q-wm3UTPk>i֗uX ֯DCP4n5Ӊdmmp:6jM LO:Mq: lcu8]ngN Rrr@cŵf$[b14dz<v B4 ?xȟ~7n $a4 ;f+ٞ݅`IlaF33L.a61c&ff/ a02g"1K-5ٴ#!?q^c!,+I!=y'B(->h*sЅ$XS%X` (fr,f֓ fԳ: (.|$b( Xj@)%.eOs_EU==}$d2I$CGHpDpSnPR@AW]pAQBgI@d^zϰS#!QtE:PgqYcb .fm@ nѓ؅ =t+zg%TZZ2B_isc lvt,E#i{F+CN}҇m@'pgNJȞ OfDVo_f6,KQ57 p)CwdF|zL*F#AøTLF4k4a %:fȥa-< 0)ͧOkFHa ] 48 VT} )hU'J޼ c)2Ml4Nf' 0+ sOЗ7/@ҟ<̒s[gDcEy 't 8eg6/A3 w%{C}sن'֊M/)I GFo?lFFNny ǰ _|@ϸ hD0WQrxL?`|Y LP(|Sn=4 ~TۗS7>&Sh1`Lef@eCP=MEiEs E7xI600ى䆍ųdq@=7YaڡkOlN_]k~e^3kc:~Gywǎŭhݻwl weme#Cwf8McshNË14d}zc#f8IBh ȷ!GTOóix?>w7ܷ4{{U;>dF#Q&m[Dj&EA2)aJL Bg&UfY):f3sه1DGD,=A#wʏpBYLu~EAjl0`&[x@m}E,~JZ´_H;[O}hؿr,M*yf,ͬ2znb`\Dg]ŝ"? <.yT4M&a SZs2jV Ӻ = '7D/^7ִ<:͛F~*7-țM4/nzcK's>A,-1=SW%7z0$fK/a-1xx Y=ֲ3x% Ļ[naᖻn-W.斗rBPx,l#M sŭ/攗c>\#>J$tSQ3D/Lu g1c㏏Z,cA@AcZObQFC,rc!"DPUl, 567BdaҀQr#*U ޢJ*R*^PJVAS{vl߿r,;?}3|=]t{mn{z{Iוߐ1c a! Re pUjLKLLs&rR0H'ʛo^YC!1$lW̕,8cO?`ZV9&bM7L('wwl۠# k'=*9a6ݗS{\#kF^oa6w%u0;55 &[[@fȏmns'D IYq׭o]9q zilzE> /vgV#(>?sj?ߐIȓrcRTb,Y V$Hm RxEG/GaL0 E 3QQs#^ʩM 53dEUI^^tëZ:bɊOj,6OnMFIc/k*XXRnkH4C­Wau#EU>45tZySʓ,ZNT%N$qN8?30/A~j vIS'bMz'׊bx#Agb9BKK (M_`xYf6IvguiUę/A7@-eԦ.X_ւ #\$HL3ZFEG:#3Q|hM2C]]JOUe_!<`0ߎ 1՝N\\@ӧ=#ҥ.P1땊n~d=Έ=p_K*qGЖ/wk _y*~?uH=4/ec|M_6{_/OK߾EmTh9#V4t_jKηCkZMk.(ͥ}ބ+Mw3T Sc#TRA+4[v ܨ"}.XĠo4Ӝ#M)${*~7=JA'I66&iO]t`{7GH!DEwRClc_cZ`{cZmpg_v-߼~q'zd[^`ԍ|G6u&`'p޽nMYr DNnn=*zcLaJyؿ@9$-5gBƔkiE"D߉0LS3\t8~gM3'IDRM'^#29(ab F R8F3Ӿ.͋g<8c1Y՛/ #x`~}) &c䭍`ƍh/g-MrN3l(m(c%oL-3{>g #H=^6(NN=P2*22-՘ t!|ۀ[O)7yܞZ϶.N{z7D w=17$یGp&~~[S>8)q[O#P|eq:bt'O[Rlr׊j 11 % 13 qu"6%{ u9-rMhGznfz%oy~oFG%&:K<8msleqIԞf{ФDG_, ݯ~|I{gCKsЩ,)t=]8^!y11|:¯ϫ[qBaס~agKE3c2BnAGD%zvu  _GmtP zdXZ->WjîI@}t?nf[Z'>ѸcF[$@m Y` "- ~AG֥ bN>T^y;1 s~GQ;m/]#vV|qs&w S W_`aga|E^ێ>q8>\l}Y[\ ;"L]<-36#>~Hس'{Jv]U!/+u`*Z G\:+S(FN]~,y 3/&^n ^OTFD!ձ/Ll<4c0a@wPWyA,I ?VY4SF>LbrzV$I^G+J0J~ƺS0܌ *4  0X!fE Bf@sW OW]~\$#4Sn}O\omO^jm-f“m/:[9cZg4g7/6SJ`J|w(a,gOPEBnDWRHElfLQ?)>:m!"ĿEj#R t!hoAab#:Z S8nlۜDky[bLt0@}~WAMkz;t=1[HC\3C")1H$}@0Lsr8.@*#xW}Fk! Hn y9O:B r (DE@0mT\bWlE)uNAI"IrIiמRW0Į<Ĝ_bd#۠7n/1n<~St3P8D, ~}-NG i4z[ ,סz9#)"QT"~юxhY(|,u%: nC$D5:-wEQb Τ(oV2kܸl8Ajp et RI:I)Sl*KӪ7*B& id^UP)h,la$bY |RA~aƪd*r)a=O32!`{YxH^g`ZȒNipZ&U60daMRȥ* IVg㒒DU?g}6udڮl9 I)DK rս ^k"{IcY.#$gA>U)Hi[e|WX&`80rBc- jnv i!$@^RJY]'seRYW_|lSe@04hMT7t.AmFBy6 +u|/a% I}e*;GŅ 47Ym1 5kS%ɘzYj/a^Vbbf>d՛ ̜"23M:T- "#cQYA<0ݽnʆB̆`>.NQQvNw6D};s+]Dw>ٴP@ E]¼Hk`jg ]ާ8V13h7Yt,趶c`|O;=`6GjyW6Tw-"E^N?[(}'o8^ >{HQ )n̦L&b[(OGa>GS)'eVUhW^W"@*4WLP!*&9fW!XH5ӣLIe"z)*fyRR(".=i^F`(?bn<<p5㳶 hC|5#--ݻ-GhPlΘmCC6EM*!Hg7QG~irPmV\J6jN|$#DІy,]"N_xF8bāiaJ8B@B0$<uJ%FwU霱Z:M>ïp?;Yᕸ_FJjĢDlDp#LG׆o*>#HD ϒguKmѦt#"}'iuBbq^+pL{#?Cԍ0QSlaF18xP06!A|M!vZq%Emc&7f3W3#^#N-DR ;+Ӿf*# t>3O1i"vqѵ"qEAjb_:ǵNݩԢYXXf}^oJ,05eUN?39y3sr&?n[5$TWyT6xbwx"w@4\ (BݤXX$H'??Y*%Kk3$-<+ V*6 {l'w`eLjJ Jn5JUږk,޴ N4{6{e@ <ύ菏K= zvh%2_K/328^A?.- l{?>|hڃ߰Xl7^ |~ ef}]TaH6PFI= =N\߬VK;#cU.Qe͎~M*J[muN}Cw0){,N<dG, <3}v7ٽ? 'pw997:|bx{`4zj`Z =-]%ZzݐsCQmA4+˵_/vrS!Z'C(8sTC:-97:0jfzqDO&PgНިsG R[AC 6&=[7=)@8)څфŋ#{([AN/s4УSB^:oIEiI;T$M蝚Sd" .\WEܒD=dٛLDo+* ­Sڦ#@F); ]<04SI1F@[7?j!;wE,Vd< j'nQ**CjB?mq2eۥ5GjKGaC wNRp744}sWNC/' 'p):ɎYH̃LSvr{t׍gdc'+Qt(|TUI%,?E#CS|^UXW 7EqGdkwE;![Y$\喲*޿œc%x; =2CGm^ ZmyQm_E%չ.)|]0 gmK{?o[-~.ycڰ48Xtx+嵅 lRI&0$;+jFtzv˳39NZG-=wn@t?knggߣt{tW \ 1 tEkQ`C#sP誀 ko-$/LE+&\U҄PnuK}E<־)fk6)wcUEn5nk:WqFӜPa*okT%ޮ/,\=aDBc )θ ~ 8YX-$#F痳Kd 3iEŠ-- >(Nr"]&bĆݥ++#GV"dĂ|sPZX1N  7Ưi|2_+z~_6lʹlKJB3SΫwG}`l^¦ L|0n#ےӜ)ꉱ=_Ҷ>D2"r]ڕN@ $GgZgz"?"=hHϚbq}fyE &Lؐ&th sBdYޯH]խ d-Q ҷw՝x0“$Rt}͝B3o0 4֣ ^iDx~j WmUПTMT8 (Դ({1[UrP|(,*#qJ϶,UӇsjA^RuJXF J\fO)uȕ$)R. eLKCnh]<;䍨L&a&nlp>TtF*0J_9Wzp#$/?A8y5kx})hqr`]NlAtj#_o>/+;?k7$AH@޹p!eh/> ˣ(5Z/ =x~wH4 [;ѕMSWW,<w>;  wE`2v) KT@AueE=$i)Q,چ~rg7n|v#Qq\U@a)SG;~J@1E DrƊAM%cst_x/CǏ۸qI陎* f<~(*ёdVN}V#&0jv@"a;摅h 13*@Q$+Ժ~Ə|ީr ˒R{oR`6̥擋l>YsD/_~(xSG~6&҄t>O0nɏfF"?7$7UwSQ,E$Մ \<DSNVTw̶/ЩG6.O9^W O|xlQ[~ BC!4-w@ѿ8:w`09SL"aRC%u{7\T.P/+%f31>~ u(%9 /Z 笠BЧ1>S 8*\ytbK#נ[Oh=!a-yduT ]~t}߬ 6e!2 _tGx lSb', 5A  / Xp9`j[^wP(]($VFJ5D2X]of&TJKdxdδy'웓-;zj涛&)yEurl#@=E/#Ō;K~C^PЫԪo?v|Y0A`.?[Og|Ʒ:~sW@剧IOۯ4ז(?3\RFt<>=rfwWm!ƅ$AK:!@fRMr? tQbNy_: ~~߷qo,ρDx"4sd~GݽOUx'+"]w6~?n_G<f< }'`58bCO'{pֶ5x8_‚g\wgt͞?~s1]KN7#@cN6-% ҄dO=.Q\f&*Aѷgv;Xyv*{lAd"> S(WسJӜ&8OSWe5컱Ϭȃ_WL<@iH|Cݙ!Ra+O}w K03YU!BD]h@NfQtGx`^ FMW,fHh&~'E-DUv bǢ/&]MkHZh$oQRl,*IM5@5Zcw],KxO.>9i׭Ó$rҔLdF.+-K+*6J"%7kںl ]};e=+՞K9sנ3 Ė;8ßrٔjұl cwު J&̞޻y}>Ն&dQi(TԴ{ƨd4c>9P\%X K+x-Ԩy m諳% ^6qjfڥI:mJP58{9'eYɭ3 X;MWܱß2h|5W;|V8'5jUValVqzAΘ'OgRH《6uHR ~ecϔid<<>*=휂Lܐ{,XH?A L(R(Z\CF I~cG_, &Y6jQy9ɹ@cD&^thi͉ +wv\QLKq-zXю:ƄK).̅[,s u4=Va\UOLagN4ح}4ہjB3ѹm,hPV" WDUu6?UcX}=ibx{`΅ WęRNCQ;t/6/$ZǮ_|QngyZwe `DФh+E Fn藁XY`d.6΍f_4yStЩ9vNf&,zK}3xD"&(WHJ~=)'7\tSfLE, <ryԀCTgY}AЬ,$/jxjͳIwwQ.CEP]▮EbꢦQF$;3Z) VLFr@4Qe)NZksFNdIPreoeE0inRod,3~$Ӛ1Ż׹f}$#r\mK/L8ޖCmεDZְ.t0 ? '^ɿ~V/q?F/e:\*lDq\'&N)6dT R|-U˶ *3!wۍR@=cFnhL: p<{l.aNll,LUbgQ#%3X&>3Qvh=ZҔFK]jƪ w8XOxѽG,P+4fޡvYyDn}x~Yn/Eta;<\R  _кBDNwĵsn;F3]޺atR%KS} 'P:j-k8rB)3.Q|zsSۃ /HߠƐ>O-trJbdoOv[e @ #gTJHLx'r]dGN 0 arúf#|! `i{kYU/o͒Ge?_29aH! x9q%1MZUZo$4G@L6ݞqT~;tnv+I!ed/ZJ?(壏@)p .O9 8D*ಀCޢT KJ;LjzRAB(5'ưMJJQ: XJ#E-QS)!{=ÉQgH7c (7?9z//|lC+p,]e%җY}{:2  Ҿm3"#x"8#*"kmuM=['o[1>Aԇr1 2P#f 0N5EsDxpn|d uJƏ:bH"&1mēHddN%]# *OudD*b[b:Qx^ \Q6N +!^N T_fP },1Ar Y3ѕGEnY9|mM ;/?faڦ/۟%- `{ ̴#V'iEi!& y&"qๆ4ܙSLŸ;pXNlv9XGLI,Ľ"ʍB\,Ɂ$B,*s!\1oE Zr;ЧzpJ00D4%8\HlDSFC$?u0JKBT[гxzӂZx "qtT9xQ+{ձD7O-, l}nYP;ƃjt?f>xc`d```ado󕁛.ڭgddq9@5 xc`d``cw?p22ESsxڍTjAytƋ!!J(Yĥ1 %B̪3%.Lꩮ>*Cw5 yT@(&YB p?H߽|ڣ5.{W?M3nj+6ss#ǻ'?;照,0MRsݑ~(].߁bA~_4Hy_zS ;TC.;iL%~W%&cZ W? 'O}w99nojdmp2 6ѲϚkY&ו7Ն+ܥ홨WtN4W]9.@ m厚%Ӧ_l^.-|Cy' O+ȭzs^싮HYVK~ r9r{zπ A+6w/ oqE| 댁ǤŨc&[ J'\]ZZڧ u&i= II99;Pb8me 4R"I*ksTٖ4xZyk+mLfV'=8=>ޔOedmcosddZmQǎ5;,Tu EgfLiaiB6KJrsY <#aCI"v7+n+ cwg9PNW-ګbe\>}<O& %Ba}?z?gPZ )&P>``@IáCCaÈ2xYrQQ@&l+emʚ*lJ]5T孎T?"EctǼZ1D gNW7v2CINNI:x}BtrFـk7ςffm\$$yy}NS(l)%Ui oBkh.b/.Zy_y**Gy I~ɢ 4]6y{F{pUMʯɮ(]nweCx=z7t2 Fwno{X=^-譌[fӠ5. w(wl}}~bQ.n^= |qTy}_iifՃ¡9'ý0؏Z4ǀkeZV Vj3=?#lz|Ǒ9/^q_B^r_Fp#WWQߍcה׃.63>V;һf7tt}ɞIكSSiŴ#c aSxMAɟվLҗ/^xc`d``jgdPg& fB0xڍQ=KA}w( buXX$`pI.$w1bkiim/BXvo\Yv̛7xw5y  ǐqICY~+]c`16@¸zTS6E-b>`×2ʳ)=Qs9UQ:ʩc_Roo_>&,U`dVkM\T^FVd 8,xVBݙQ!j·&vynrMM \'c\r&-zďt~W;x}WGݪ03ӮNQI-if]@Et1]Bet9]AWUt5]Cut=@7Mt3B-ljSdG}C[iH.hLmjnꡩY (bZeZUN#(z4=Kt=Lt'Ew=t/GSz*=NϠgҳz.=O/ҋz)^NWҫz-^Oo7қz+Nwһz/O҇(}>NOҧ,}>O_/҃%2}J_7-6}Kߣ#1~J?/+5~K#L'M3+q \Os+<ó B/KR/+JkZFo[ŷ]6>iͤo⁧f5'9,e[gAFFbkIDDyeh,% s%.nM2LLZD*mF/R;+ATXБDedO22eNpvr~I>δ=qF;tJ[Uٺ<0HTog6t )DۥKK*WKDybׄCIQ%BfF^JnLDomeSfʳv<äcr 1׆$ h͊[+|8{rjdž:$%(-sQs$>e9 0wݎx &iHo#Ql!2ת65r#::n [c:F(&v5p۝$t7Z&Ph tlN-w.$@ s0D2iTD,InwpMBڰor|m:yat~vtaj$M'ψ$'WU[ӔdrRTHā}]_UAV`Yfzǝ]ġ6Vܸ7pڎ#pIw7JbSV3Mvv[W&OcbW"j қ/ycIأBO޴@]  c>A"T*Zz,5kBW״+,\o9,5 <66rK8\%yqn1yTBO²kr(#Wa j-7ΒQKqڞp˟ hT璳&G_}tK9ř%y˫4ٓ,Ϧ-hy誢WbEm¦y =M54j Pf3ת'6*z:Y hX((Q0_ZhBb =UW \*pUXj@ԀQ˶9pBV'#eKnYme5&c:Vc:V'gsj4@ HU    +@VCK@ 2 ,Ӱ0 4Xb]ԡ:tQ.E/ DQoѬzՄFX -bEE EFahXD/ bBsiHBCА$4$HT4Ġ! 1hAC b4Ġ! 1h/]D h@׀Qנ^z 5נ^ׁ@w 5x]w 5x]w 5x]wmaҵޫ B t @kAkAkAk@ hDH^aVZp@Ńj (d= Z-o [-o [jZ<VO)goconvey-1.6.1/web/client/resources/fonts/FontAwesome/fontawesome-webfont.woff2000066400000000000000000002021001266412531300277310ustar00rootroot00000000000000wOF2@*?FFTM `r 56$   ?webf[@֌nC˜tTLɡftȰq5?=ilґ\vl Tb 1fú7TQ D;:Ю1l׾jvenEߠk5>d7QlBa ux].WC$8v#y`F1aM8諠w=|'є0T|2/M%b tY$!ʐ5cb̚( &-A/mY /yo\Z= 5ck_n3㌾(WɃNag+O樴R'5=?mΩL :ދ*_Vz+zc1`Q#j/Z0-FibF"2ipÀF(2b~H]J]jݹFf-~ @ggB-Tx%pUume ';@7 t=pN/_U8 rsX=gׯHjcَܟdד_1l:1iITr>v{GbضT1*f-x-i{1h>(33!$:j~:ugv%ѽꄻ? d5+fUzҍXXOo | s&$y'x[`2(E_kbbp716;~vo[byݷKrfMB*Mۧm @ 3`,OmrFa0-P6Kt}>O`jT(aP GװSz=naY-fѠTWUV?](k=GƦW_e[K?j@eUw uNS3@}3AX?dz8iC/ɛJKE'&]=z_z;&K R∏Wk49 eb,g8{o>db7l1j|ʘUo#[U {37**Ef[D4GjAѢ ':ԅ8`WFckO.:q PiO,Vӫݽx3Kn5JjL {{^fy]O^AFі C0}XHny4tJc&&{ZsF|rXF5˺Pf5_jZkn( Qs<E':"`LG9kjSC6Aݢ1 &/ &c|n<؈>o^ ޮ)t8%iꪮ6̕4h\T˒)`$w_QK{x 0#́,]֭en%3jF* _|q2a#b{9vz2?.EX5x]U =ьnqlԔP!8` Z<. r+&ۇ:dOx1;! 0E[r'b>M1A;E5N6T!dHj9Mo2;Lڰ_"D<k<*-k"Z }m9(.{y̎2΂- R%hM%K3 hC>iV' ƫb':U됏T$aՠtZ,XW%7m]<t18fGHmeYI So[rYڌ\Ad)1ېOJoͺcQh!Si= -(LzKDC:Mc$“q־hW>KA@QEDtuqW|0QT"W|(aWm j 1!2H':I_f,CbjA\ΈLᔯ1 )Ha =N(U;qlqђd;h3`gkz"%(8XXЌJk_wo]Ӟ J8a46&033=9)v̞&JPVˢ0\q$HY1i9/i}4,rpջrWubiܝF# ]ڱ)b/5LN#'Ognx(aӑ%ct{&\`NQmЮTɽ}Hyɑ\._-kst*5$x)M/熡T=bq{:YDbBNfJ*9VDl0K LtNDy)M|nK<,*7+Iۚ٫ xA'zңc4EsRakszb)=m՜Ħ2ԃ~An4X;-Fpjd0M"M;p 0p/9iĠ|N:Ĺ EH=H}Ll@cOF =wAHKXE> b4a گs+BoӢwN޲ZCu^9|Bf6yN%.=3K$@媶$THMċ-EonW$F=fKQW(_|bA-qZ&猐[@EjC &>`Y:3JD8+g*ٕޤh2IY߽ ,&ʕ/xӫu b? F_)fGB ) i[yT6nbUO7l?bx5Rk/`C*g_N9 j=4ACCcs4No G2*8rJiOV?uVNoPCߗlIDֳt׹YZS5(F]y\._<.`9sJ]JOyQ WV2yy K}C^u0> E/{>W60@[`^ل S^G-u樱ycsiKnfl-4>wlKx-y f5,fTFd.fIjveY6J.is oUɾb)DO,|\)] xv:wƟaw cŢ0Bf}vp-Y"#1 2mU@Ε;T.yo]۔' mDZyaN;5H@VE>kv=nݠՅR~. .{>,G&^!>ӮK)\'K54-F{g:ABP*)Inj )H!E .#CncV>AU]=ZE߃aہf͓qzblj5;{|:͏|5mF% r HzX0Qh#πj5TxDDp^FOvRֆǟi!4&[~{"2+>U] ZuI4 qKt1rYxiMWt9ZVNo_~wР}^Pr:c^JqoKf=Y sr8(k'>Ձ :1ڠD:&vbyG(\컖Y8 &O裨4>;O]"x 6.B2FM8` ,lT!T9MUh!FAGuBc^/Ӧ*ijSN* @8\svq*1,9jD!nO_s=9w9&a>;g4)GRjM)V>5j wvz J*N=M)RQN2Dy}[ ՎN0A{cU@ˆULU$ȼ[+[ӤmՓ4:u2{wM${-Fzj&Mpםg q#"Z,ѣ2,CG]۫pkߩ< Wc~0VZRJ\W -JnC$ ~[\ˬɬrgz Stq|_ĨzR0gPzV-bU%;Lr@MuKR;2lFo׈^U7ϝ:5rJ|!!Mf0Ce7 {U!s ݩB  ~"B1q*Nj+7^7^&DCϞ>pB[i[IJ{pU[/T%po6Z#j'l2F ;xE}owsH%mOM%xB WbҸj0L@:I9pt ]xUT*g -r1[P|:$Go<65!#@` 'RîFӗm mӀߓ\ :Ȣxap(3ک4j(n{uY|bt)&8sU-?*l[G/Uqa ]A{ ,%7yz'Eo] 3El *k/^D/kuC *`NǓfvL퍝#_fFƳ.Fs]59V64601npX^ 2cDf g7øtp`HAkSb:T>3'յDsY]KIZ9vqKO+Iܿ\c1;i}ѥ!{lZ VZc *p22y@ %}_Z:oo&8CWFcqll1Pb6Kʷ#J`s$`.0(`nAi`>bC4d9AnCZFBW+vݻI* ܶ~O3>g.IT4 3*9K`"I};Ѹ0:qAmj U+OU:d3v-Ggšv&G7E,t'KJ(@[.1jh.'TjJh clt\[-le3`-cQŭ&QG' ,xjw1xo{2|I+ O~'3꽙G<]B65@Bz]2"_1*?91Rʄ"|rrIO5B/b}A ~S<}6/~Rdf6LIk)6gGӋ:\6u!=/02J"GxZ:Smy3R2ˑYdf_j7*i!E4ǥ?ԍD<! ]IZ&mO%v~\Mћg/SC(JLYŃoC:VǓA1yхgӮHx𢺥Z{ 6N\_V}y*]m/[h{EhwapЊW]7 2WxL"'jU$U~q9_.j dp ?T8 u*-/)HlYsluƱOZQ,p*e̙EZx,&8%Kcnjdwes?vs{-.A.w<!!X:U9~*x *TpO\G?^`<'߿*T!D{@اs$K(U,1jPL!- Ho%5çanоWwpحkd _yxhAMb M] ;Tn|D}Kqb:'A QrC&?ݬLC$|ƊLNieqƆpLQg;Nf^RUbz^>ždr,/vKO#V^bGqM^;v +5^5 S++f\߸ 7(x=ȵ!i*Tl +(@ӄX*2Bh*& ,vH/ P UQ pyn&VE=_Ya^Yj+J5u@>37W3%u9_3e<)0x6Fz UEXucxMi bo `لp UGj K嘢_-; Eb 8[t?lϙ;JRP ,z - 43œ=}l,u&P;,ɶG42h9ri l#36վ"K !N#gmRyw3wU v#B\^  ω`BU"^&f[qn4xso/FR^9P͐ 2A|mݥ|UϠi͏X^ʹq֓J˲~n&ki `;c@bJb2! ͅ M vQEs$9dzr{U942Iע 4( NDE"ԭl|-klWJ2C~it"#juGo跠|D<<?`FړU1CHY1F:S҉gȂ. 0؊|:DaN nLy⿛ޗNlڔ,KA0c)[RTIF|*$ '[IODf\~!"qݧ3k/JX0_!v |eZطe̕(2[yQh䀟NsLn+E.|,l##‚?cW)@) 9u{D_pnZzF7:`={u'uoZ?iЛy1cE6=(All{9}Nq jԉetJ3%N'+@wos-aeEn1B B'#<|W-6!~yx{iWiYNvM`/ =wrʢW~+cHžYM0w8)>{^?2hV0 =h w\y+r(je+Ȉ? 1@.\Q:"s?mCTaDUC KNjzOtq{Fa&)e07Rq&z]Rowht-u.ڷÔԴc$'$AQ7r7&gqcg/Z~o`6|.;mAr4T%5ڈ!h( ˤJL{5On#j4P nL|*IJ7ntH¸0`63QM`xb"NdqF?z4ҠcIu/dj!#`Ѕ=tßƵ8o<!TkWL$̇獐ίp5, wsi^qKPষɴ`hH si%}@NWtrƁCޏڨPP.A҇9;piZ]˨˛)뮜yFJJ-/)`/L~-Bt'Zgf:JMc{fș=T8=un'wنRix+hT6!eIa6Np? һK |NiͶ>A\}*n̨7,M%j\cǨ~U;<*+3:r Rz0; I`k~p!;^C*{LuG0zy K9bLXwm %V vB$yu|v$djgħ3gu 32rc[H 9A`po6%oZwCA߯Ib4gh7bo̧H7aI(E>742hRkyB Wi& Gx"a&NTPy@}j&Qt&SWQrI<9v1lY`)lĻ,,p7oc WWXg.05s5OӔ|JJYz'PE3Ut iuW569^#dZ&c/81>yaO虎kQeR`ӡ3QE,H=hGzX43UC|zRCth#l0Ra&b[{NItzvmˈ Pj1s &y~iwń59OjtDo;;j^mB75૴tsE9_ާXJCpM‡@eU7uyQ9@lOZEL|+,b&Ѣ vDy8܋;JБHA=^PO&@6,6s<. ߙ3F[P,B!G5R^5-ҾswR24!g֦vkіs{)whT0;j,RA}Srg,&Ζ(Z< #+ff52<|yuV+(KG@Ap!DgهI 'Zݦ+<i iyMUpbA:j`3vq?Ӆ"3 {4! D#qZ]Goy j)՘$li_>WGVa7<" ˲w|R o})h2۰JX-7GImJ;_۸h/$-{7mYufލ:HIbItxg/;%mpj%9b; xR 6GͶ! Đ~ΈHHcp~6rc=ԛlM jjS+-<#vf=**Nf["$a`K2RM{7܁4asp✅0n0FxLw[ 7&ߧ]|k NPx^,z,&XH8⎮#rj5?s)jiԑ$JP(uE0;9t-Y\nE4gGaxJ ]$9}#-U(.:➱:rrҠ!ItDWW*վZ /Q%&"4Α[e1uzo *$jB3sA0̔sƠ}& KI `Uzg"M=cT|-11k3Go冫*r{;CPhjNq=5Jhku1ٻr|vRqPƳ"|$Bt9nl{B_c;K _c&.t㛼xZiD*?rqy}WE.]1Ή^jh#1v30jHU nL V/ -r>eFHSRR}h'#lI\2W½_3W;F| m%vb\OqPoJ@h+%:#O;TTa*1761Ƅ,3v"Pǥ J!CC{5>cJFQ`@j8ۂd0m̟SRl(F \XO#cM֣Oc07Fʹ '=N IN;Tvx=|%A|NMHCQjR5n)StJpY:0>ϲEOnn|ȆƓo$ #!%.1D_YjXݷB=NsI+Q#Xtݰ BPv+3 & }Y6euzc?ejjb9ZsTb] bMI!1|M.Zdah2rG oJjzQ5=b%d4I<:SN#ǫ @4'0K"Ƹmt&dO9mΌ&u437;]?-H"*O1%43& Rr#]ddY/C/#o=EO|Crxצ +ZxXM bɅW9GݙPw ,Ox pcm.dH,T$Sa-t>K ~LiLvسx&&uYTyJ0R!0j{:$k(x{И48F#{qZYc0XCC:T`J EI#*Zl3ߟ$ɻO4Vq`AG7kuDWFnUuU"9S0&e#672OvZKF4Pmh^g];q߇:O7mYW\b1XH_ҭ7|&Fn.a,_6(j=p-jE ȸ^#qs<40."jǓ*g֣B+x޼?w&Z<=w5B9MOghׅ6_'^l _5mJ讼wP4 .]5BX jGvgѝed:O]Q`S9uNg>hb (ZVRjۡF[Z&H01`빬oE4OeE W#hE5NwCxwX^Z@z] Ͱ MvN?ӻ6!z0R:`݇p0v)VwdKxN:T4c~-٤ZJCyoT p: A]D$x"lŜ I_v&# Ֆo-'fG'*EvKܣو!ל{E G2ÊUtb-ܖ:6ӧN;bٟLm϶NV LZOGSy, ,b!Rkؗ_vD C+Kͨ(2a^/odnzN{L@ s-8?[hmIUC8V7CT gnRqjB ?iZb(؜D>c .mrk#hxASt;vs N<)ʁtb>ImNKTTŞ^V?_-Nw6ϔh㦤X,`$$n)]kpkR玟-ϒC:( 3mmhGڱA K۔6:GܖL m#Mi9r/E8Y3H?"sSGuTs=i*uۏmվQ̡7Sfpf#3CG_3&?aZF sⅰ^;ڒ\5Wj,pG :_^lsKgΎcqfc;Qc|3cWqh`Ǣ; *LETpwxXItZTp*PcЗs-uݥzjAՁm{P/sܸ?2L>2M&Q՘-Csh%%[od{+Z͠n8k'T;)v?.AC~.hu͜@X0  1;XY7Дhӎ%WF] D?=(;^F^ɡ)#j˯ "h &e>^E^^Ʋc(@<^4瞁$h">s\:$j+e1 ~< Z+';q҆tIn7ed ׇ ++bMMKe_ 7AJԨX>/?KZBH2kI$7wqoȭzn,N;L>euzJKۨ|77 ;I9۟${k:ٍsKZ6"O|ۄ- 8wr!0XŮh7t64vW u߼L;M)U~ZjDsYs!cw_};Q2뫮Bp bBQ*rEB!P`t>ߣ{`MW|&'f_W  .̭lT6͐jTK.#n2!+yww 眰eĩ׍Wa;Cp9TF 6 j*3ks[O|ixn|k* k/PU mȘqGs^g0L<Җ|42:c;}8RDKl+.G#񭬇O\ق`䝙<3NHM! z؍||Sh١ =P g&[+n- bmк@njư }RS5baA^ӐKFq?" q^7NXfRY[9m|Kso%R?8PZ)L&?Mu*k\F )Ļ>5 `{q4&dp ʆX&Sϩ{)_/r Z?O@C}Xx6dN6h޽m++P;[Q~$xiER!TB2j.rMVm,e]2X^[skp^75A&"LwMI1ǻCpAح%Ʃa]S&0s9Bs2f_t٩vEY{DY[Pe:Yr'~7躺S%xrɍıZG!1K.QsmtmskuӍ0At?~ߡBۙ,EqS5\=$dj ;ʒj[ Qg- {ʗ<2fDTpVǨk?t53\^6k=(`z*WY@e[q‡%΀HHuGwJ([_;@A]{/kI_KmsAk+bM{;ηla -||lhNeNL^tGTu|7B"*<Ũ2"6@spsS| 5R%J[{  [ݫ"էZB»?G_mU< s (K&ޡ юD vީU{ nZfLbAm&t E[W~bRQM˳I1[W)`->[DJŵ)9Mea]ݙzv\JVuȐppع\Rו@콅 9~?@Ν ?h&žy|,\Q”;VIY;yj<>el!Nv‡tj3 +(ךR(TIuG(@H#J/K!? V,Sh8*M&mҤEL9d>z`'O!.B!]SHp<)؍?,jӯ'wT_]Wh,Cl@7l OD&'H>*e) 3OK0Ty4 U@xSd0=B@YXe^>qg|]<6#,4-L6 5͵*C.T|/A_!sϒxgYNcx'7\.͠/p8NhcWG/O |% Bpg^`SE?e\`܅8cz? )Y\Hf"o@OjWgݧz#܌xMe i /YseU{`V\Ju=xz%67|ˆ 3{uCaf$X{a~ KU️Q _=cOb.=Opw2eFmhPwF!lmn ȱ}}T-텆1?Yٞ: 4QPst>I46g4SL{qe خUPUbL.:6G0mz+cFz{4f$vB!G>G囪sk eҦ@4#"?X,PeN }ROj·.ar%/:"Q:U35Pvët#>y{(ad)p"#IM .i\JrwVY*Y0ǃhj!ADm. _搻";ד(ˌQ"-nAgQ0w&Y:GMȲjpxUC A?OMyi8H1, *\mMaD|VcuSCWv1BV.: N3=16bRs[綬;i*1VQ pVнCJ>CnJ;ه҄~^TXP2R&{*U0T0?嫑#T ޲8y>,!p"wFflFf=jų֘DwFKCNt\[hKaؽ0FUxDGaAs.O<^9Iį6 \4;daH.dt%D86,S7_EdžHҾ7N7QKoBJFflJr vh4g(ƚYWG-&x vLOJ*!MӃ0Q8ZD'gVxx@GxBCU, +rKD)޹ퟩl:dWymκ;t`[!8AoY Z%92q x洇VS, ~Q &J uwN f!7R ngRjl+/^o_|[*M-K+r~|w:QˋJgn"$S鸛!TͰ;F`vݤm.!E&;Q4r *k!&D(?'jd <َW~ჺYņ,{OX7:*~URpNB̉>1ښE3rKߟyqpbtag=),o85ftzeVAB-05m38yC^`:ЕcCm)et5 5)xѤq ăi}7tBt97~>T-ϽXQJ܎7MZL5i5ŨrMgvxUVr|frh*ݖ'T":i#_dynjH O7yK aLqb^˲#L6Wɠ/o dzm凵TFV?L^(OD;WR^i|ʼj|xJL>zI¸xnkIgCe1S)ޫq &340Lh2A_o39b$~rQ*)(wkAS]@YJ :y[Wk{q:`9e Fj>;:Q_p_4B@\ K @P`hJmVPV2ghde[4 hW] KQ2&#ηV\ uh\Kͳ'ML/s)XyEUdv[Ѱe%.*]? 3x-|2SGp)*$+-NBs'-}~c4XK$I z>J@7qߒ<C1pmɳU1<P2$zkD-Nݭ3QS [7ӑ+=uH4'ߢqbצu ;)G)@}t= O,ox7!LtX ?sjp2o*VpڀtM6 ހUET-^ǁ^ U۰J7ꊼaǕB}J]p墀!e%;CDP>;g/goJ FF W5/탳g/;=APD!O]tTn7ODgy(&:POil8owLWXA?nNe{m4C\^Xb6T˓b4&tx8Ș=ҭҚ!lby,81Objw s _ yP8F(K>D`6f &v6: W!-+zlSbu3m;?E1cĖ}T&}&O0MgX6?:BY ΞE!o1.%RIoBu$[ZƳ- 0 UTi}1ݯO4sJ&/U/&jgZVh.#.H&kJ%e\){}d4kb\C(lzb_q?X;UY*,q+6~!.b"B][2u]2Op-sW83#2,>cƂL-=r-?gٕ9poX1sqfΧR*+?%4>VP$?{RlQPF",`?9 "oODJ` BO${QK~J%YVrTdL 4d,}\şP{ O$d,~־eXz!;cm顢`0 -$XKK1sиx<"5fRY $STcJÔ+uM1ś:o?۠REH3V=L(שX-8tϢ S%e72up(֚V2>uwO9}CyE핻!LJT6v&rAJ Lv4{zǰ޸O99n&<~ϑ'NB%摂kUק̤mu֘/BcTSjA!B-Ot&ՅTAkr,Qcyd!:p@xf8?WpsN66g`x [za{kz⪔ZVSz֮)*O 2+ W0hzH}X߉}#yx#SN -)Pm+7S_[}NFdòP]Ḱ^vu$ejz ۩.M>vz7`]Mݖ)-:~n?øl/yWUӒ }܍Οc]w%Qr)u vܫXq_vַ(+WڛUG]EJlʩk+'Ό3|,'f/^\̽Ŕ)j19k`Pid=~+ p[dQu!:}FGk`;>=vJmDvT~Z7\Jk+pf;ZAxYF\B VԲf`לtІQ>迃k5XV<\{ApWwrx#9Τ ;%)`ߨmO'^`fc,:@UJd VxV(V54$ X.㞚49Q#{-Ck, LRRѹ9d!Yo2xk݇&'q"}H#XJ  r=J2 -2/?d̙b]A۱5{p8>~golu`ӹuoMF073G J mqY0V@ܳv<9u@Xii,,bB54\IҸcdzXw?ɷV"4łXGrVW O#L-Υ =[o ?+(tJ~ޏ=LmKKVU0J'M6@/ _iee2ݥ6ax+nA^Yvj z H&#.Y*d :KuSuh5?,F0Ftֲ Ia>1[*F #S=q xΝ9B.@/#~G@ MF, *#ԯo _(mpxS":lei`^0 4> ܁ys>I-dCD.] 6aG1Jf55#լeg6.g#0ŕ=0p70FO_[^DT マL"DdNr.bxY˜z8JyJk{ǼۼtX^͝\Az̮Nր}ot7d5knh qcG aWdk4d&pi._[6YMȰas+`>d<e>d9rP{w;lȢLmW/B*+Z2:ЁkWK`;]/㤖$}~u1{T jM7{U%Ġ l|[v*kѽCRkÖ[Hr :,PqEC Mғvj[n˨p/SIlfGb!_tHbNQb$dӌ }R1K8pK.i zj#'Y$W{rzW'[$_§uciWF! wsxJY{QS]ˆc\x 3UlH9.g3Թ+{洐k-8x6іdZE<"J(r[rfѩ47r+; Hy0Jy G[b!98V8i6nM3;/,kG?Q[r\N(xWc)0%ِkjsrÌ4p ,:B/cMF :[Z z6>~oAa]B\x 4bG"tIФ7F4Kve"$\ I|'+S[^ 1?*N{xr]sH` ,cPJ_`dl2 Mօ- Q0zP0HZE\>5.r;4=P) }cL( &z;'{ BNg|X(iw`8}393:'5E^=:̵:ؙ<~DPqh8fMA7h֘;@: 0qY nnPᛢ`7ʝNfH!i F%dp82Ad4jLD(`5h5̻Ҥ].)NsyZtr@ [F0 DH" 0=q ѐb8H(R+W˿xn Π^1,b"U7l`dfLʌlȥԴWߏ ^"&6^5 iv:]A'-wtӢXO(>s~VߧMd2_ϭ韬P3= NdCN`2{PTjMjl_{(P{^`|A[ǝ([1f,B e E}-ɉh^vK#z+Qk)E5Ff[~PjcW@2H$FϷ%}G 1#LU yP롢.oW̕!p֬ތ 26.kNNƼWK_WwV&n1ZzpG^؅{H-'C|is\|:uG]P-nN,ݚسMj?HHH7feE V*u :.BS{vg%A਌7>9"EiIބV,?MJ"qXbo?Pz$$"G7n~lFˆJA{guՇinݵ#.X2$v&Ip'+ȱh8Evj5#Bh[RZO] f~q::4yP:&'jf|tAO|+d-i≮75 !bg אidrA5 ~JEF'ːWV)R;"S3g?QjDkF|v\ɖOf."h:yo.>sbqM$t\J6jg 7Go1d 9)lekVq6y.9L#=>{n .?Ɨeg/P00r^/ţ% ߪZ3M4%WJӿ>'+N(A\h*r6@ljD}t"$Hr|뜦ei^'P4 888IlkX$䲸wN3Y\m:m,`RԺ%˯]%WW#J|&)ZgxaU]0UD>o5HD2eE2Q$'+5z寁\$ȝΐ"(ӓE8{zX ko?o=g"H'SW ,7 =8mB-DDn ;7?~*__?`p[[󠼭nƴBqWrmN8YiL_W 8mÜT?wE"tFqv:ǹ$9}HUփ:GCBݖfTT6~3> Exc1v x}F0Y2ic5C,2i-6ؒ5T=rrpƵe$׫id_HkhQlnôdk( i 6FғɊLIA"&bcZt$3xL#Y+}mvϺMݡF3]F8se&6pW ,f$g \R֦9 єFD$nlT`01!1x(vHrtEj\,xZHGϊń>XPo::䂂-ckffjJ;SXmgN0I;p >j]TŊfqFC+|ǝ%}{9@GF!9 h+`:6>w4z1W?~a`5T™B8G-2w:v18ܙux@G o3˛ T>5vFPVOꭋgsz߄;;ɹxVo0>﷪ӉMq+~mP0vTwW!xA c%0iR%Йq)% cR;ɤL; @QP!2eq 7Z<s2fQ6x_iU>>SZ"e3.05e/$yS NJ}ۄ):c`01$N8f[>鬳:aٸq@xl6(3eAڙVL2ȼsqSr%l5`a`$+S* y:O$&H`4QQ V*U13SlYE1sxdf})AAbpځ >X Fne۷Gߊw][^ywE ëps (5tpL'9~*A:Cݖ Y4/'v \ѩ ^Ǐ(͛,.LO%[fd(G??<6J&IL fiw _SF5- XF&9͍ʓX Fgs-O&۪sl 7GQxlr`sTp5j:-E.2N\RaG0Hjn[N3"VG0XU:ߝ^CsRy]d WGW$$ӆI`g\l#~^@7V]ۿ_= Sx(}c<ڐdozqnkRlMJhH tϗE(2Tq5,rjd$R[UX^+󶠵N,3O)j$_)ڙD={Ҕ=+\ ՈYPVKYKunݝq|2fiG_W\,xM$ 毹.qѽ;VJ=NB d8YVM*iaJjt/w|dR^ۃ]])`yX4vM]Jx[8^Ebֳrӝ+ٔDJ} f#|5x- /dJ0Pce\Vif `G0DDutd]}-gvFnUO/]WSHVE҅dn1}R$. _%"C*$ɤ(Q->Q;wsi|oGu[G rihddO|25 Xk__?3mDVDz{2b✒=KO&Z_¯1y^a:%)͌Xe@e{K rO;v>++iş&, qx)ae\hJ{p0-xH~ETb?>.y{oXC4L&8Go&7dX[s>43\ :+7ehV:\@]%K\@ N] qsOߧjB1ޕ:dd1.R2׮ 0B994]2l]f`ق+*{0B_ 2Ď"B.w<*^ _q}+]wvS"Wy/! V!pGt,CT;|aSǙ3}""ة]ëu<ˮh"kdvc$Ïd*yhWi?nq&I԰H%0|J|˳UA^ULvaqqaX}$0&&"Nפ֒!n/?#m. ۫;E$ԜOFEݽ7:zaD\CζRv"oiy`>o<わd>oץ反7̄Őf@2+` ].XHl??qi^I q{ڎ:w.X9πHg{JiP K@5~qkY)̈́skHzd |w4S8[]^|u\pf ?H?2˿dp/?*z5:zbPD_➫?ws&tf;\?pBQ[}kñjswѰQa=`z/HDPcXv%d3nJOʀɳ DԖ?+*op_oE$Di߅ϭ]@nɗ墺g5*C9xaMBg8 8=p@BBp ž8%)m^Vo9fAv/fR\i=]i|.rY  b&nN(X[3c̝E: R+nOՆ %%A/w-)(H;I!lՒΘ6'QN?tYi_vmUG}U4 S^.֎p?c;a L(*g@\>w?\*zeJC#V(f-Q^> w*H =GM@H \37d0L\<? "p{i^d' x4eTp Yd !6թ㻨I`y*Ҁ(9!ylL%M*dxؠzVJKm$N%FD54\gJAMP~ǢZ,pV! gZuF NKuPNc2]*I GMu|uSn:?ix͈GcM.uҔU_}=ހ|SO:lY%!89ifͽ <ʡԃ??KިJBrO]K)JfEIug|,]Q?tW-Poje!2!@;2bDd  !#bϫ~>To-=?)22'dN}DZ'rqc3 ^k!QP,ݽ}rn<Eͽ P=kbJҎ-Hqe-I`ո֨ɫ)Dys}*t Lʹcg2Ɲ2w7ʩoΞ^e]2ObWʯҡANwmH'LE2͛#q3P+hVVSGPp[ $~nڢrZ%$%r 4++AyHC٦04 ͩ;ud=S3.!qwfV.EV`<:IfT!ۮJ+}ԪZe_/RD)=*qcɡb5P}Ry*f2)0Sl`~E!N!ޓgB\{fM):qlg@fv̀ISg&рtU ׹| Ev={ĞaaUJyևh%`WmTՙ;lPZqө奩i&E$z2-=&*`p ?2ҷ 'gl+%LN O&rҲ2i 'S4G0Lӿ wj7ӳl@:z4:2Dߺ2RR&wJXUvƛ|OZRƝxi76T\")`2LBl|Y0,O@DtbzGƘ*{˘LFWnqL)ʖJ8jz.8cՙni tT0~'vK&[]Z|(SۚJ3qQ,n&:,Cr'$חCY!B&>1Pr~eb}X|C} ]dF=a|ʅۅe}'N,XD % Ē-IN^Жhw;)/ަl7 C`c 3"YNfә yܢa$'G]K?]ѵEMΐ0D\`_DYU&GZTn>c*nԝAk}rp&]YoH\Y]qzMD5sNNCgf_&T:Uq1g xdJHQpP _]?Ѕå/,jY%"h!ralBE8,KxZ[.J"[%ffc՗7?ҤH^΋e`L_z{|L랮'ND{j!/ 5[\Do ?g*D[=^n=&(;FTʉe!0|Mstǖ] eN~4/ hZQݓݱo(SIiWRm1a8z=;sd3w4=KK^m^E4mfŗ*(\6ʴҷbAjP4\ "F#'"xB1{_jwe 29]5p-ri0QF| ̮MC˰ pύ^Un2Y%.aHp `ʋ{Yr"X4m| ʩgL̦{]պUf9rBЧd4 y;6lI쳡m/H0]8cs0uVFn3eݐn]$ S]*x#zhB?DͰEN 8 1=Bb&ipI!TVŹǙx]X1aya塑ڜ {JCgt2]h 24a܄6Pظ4lL.kUWzdֳ> Eupfyb4 gc6sEݕ a)S'1jt )MfcdkJ8q8/Z\k# /\I%,\p?Y&;5 vFO;R[n1|kDAnjt󞂹QYW0a9x=G-1oSE_r c@ ųN )f;bی0U!hgf)za@d 8d[Clil!(ߢc6Km6PnOv7ȡ`'c!^NUBeհ^Zr&iv87 ؆5tG,]ۀ kOjVKBdust--Tr;+!d8`u R-qO5NNEԒhX0N(@$nT͵{nL #ԭscfqɰ0D!^mSuAԎHc d& `I q Z + /^MrLxq .otI%WРRNH|-E$A{ ՛wf[I~N[ݶi䧊6] O 6擺Z[RkKR[Zn-rM9RazG*yؚ0dCSᕪҀ ah~2Dkb+A2![ƞlY638ޣk-*Ѡg;ZK80oz68Gu i1jnJgx~& _ع(IfȆ[GZ$3хkeQ99IsT-)Is ( Q)k˂/> SP߇У89l3(Nk|>ާםj imUlG./?nha{|Fe{؇>m㞷M?\i^I`ndNܠcя`17omm6ӟgƒ# A6|}X_ Ƌ{Gj7 SE3}wݔ{ %&)`XHпM%~Z70b? hp+ՔS/տS28b_*FOT,6aHlN&!3fFT[NWOղ;ծp."-0IE/IvJ*iq@Z)RP%iRj}HEbbtmY!c8O8,n)/3}brbce4dD8Ljy^u+pl d++,d?.v:#Pfk{ɚ{}S}~M3˛fW%9W2b G@8u0@TNYY@0앎0ug*K\ݹ?j=moߩ@>iڽ Ҝ( ݟ[O]y= Ϗf%ED{;L߻2%;3}D !wRuo>B=aJ8y!;O%q DH2 {yqIba|EHv.^j?"L5as eg2,p-LU%K=lcbԲ|;BzExV%ŅndA"Coma1B4EGzH@4O]x,@ M,]xOYtِ &&+-,87dAo$U(ԢSMEnjoIDtG;ݞw7ꔳ pіUG 9aY2Z*$L)\Pn֮4t$CQr&Z7$TɆ*d r,!  ޯR]%o^(]`/eN}D)dEO iR}$KV7cg,aql¼aݳLC]s8s++8Kf7}7WŊNQ*X1Ǝ&c| ٳPA,^ZU0vhQ~/Ӷgl->qA('/N]z50RfgȲxyv٤E~&g߆9zyyVc4X`@e6 ;I^۪ӯғ!SgO:͟r`RI*C'RS׮ݱ d. ,::sf&+5#Pz6r+y04g[Ff%gfKY"d~ TFyq5@ Vi]Jٮ#1˽VGs P+ Mjw;5Yb5hv{F&U7 'f߽˞D.MRRAq܅BL|S_9Kw$ycdQ-|x]>N!&*Ԭi Gz5k5H!ܢnܬz!3UU*N-`!Gnf-",8 hdBKqDQj ̞-`߇dۼA#A>q`2@&sKZ7-)E& ʖ+zVvdGHYunvf WROלsiP)HuYc;~`/MtPW7^zԄGQAct:;*̱ kY1cn[lh(me"N?'m7 nw *poHo3ytSS T^XsyG͊haT7H'~1‹B8 SWt_ ~SGM1'MM#;bzH>g[NOD_}O>VQ_σht#7G>8_BHm_:2(ZϰUcŷa4L#aՎ C{`h& ;į=y´/N^%+F4#vUTO7U*BMc-]HoۑV.m 9[-fW{&M@](@gI2dFDXXo*b* : LV_Œf>.Cv8> s%$iDMQk2a)DҠhބuu裘fL倥*Ba|7-Nt9Dxp>]_[4z%{.B倞PK+Kr\n ,bH_4McRF;X7Ē6IAZgEE0LPU0v$uUȉPlXl#G D'QKP'sb6 !Q/OCݬ# .6.ꇶ9eI|jq2Mu?̯9 8o5yKc!zjτINfUN1 =^3|dx?yb3O ݯ&H{:0ʾRkT!C-T01.өGI񭒧D-hi1`\֓!խv+F*Օk~: k3fjFT4/C33v⅂3)~7| 1W,䊖9W|fO3Y@¶y^zY!b/ Di4gf*0od~Pq*X,r$*V{.RPY2ybb'5lLXݝSٮF]HxV5L~x=1g*{Yod@9 ]"cRpB b|[*8ɫ, v$:{tZ[z@? ꝉ.j$7&OH//T>< DF][tO<4ⷫ&OhmF7 M'x8,Z1-1S~3$ۚ8 zH!nH!7 l{3k|=cK k> ]uܗ!5Vad!Eى<dŹeP#?D1F3ԢDz9;m'u]cw"#N:Kh61f竚UnIBO8 搣}}_|C,ߋ}aG%}?j| Lx;)X]38,OgwlN+Ʌה 2<n pvgGcϯ0gGG ); д]C ӹ3p/+o'F.R"Yj)}m!Ϊ܃Mܮ{%UW}kA%P!| H}``@.3deQ@tz0y-?b )'^a ^?K"&Zds}񖄸M21O.=ٕxfXo}M]|㧨À綶xj߫j9a_Dj%ID'hb*i.wMeo@w"M7G쪪ҰcQ?8Tk*M0ˤHXmP-Xꩋ֍ҭxZO_Х{|&ދ&?5g_*0)P+hwg.}s"S[=u}+X@)92 \m;JP&~ [I:O[UɴTE|̖H:-W4fDH1_Nwg1unfG) _?ABrrCt$cp4cO0qK;3Ih2dx 7jKl+u0΄!Pgcg0`QO;X7c?$rmAyђ2juuRcQҴ튎!izC=\ANQ;LP8SBX&w"e:^Ht#1}=o.V_QwKrIgKJ2Ii߮E!xyuX1T)=A~y?z[@:YM&Rie6</Z?r4`#w~;>%xaqe]fo&Lxj941g][l0VMQ\w3e+ܓsEٲq aȺB@DO[uȸ , s6zG-d.WFjÔ(IKh︗d5/b6ATg- 2 *دP'>[Jn';lclf3W~iP:8qCF]=>!#Qy8slM'GI/7ExՎ>,dgP-AZ#"%7<84 XT"~2B`(V,k(Wy0Tf2EujP׋DRۿ҂\MP:$BUu%4IxKkRtҩy{?9>hBkVQOL⑁p5q\*2|n_uƈwBy};҆3bo>tbu\9;+CW`rNs7d` \iv4jוg0MiBsABuh$S#9N= f5Q`N 5 Z^)]'~RM4& UHͷm;+鴊U2iw}oy׵IDkpd <} ^xveԾ2:\dH8E~~J>/FPֲ"kzx6/Mл'19/T RkSwpsq8A2OMq-2xO㼤^.; =eRϯʌ<?;BD%VIJ_0[Jp:^u]4ヒdڳG \UdHУXV?U\8h>½W[Z]")c9ny5JxՐugOݍ.xקU,hsӕ{=zU}o4U> q)>͵ 0PPS$!MaGi{O٘D^K}fuVGtvud~4:s8NjC}@衁ED!~(E闆-k!?z-u &C+-0õ\#~kFMmZIT\vzzM y1Z7Rjg[>P)/, 41.+j[^U$q`Satu|Y5n[ߡ?~6 aʞϯwŇ~?k@?pk@*LVRќ"a,ǟX5MHO-.^XZHTI<~/:Y-GrX;p9RMpTЃ5X:^Үjy.O!$` `Rxc8:>VK׍ʘy.\3]Of߶/)!;̹5|.]e6=lGmR-)Af&ZVkb)5ya%Hm-|lİrSՎBh?9frozؑ8%-DOBeoϤ¡#pϻ"b21i^e;M|OZxV,7!nnv ˖kӱ-?OZ_-?G߮k(ږ`bN'ܦ3{6~kcQtLNc])5  @ U`{!m6iF*[r9 $ޅ=lj:xo&y6]sPKeNטWe9Y˂D`y!PUT. }4]`u׺|f:eGhT$0>Xtr|+#Q_Y~fo8/ ltXޜ 1yM%IByM\X1{퇠=<.pOO(1r|Mvv6$1I**U2xV‡yrlޱ_;v6< pl #r^ 05縺nK:; i\SZX_.JOdBPp[Z)Hr7 L& mLpIf=[6a#{=it:݊נR;Td[F{MU-빷q#3ewC?E,5[gu(`ns_mx,%k\{.Z P`jL-&D"qLooX6AWㅚ4׺U@GN,56)-a Ӑ S-$i}){ %|}(>%4*΍/-4,sf.Xze$^BNRyu iXDܐ>HVʼ7ٕٙ8"_=ʼ/z$fAu]_UJ|7E[٠ x"> s_ rHKTinM=`.M]~(=mULÁcak!+aL[UNh, ^BzQ2=UwyԨqgbS³~?1q8\4iϡSa!?0_=>]ØKPI*d*/#n/vf=FMS)'^>k,8ߓ'tT"S핔WlBּvqySTyn!.1B76*|LMr25ey~$w!mdY3sL=[ˌqhjک:Wkip0f{[4fi5ΰc%JpijÇ£f{ic͹Cmuƭ*^o㓎،Nϝ12ϺMN ӥ\j_沄2~Yj&rSjy9]=ȭ% ScL^& Swo?IY)YE}m#luH!D{J+|dN,Cew̚^y0sN6 #g^۷9k+6e󸓉7/ mu) CqV1Cd21/( I, a|t (5M@4@e(VYĬJHҔ2#f #4i!P) hSV2:A:Q \֐@ ܨfp"IR/v1x umMֿ_Aj\Z)?b}Ѣ)WvƗLys涻3wn]emo~75-8]'EC઱y[| /ţlvlL'`kuʗxxoQPx}7;Cca?W( s*BMP:?05?SUt#qPU(d*1@!6 z* ;3">ch`xpg7'O5}@3d {u_ʢx?#ņUӉz)P~I%c[JGPFpZ1r׽dl @>( {D%nEǔFY[qkd͈Cݱ2-mԎDlشp۝(0;%O¨1Aם@Fg8XVi(rkxE| M ! 3`z>R* 8eJʊ dm{FӲ-S>,=B"V'GlB3k-L?gZg_:#sDEG,!#wtƐ8%:8B\F%h~fDxH|fŰjΏ?xT ,A@{7G|κf%ʘM!<|13֕Aaʐ$4OxeSg$B34剴+qZPle̯- 2XJ;M5b8 j݊rY[Z3a6aUnsqOcW mߏ<70;Z]@Z)D^iؖס2]= %N_A-iA ,,ہE³b4o@_^'+}58kO}3͙gm-5?;n4 YG7XUݖ5"ࠀ'q \8b!Fjd20ߊ_1YV1jub£>bP>=P !?$e\+ʩ KsV5VMa,۪׈S盤1rYHRTlϋ> n)x}z)zPe]@0&DrqR87¨@l^b<S(?to2Ik&c:"𻾛ƌ|zFN޳B**y emE)wEQ\grT -ˇSI£$LFbn,)P:yA"N $fk!҃x l +G \mNꮛs䏝i%rJWg q%=/sa2si' U+el(=ud6Ջ+VwTA_N랩—ZPNXF[Aqej ,9oFq +dvIɂqS#cvsQ{GZ몸`-PE4b!D#FӨi%JwP7DCX/]V\[AU~ pX:9E4A7⿚e77ГxZ>z7l М,;:VG@HOU;|Y?Ĩ_[zÆ)՛M6B|MB]\dEG 4 "1& & $.P0/`@Bt[̩$|/ |zXBp *|- ^ 2=Cºf+?HEx|??\M|wcauğ4ΆwnAWXSsx9Z9+! v HCz;[:y!3_#GJIR7w*[1C 43ȕv@n<k:gx>hzgpR H!hB KZ\t%J eH¡!AU.l {SY^cp woU¡lVhBp'~ռj<|5 GAF}KJMVމ8Տq@HҪ%@d+0=lFW AəBx $~}x'=/&ph7"1:!W< fOcQ\oDK\ިkbu0SF6DIXn񿨯X@N9ⰴeM:lC{%=\ЂN;ZQ|9עWhUSx*FUk@i$@z~)q=ngO4=|8>Ϛn~r Hu טR(m^/t<hjtdamG0+U d-Zlyf!)%e#{zrjXN4 hE=9{~t|7 :ٶeto.em%ow?g/-;1m8rqͼ%푸;d gYJDV<'oK!) JKIM - D,Tnm> k22]-|̿_qIdpYT[QP 4#b-Qo֧:~sK\4+ݴY')#mx!!;];]<%I9wpiaVT K}5 g"YY#;WO`#! Hy$`C#dr?  : 쟻CB񼕮+xۓ J#8O=s66Y߹UmbI)Lwr nT'|Mul*Z]ځd== 0yQYD+·}uA4.xAv x 'Ŀit"1--˘D%:,WQC#:-AML"7D 8{ifnʓE &|IX|*g mfsD[$ qL샞B;{`м 1]4C ǖZSwR"_>95(זfdgؼ̦"Ӄƾ?%5PO\#}C{! doApX! i0AP\hήy+ӌL(r؉\>OHNtSQy\r_PO`Iq Q os::7EEByסI~)ĝzժyx1`xlUi >ojk%\Н󬧓b,ʾۧ+[5s w{P3bUϮEU>z˝kdN؁PD^:"i2kkh[ 2f3n G+^ ;6ML<. d"Eu:]Uz]Tj-WRE0=,ӟ9!}Z kO)vzQըz&oMHpa}bRRZBmjvݮzMlIow;w<07gSnnyyɜkxNi3L`,,; d$N7oznj`̲;83o+* rK_H;Pf۴kaG߬Je{8a7/6$xƢSB G=LOWߍRx'{ ;sW.< ߵIR5{PĹkH=6OS$r\|N`k $`#5s@r4,a?P$ӯ8͢YQ*s_qx $'$:)wʼnKq<ȯÍ>ҒT{]"jr[*=U hP|2E$u3?w!$K$A [^Oq*ĴG+|HU~"r ^fEj,tG D{S ˑOF>rBSVmmC93S\OCWҒPXYJiUU˨!mܮ}23s6(֗'v͞Y#׉4`1IP %40•چ[S[@,~TqFVk#D-/\70=( $n<~"ζo5ۢ#LWibyڧ/#%ifw*Kj+ (nK'4X,/ĚgTskU;bzBѢPtm5~<:j Z|9܋a{qnנgM滚ߣo#2׸1yW}q@TF iv︿Xuk[63hl,V"e1ŸnH&Dh߾/δx_EHAD`3o`Ϟ[+w.Z*jC?Isffͱ<~#Έ݊̊;{/zB$]1.I~,dbEL`j1gՇ28!̢^waw641<=Ḧ́%c #9r{H#݌snW`lL<1^+nnБBnV#`uaP}˾4w/Sƹ!'Cx~9Onr`RuewxH3) "y1Xo7n<;Tp|oK:ZoPa]J.F}"wS=!kf1c*j<㑳!Ó bggDrYe}TYe {aq "c"< ?+vm8?3h~RFppˬ ֲWA%f.{s֗?)ut0~͓ȩ3gҸVJGPk~ xQ{6n30XMSjwikljp Oյ ݂wո0,~gpuU;gmY;kQᑿ@m8(e;$o>{}bF6]WE7eݯЏ :#Ӟ҈u97Ѳ7+/.鰊=@f-J8`|xu{a^c=ױ{&lvQÊm/V&wgo5 S=]$C}V8wF,>.yEG|ĩ펡ǭo>dDLTڠ#*#~vdPC1ru$$sF wO̪rvUXUsp RE@aӇ;8eV2G|H[*au}PGv98H.nU)Kٽ @ļ#_Fj}JX) 9I$xr~R[CATEg=n/?7h?j|=ȉΜ;Ӄrc#LWCU?t 'kftn{z 4`1J b GpYXŜ/`<5\,))%1ˆ4qs{<2@ P]i,3ػ(Pi zѴllD3-V}Nal%'EYcE&PxanP-P}\cjR14~ݥ] < K&xu&.;vq8&UXѿiM^63(pDP±E 0} y^%H~@HkeB^}oRregΔ cS#-}Y]2ALI(U 5QWW>( u/m> ݧ$1J:?oe!8x)<f K ?A8g+$J+ 8ݣO&ρX$$i귭u oʠ[ i&ޥdx, fdUZ+̅XmĬ;Kɩmr$NH]/F8(jN[~'C;oC)xkZ&=iO]85-oIpy`Tg|nEJeYXWMd=ab̐;奇J݇O) M prܜBu$'(d4~Ti~Q>cdpwI4JTEv)4Y}( q3 S_B {ܳz ;D],.`䃎ۆc 7>O\PܘCzEj"+vN}CwM7S˅PL[ X۵R֟~j 2jyH{١g͙KUk#̦{&D"rmaTdzF#i?wnNjM-JbX!7a &km6OLhd͝&" z /1|`AAepal:onRW.zޞ0f G&H9!ڜ)P mwk0hIS K|{#W`<M:v27OImNh$ejx !ξ2V&>I}"ܡ_1ї7v6]s\% cr&1鱥eMYIF`aK[f[V ̛o6A@ʊcJ*A-xa_۸z[7C9Uע&F]+P^+ $T7Uېf߆_&Տ[ux߾^wpRw5 ^39},??3Ь\ƺ3 eE Μ0*C,h={݈jo:LIZCVA8lyQ .wf܃#Z"@&[Pi9=9S%-;GnCkhaɓ-,C *acD*LRsJEo`LP!6g(ڇEDMZ¢JMbXhT20wJ-ƱŢv v>4? &!0NAϰok>v20A4ߩ޼zyX<_k1<;/5=1.BFP&m˨gwMTeg_!-83jd ((9!J_[x9I>u3=,">5AI \[a.b:w Sv#mW/;gJ<b(D()N Vj6f7RA7 'J ?\bm!fه:: |lڸ܈*dХW//&5Pǚ1(E %GF2vm~_ۮ]җ;>WxN캔kސfv+*Cq>*VhwS~UqEZ䀘bjG涶xej|ŘWj/duA@|lB+e'yП-횋\FP\W ^`nH~$'Iپ@ia2XjF5n(zHnlVVeh8ƙkQF$; al>g GÂ\#dkVAڂԁJ|aD<|S'L&ToѯcBL 1!t%aj<86nWDk)# ׇn*N?zmI޺|.Wȋe7f) z{/_3' 8oLwp<^d|o3ϫf IaN~r:h]ۮ|}m㌮B}qF<ɷcmV#ZBeoI_)m= f`R JA>v̤GW_Wx3^Si ʥ0{? \rsg*De3SbBHo_9G~xEKU^`m)7J.Lb0CO6uz),|ׯN87&9Wފ@qO,KChs2g4vSGh@~U~Ѭ_@ibfmo*J[7(@Y_#9 TOjkV۷b6QŁ"~avFߩ?3tr@.:WFb6 et?37w4H1.Ү iAkӭ7q|Ws< cu5|;ޕg k4b^-|6@/bI90}: ^ʈXOCHҰ[J̈́z:[2+wo >;,߶UzSzZm=|IeSQA=΢Kk?({}(ot4 HGQE~y„DRtU{;$W]ɰH&_D}au2cmAO@н9\Lh I&P{cLY`!ڲ"8舄Z9pb7sc_/5+3b;S>YO>B~ ҠϽC$na߂AzZ'wkmH;'<Ɖ3?/lTU\RѰq7<8Ted]~Z{ikcoEVLX`E:DS[] dMbDz/vu#i&,v62EP!|݁ DwVD'.c3eC[K}YT9"1&vEQȴָQ '*O5 t9`k" !;؃Q|Tx$/+_!Pb8>|7&aQdZv[X? g%v 9B؅ eʉS_XfLr:lX%nj́M;+)d)Kb DHƀ1%EGUFs{DҸQGy>sdF e͖5I_ V@ XMgjJ5ʭ:T^"4~/DL}y_d/7FUчdtvP#QN8=?Y܊3&/q+#MP}Zb:[6q(pN l{a;ı [˃~WoQ<7Q\Cmȅ bD:BR^BZZwHwh5RI͸oJ(lb)pS_JbKQސ9)aaHƖ*$>i|$AP`#}RT葌<"K´ue nZm6Q]z?7Ip~)~6eI4_nuHgHsH&)= ڧ4HLt+K HG&MV_~cbKhKbo6yOQAPW8~v]V}qVa߃S8ěV^4K!`cJWViD.3։xLMy^#P^46̩N&xZn<##AVUPۼ_3U$"zV@}Z2e"4ġXnjN]T43Ij Vj6rĮUIjk~#HiRFj*{8q(2/`1y5?\H}NP[N9Me~:-K8*+s)ZmRƘ]9m@Q18(NZ$Q{x^'\l5vs</3.TCe m$ko`$FcgY(cc6AzZJӷ$lN9}W!sߟ;ͳDKds,I24/GohT2,Q宋P8Aj&*pQƔ&rׄuzzhN(L˳2(78&{y}WzP1S(_HL5^k1(3$'(oٟt3z$ɲ_ϖr4(WX^VmP.__2,.mg6Ӗ<֒{곣('b?ۀ]l[W({ s@_ ?'q:-<3K8{+phiy_\j3Bs{Le9Zۍ\MVD=C˨{2/.GEΪht2 -dX>,&ɐɰi zbCû,̂IDP3|  3z5UC*jZ+Qт]XO5K؉OTZ10n!d|6Yz~Ո+rHq)K^| QmjL ,q+=(B@Qr802YJ=Ma,iуaŀeYJְ85d&6{VL „2.z~(N,/ʪnڮi^m?~!PD1X@$)+_`./LPNoر3-Vt=^!A1 )a9^%YQ50-q=?8I(i~yY8y?B0b8AR4r JjaZz~FqfyQVuv0Nnq^r +e; #($E3,/"D*+*F&Eu?( @,O *`./K2BRk:h2[6r{>?B0b8AR4r JjaZz~FqfyQVuv0Nnq^~`phxAdEtôl $jn>~0Nnq^~p I &'ʸJ 8I3yQVuv0Nnq^~  $ "L &H, JlTgƴ?_fv~JöP]Uo@~!v^5 u{_SbXs:'gwXJ/[\|jc!;5hMri HMʅ Ҹ |PZdRX 6&ZX;٭7HXBMgԂ&2MW~ HmYd^JX4g8ZkcS"^^Ec&[Z_.PI 6u؁gepI< [ߤk"@gcSmh֯^. z|=V7lj`3,?t)#Tp yMGG :pHWv].uNoD]b[˃F%%mz;_(=u$y$VC~POTJMh:A5h{ݰ,9W;N T|mcwI.*|bոT9rEa ЏtI1`UdKbj4ĭG1>)IMTDikS焎!j~BQ9BߋH¦ф$AqɭLi7MlPx7ߜW^Vl?PҲ #n XKIk/O5z͢Np4Xjrq.f±nVu+S@??KTcSd +]Goӫ?#(Xv%U~ǏБ.cZJkLthT/.&Lt]Gj(2=HS;$ ʱ&05e w^fiv!*H@Q빵o՛pK)n@qW"QT|GE}[O;af[mC4l),BD?+TVae]Ψ6j:Fuoz~Z] ~$lyy7FO}`/TNMU'H\:/[FQqUI7Df6XuANq]=ғÛ%$gcŤn=Ytt\!7}qԳ¾ +7O+2A 8 sѝI'9!]AOy_r[|ȧi?5BSTF)^b!j-4rMrDذ }pRa3"9[~4^c9PZ7"Le6:5m4 h;|/`I22TY ~/K,(´_܇I4^M== uBbxdگ#Pm Xbk u%sSo6޴@(XQMż!J\bgEJ,NB-/eMUk!#ܡxcEO7<5}H'mW) 6]ڥW0d:ͅw5Oqd>avUAшXlߌ#[6XȽ2sŦf^#o։ N(fhOYܪE/̇_9G1}[]l3mBQW,NHB*}d緰35@"@22W,~㖢ix߻_yV&x!TJy6yCK=cvu/$䡡>w}8 HB*͖yE:cNJ)u_bEKvP[$ZkKhc)pÖ!H5l [ְ%,@s_U{wT ,"""""BړIF!RJ)K jRv-:$Zk1c|3ɿ+]r؊lnT:goconvey-1.6.1/web/client/resources/fonts/Open_Sans/000077500000000000000000000000001266412531300224365ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/fonts/Open_Sans/LICENSE.txt000077500000000000000000000264501266412531300242730ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. goconvey-1.6.1/web/client/resources/fonts/Open_Sans/OpenSans-Bold.ttf000077500000000000000000006665201266412531300256030ustar00rootroot000000000000000DSIGt:WtGDEF&SGPOS 77S8GSUB+=TOS/2u`cmap)/hcvt -fpgmsugaspS glyf%Khead<6hhea) Rt$hmtx$kernT+ ~qp6loca`+TVmaxp5 namef{"'postCl-&+prep k:9_< BJ   y X/\ 33f @ [(1ASC X ^ Ju+-X5?R!R=\?XR?=HuNJyNN#dH7HBHuR?XXX-f`w{dwBhP^w^wHh^) 3V1N 3BJLV\\\)Bqq}qB\\\y/B 7'h'RXJuRqhjd/RX=dm\X/;LH=qHu\9R . . Z=w{{{{*B9/^w^w^w^w^w^w    VVVVVVVV\\\\\qqqq\B\\\\\X\BBBBVVVw\w\w\w\\/1\{\{\{\{\{\wwwwBBq?qqBq+BqBhq}PqqcqmBBB;B^w\^w\^w\w\HHcHSh^\h^\h^\h^\)y/)y/)y/ B B B B B B171717VVV^w\h^\qT Hu JB`}D9{1^wBP3R^wN)\VmJ79-\qNBB)-\H\qN\B\BH\\y\9\N))V\mB )\)m{q)}jwh^B9hq)`9`} {/^`^ww)9\V?m?NHRV\P\qN)L\7\m/\ ?{J\B1\\qqq}B`RRRJT?%?!{5{bu ??!RRu wbf#R#B\?))9J7f : ; Z C;D9 )Xd%qLXXVXX))hq}^^N) T-;-+VyHTTq}) 3VrXy))wo\{\wbLf 7o) )qm^w\ w )\wo\w\wjw1\hu))Tj/y/;/^qN RP% 7w?\w\)f/ q)T/om{m?{TBJLm?{JhBVVVV{v\\\/^qN99^w\^w\^w\NHJ999m?{}?y/) V \\h\b\N9JND{XfwN\)//XsNVVVVVVVVVVV{\{\{\{\{{\{\{\BquBq^w\^w\^w\^w^w\^w\^w\wo\wo\wo\wo\wo\ B B1\- -11111 VV-f=BNdH7HB1)R)y/\\\\\n 0HI~'2a7 # O_?M   " & 0 3 : < D p y  !!!! !"!&!.!^"""""""+"H"`"e% IJ(3b7 #P`>M   & 0 2 9 < D p t  !!!! !"!&!.!["""""""+"H"`"d%aIvhcb]gD Xz}} Bvt n%"iOS0L\pr`<&'()*+,-./0123456789:;<=>?@AIJ$%TUVWXY\]^_`abcdefhijklmnopqrstuvhijkFopqrstu45]^@G[ZYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! , `E% Fa#E#aH-, EhD-,E#F` a F`&#HH-,E#F#a ` &a a&#HH-,E#F`@a f`&#HH-,E#F#a@` &a@a&#HH-, <<-, E# D# ZQX# D#Y QX# MD#Y &QX# D#Y!!-, EhD ` EFvhE`D-, C#Ce -, C#C -,(#p(>(#p(E: -, E%EadPQXED!!Y-,I#D-, EC`D-,CCe -, i@a ,b`+ d#da\XaY-,E+)#D)z-,Ee,#DE+#D-,KRXED!!Y-,KQXED!!Y-,%# `#-,%# a#-,%-,CRX!!!!!F#F`F# F`ab# # pE` PXaFY`h:Y-, E%FRKQ[X%F ha%%?#!8!Y-, E%FPX%F ha%%?#!8!Y-,CC -,!! d#d@b-,!QX d#d b@/+Y`-,!QX d#dUb/+Y`-, d#d@b`#!-,KSX%Id#Ei@ab aj#D#!# 9/Y-,KSX %Idi &%Id#ab aj#D&#D#D& 9# 9//Y-,E#E`#E`#E`#vhb -,H+-, ETX@D E@aD!!Y-,E0/E#Ea``iD-,KQX/#p#B!!Y-,KQX %EiSXD!!Y!!Y-,EC`c`iD-,/ED-,E# E`D-,F#F`F# F`ab# # pE` PXaYh:-,K#QX34 34YDD-,CX&EXdf`d `f X!@YaY#XeY)#D#)!!!!!Y-,CTXKS#KQZX8!!Y!!!!Y-,CX%Ed `f X!@Ya#XeY)#D%% XY%% F%#B<%%%% F%`#B< XY%%)) EeD%%)%% XY%%CH%%%%`CH!Y!!!!!!!-,% F%#B%%EH!!!!-,% %%CH!!!-,E# E P X#e#Y#h @PX!@Y#XeY`D-,KS#KQZX E`D!!Y-,KTX E`D!!Y-,KS#KQZX8!!Y-,!KTX8!!Y-,CTXF+!!!!Y-,CTXG+!!!Y-,CTXH+!!!!Y-,CTXI+!!!Y-, #KSKQZX#8!!Y-,%ISX @8!Y-,F#F`#Fa#  Fab@@pE`h:-, #Id#SX<!Y-,KRX}zY-,KKTB-,B#Q@SZX TXC`BY$QX @TXC`B$TX C`BKKRXC`BY@TXC`BY@cTXC`BY@cTXC`BY&QX@cTX@C`BY@cTXC`BYYYYYYCTX@ @@ @  CTX@   CRX@ @@ @Y@U@cUZX  YYYBBBBB-,Eh#KQX# E d@PX|Yh`YD-,%%#>#> #eB #B#?#? #eB#B-,CPCT[X!# Y-,Y+-,-@ !H U UHUPLOMdNLd&4U%3$UMLdLLF 3UU3U?KFFF#3"U3U3UU3U03UoTS++KRK P[%S@QZUZ[XYBK2SX YKdSXBYss+ss+++++s^st++++t+++++++++++++^u^{V+T$$$$Vzzp Kh}+y* }Hq R  5  Z y < { $ m:Xz:sQ?V0 eq:++\``fm.#D~5K`v  , = !! !2!!!!!!!""v"""""########$$$$$$$$%%%%%%%%%&4&&&&&&'>'O'`'p'''''''''( ((.(?(K(S(((()))$)0)<)M)])n)~)))))))**R******+ ++#+4+K+W+c+t+++++,,,,-,9,E,Q,,,,,- --*-6----...*.;./2/C/S/_/k/|////////0000.0?0~0001 11,1<1N1_1q11111111222"232D2T2~23X34 44/4?4J4U444455M5u5566Z6n6w666666777767>7F7N7V7777788D8L8q8y8889A9I99::!:1:A:Q:b:t:;E;<>7>>>?H??@@W@A$AvAAABBB)B;BBBBCCC!CCD&D7DHDzDDDDE(E0EEFF,FaFFFFFFFFG!G)G1GdGGHH]HHI;IIIJZJJK"K*K}KLL$L[LLMMMDMLMTM{MMMN%N]NNOObOOPCPPQQQmQuQ}QQQRIRRRRSS>SOS`SqSSSSSSSTT+TLTkTTTUUAUUVV^VWW W7WfWrWWXXXYYZWZ[([0[[[[[\>\w\\\]$]]]^(^`^^^^__?_a___``p``aLaaaaaaaaaaaaaabc\cmcuddKdddddee:eeeef`fgggg"gNgdgugggh)hhi(iij6jjk\klOlmn0nnnoSoop$~Pe~e:CgH9CM_V\q࿉TV]wYucVf=J,`5=@;Xj0]?3310#))Ry @  $??3333331073#&R1 ή27=d @  $??33333310#654'3d1:1?V5@    ?293393933393910%'%7)u!㜉'm)hy9w)hpX9 &@  /3332293333310!5!3!!#}}dz?/33210%#7!4|A$ =V/333105!=u9 @  TY ?+331074632#"&uZVS[\RT\TVXRO[YD@ ??993310!D!JJH (@  OY OY?+?+993310!"!2326&#"H5]nl`akm^|so  yN *@   ??3939339910!!77'3NMNMwNP=@  NYNY?+9?+9399333310!!5>54&#"'>32!Pod,aQUWlhtG}sn;XVNH\L)dteNB&[@/"  '(!$OYPY   $  OY ?+3?9/_^]+9+39933339910!"'32654&##532654#"'6!2UdoqH[o$O+6hsgVYl0;Ր#q F@"  PY ??39/3+3933393339910#!!5!3!5467#q" %4//i>RNkd5V@+  OYNY OY?+?+9/3+99399393993102!"'3 54!"'!!76fO^5({7#=O *5 BHP$A@! ""%&PYOYOY?+?+9/+99339910!2&#"3632#"&2654&#"Hon}GYWd ccjcd^}m` {k{zQw7P.@NY??+999393103!!%/HJ".S@), &  /0!!)) QY #QY?+?+93939939329399102#"$5467&&54$32654&'"6654&J|}nxhsrqOaMebNdɿpEXr̻}JOkV`cQCuBbQD<_2.`?EPBJ%?@  ##&' PYOYPY?+?+9/+99399210!"'532667##"&5432%"32654&JCT\j :r `lbd^}FPV[ë^L|j|{Pwus &@ TY TY ?+?+33331074632#"&4632#"&uZVS[\RT\ZVS[]QT\TVXRO[YTVXRQYX?s(@  TY /?+3323310%#74632#"&4|A$/ZVS[]QT\ TVXRQYXX9'@=/333233993310%59TX9$@ P`/33/]33233105!5!X%}X9+@=/3333339933105XT=J%D@"   &' ##TY# OY?+?+3/_^]99393331054676654&#"'6324632#"&RmiC`Vmd`3ZVS[\RT\J`PK^:ADb}ƥndGJ<D?tg610&RB)=9Jb)y&@ LY??+3933310!!!!!sPs^%@  LY?+?3333310# 5!3265^5N!}3 *@    ?3?3333393310!!!67991 @JM(\F@"     ?333?3333333933333310!!&'!!667!667!H 50 11+%* ,1),63ݢ9B37QNHV D@       ?3?3933332339933933310!!!!!V:V;5N5)+6@ ??3933939233310!!!1NP\Z/1q ;@ LYLY?+9?+999333310!!5!!!qVDs@  $?3?3329310!!#3s B@ ??333310!!!J3 @ $?3?33393103#5!!3qT=-@?39/32333933103#J}NH$?33310!5!NRL!@ @ /93210&&'5!?DV?,BeV;u"J@&  ""$# KY FYFY??+3?+9/+333392910!'##"&5467754#"'6323265f;M®evjaK 1QeXZzeB@!!    GYGY?+?+99??3339933102#"'##!36"32654&p31 kpqhkt^opsЏ{E!\s*@   GYGY?+?+333910 !2&&#"3267f šZH|>XKJ=-L%/2/$\q@@!  !   GYGY?+?+99??3333910"323&5!#'#'26754&#"o 2; hjumo}fqr23}bf쑥!\bsF@# JY JY FY?+?+9/+933333910"!&& 32!3267oanr6/ebP{qq{R*3*.(')u<@ FY GY ??+?3+3339333310!!#5754632&#"! ϨϞ{N\NA:yyRR/M1GO^} /@ IY GY?+3??+3333310"'53265!432#"FuTFIMG1pSSVT)kGOI@#    ??39393?3339333393107!!!!Ņ9XD1`TiJ??3310!!!1Bs#M@& % $  GY  ?33??3+39333933939310!!4&#"!33663236632!4&#"QWuj)-nY-nQWpoyy^MWNV'yys1@  GY  ?3??+93393310!!4&#"!336632V^r)3ryy^QS\s (@  GYGY?+?+33331032654&#"!"&5!2m{zkl{zl1̍0sC@"  ! GY GY?+???+99993333310"'#!33632"324&p+kiqhkte;J!R\qs B@!" ! GY GY ?+?+99??333399310%26754&#""3237!!47#otlo{kj< 1ۅ%14PT=kQTws%@    ?29??3393102&#"!3366>)%5-4s ^^s\s%?@ '&   FY FY?+?+993333339910#"&'53254&&'.54632&&#"zKUQ,lZy7ʿ\TLWz:L! (6`$-9&6\wWX$.I)<;5\x/7L=@   FY GY?+?3+3993333910%27#"&5#5773!!wPprX9I#3fA>^2@  GY??+9?33333910!'##"&5!3265!)1s1V^r1NUsyy^ ,@   ?2?3333393310!!367!V?$ (?V^yl`}^J@$   ?3?339933333933333310!#!!3677!3667!7Vt0 P  . +^LUVa]H, ^ L@$    ?3?3933333339933939910!!!!ZZ};#d^L@%    GY ?2?+3?39333333939310!367!#"'532677N  G'AOL7AQy"^Rpg[u cd77^ =@  FYFY?+9?+933399310!!5!5!!B Q6@ ! $ ?3?393333933339104춯463"&5}~cKJdW\XR>}FDռ" # DF}/?/93103#!R"6@ $#$?3?39333393333910#566554675&'4&'523"RcKvsJdQ{}-pr5DG+ Vk "+FD5sn TTRaX'9}7@  /32}/3333333993310"56323267#"&'&B7}6gIKb5~6eBxZC6m 7@9m%8u^&@  TY "??+39333103!#"&546323^ZVS[]QT\^1%TVXRQYXD@#  OYOY??99//99++9939333210%$753&&#"3267#3\ӲZH|>ytRd; A$-= RjX@,   QY NYOY?+?+99/3+39939933399102&#"!!!!56655#53546]sNTwgMR@YSۏN,rdq!'<@"  "() %/32993291047'76327'#"''7&732654&#"6[ji[55}_esT}6mPQoqONof_57Ynk\}}33{}]hMonNPnpq@8   RY RY  ??39/3+329+333339339933399310!3#3#!5#535#53!H9<\Zݲ/#@ ?/99//9333103#3#j)-8U@* ."'39:6611**%%KYKY?+?+993333993333333910467&54632&&#"#"'53254&&'&&7654&'yH=߶RDNQJcr}>?˒QF%ZP߂tNe%5%O(TT 3.01J-@mS(iJO)9u'03"JCh.9YD^1O  @   /333932104632#"&%4632#"&K@BKLA@KQ?^\X9 6@   /33333/39333333310!5!3!!#5!}}}{/J(@   ?39?399333310!576654&#"'632!yf90(Qc{^i`JdY2&(XuUu_;9%>@    &' # !?3?39/399933933910#"'53254&##532654&#"'6632^h{XNp\SQ23/T9e>g7 nOyFZk5549&2&(/>L!@ @ /93210567!L?V4Ge42^?@   GY ??+99??33339339103265!#'##"&'!!X^~r1+*xX>h 1yyUU.,UJq/@ MY/3/+9/932910####"&563!>T\P3u)} @   TY/+33104632#"&uZVS[]QT\TVXRQYX4@      ?33/99|/9339310#"'53254'73ND[HNJXr>S=e\JH *@    ??3939339910#77'%3H0Nm-Jp_$*=9 @  ?32993310#"&5463232654&#"ᷟ#AHH??HHA\ŧŦdeeddccR^ Z@*       /3339/33393333333223323310'7'7ss#;w\\w9;w\\w9.&{'< ?55.&{'t?5Z&u'< -?55=y^'F@$"() %%TY% OY#?+?+3/_^]3939333103267#"&54676655#"&54632Ylm9WYO`fbja_5(ZVS[]QT\^JbMNX?9J:*8EliFJ=;VTVXRQYXs&$CR&+5s&$vR&+5s&$KVR&+5`&$RVR&+5V&$jVR #&+55 &$PuX #?55%o@<  LY LY      LYLY?+??+399//_^]++3333393339310!!!!!!!!!!#%3z\`Nw&&zs&(CR&+5s&(v\R&+5s&(KR&+5V&(jR !&+55*s&,CR&+5B.s&,vR&+5As&,K"R&+59V&,j"R !&+55/u H@$    LY  LY LY?+?+9/3+333333333103! !!#%4&##3#3 /fe|bңRdT`&1RR&+5ws&2CuR&+5ws&2vFR&+5ws&2KR#&+5w`&2RR&+5wV&2jR +&+55  @  /2229333107'՘-1-Ӗ-+ј-՘w"9@  #$! LY !LY?+?+9999339910!"''7&!27&#"4'3 ŋZZiQƒTX8Ti3 LhszAlmF}ht-u'^s&8C+R&+5^s&8vR&+5^s&8KR &+5^V&8jR (&+55s&<vR&+5 6@  MY MY  ??99//++33333310!#!!3232654&##6 Dd|dt%&@aL:0*4([bzN"$2{)3<*HwQ@j17P.^;yxHN!R&\j ,&+55&$MXR&+5V;&DM &&+5}&$NVR&+5V;+&DN &&+5&$Q{VLu&DQws&&v R&+5\!&Fvo&+5ws&&KR$&+5\!&FK#&+5wf&&OR&+5\&FO;&+5ws&&LR&+5\!&FL&+5us&'LhR&+5\%&G8o/u\ (`@1  *&) #GYJYGY?+??99//3+3+993333333399910"323&55!5!5!3##'#'26754&#"l5 ;2@ hLnieoSd  TPe3ǡT{&(MR&+5\b&HM&+5}&(NR&+5\b+&HN&+5I&(O/5&+5\b&HO?#&+5&(Q5\(bs&HQ?s&(LR&+5\b!&HL!&+5w's&*KR(&+5m!&JKN&+5w'}&*NR&+5m+&JND&+5w'f&*OR"&+5m&JOH&+5w;'&*9m!&J:ZE&+5fs&+KR&+5&KK5 ## ?5Q@( LY     ?3?399//33333+333333333333103#!!!#535!!5!5!fʸ6C5w-ôT@*  GY JY    ?3?99//3+3+9333333933910!!4#"!#535!!!3632ϴsϜ1;fP/ǡS.`&,R"R&+5&R&+5?&,M$R&+5&M&+5}&,N$R&+5+&N&+5B&,Qw+&LQ!Bf&,OTR&+5^??3310!!!1^BR &,-)&LMJhR s&-KR&+5}!&7K&+5;P&.9;&N9u^A@    ??39393?333333293107!!!!ύ:EHƏ1FnZ^ۡR?s&/vR&+5&Ovg  ?5;?&/9Jc;&O9?&/8u ?5&O8?&/O/p&OO8? E@!       LY?+?993993993333333103'7!7!Eq6uQ)oXĞX K@#    ??99//33933333999999107!'7!FuGq1+ph+p-s&1vDR&+5!&Qv&+5;&19;s&Q9us&1LR&+5!&QLN&+5'QRH@#   LY'?+3?33?39932933999910"'3267#!!3'&5!rS]Imv {R[SN}PmJsA@!  GYGY?+3???+933933910"'53254#"!336632=kM;<{r)2tʼ۫^OUw&2MR&+5\&RM &+5w}&2NR&+5\+&RN &+5ws&2SBR (&+55\!&RS{ ,&+55wP#e@6  %$LY   LY  LY LYLY?+?+?+?+9/_^]+333339333310!!# !2!!!!!"3267&&P&-S>=#d3Az&# ik \{s+2p@:/0&&004 3/JY//,JY )GY FY#GY?+3+?+99?+9/+9333339399910 '#"&5!2632!326732654&#"%"!&&pGkdQfm{zkl{zl^| u-OM*.'(Esyo}Hs&5vR &+5!&Uv&+5;H&59c;ws&U9Hs&5L3R&+5S!&UL&+5^s&6vNR0&+5\!&Vv .&+5^s&6KR5&+5\!&VK3&+5^&6zb\s&Vz-^s&6LR-&+5\!&VL+&+5);y&79)/;7L&W9)ys&7LR &+5/(&W8?5)yF@#   LYLY ??9/3+3+39333339910!!#53!!!3#sPsTb/7L]@/     FY JY GY?+?39/3+3+39933399333910%27#"&55#535#5773!!!!wPp4IX9I#fƔA>^`&8RR&+5&XR1&+5^&8MR&+5&XM/&+5^}&8NR&+5+&XN1&+5^&8PR &+55&XPN &+55^s&8SR %&+55!&XS '&+55^&8QH^&XQs&:KqR+&+5!&ZK+&+5s&<KR&+5!&\K$&+5V&<jR &+551qs&=vNR&+57!&]v&+51qf&=OR&+57&]O&+51qs&=LR&+57!&]L&+5? "@  GY??+333310"!4632&Pϼ͞xG\-\//I@$   FYGYGY?++9/3+39333333910#"'5325#5754632&#"3#鼰kM;;}–pHR?myqRR/F!-w@;! "(@ ((  /.LY +!%?3?392239/+3333933932932999910!!!&54632&'5667!4&#"366/jl+pm1fVDpL.jVl6**7V&2U>J#:Wn-!EG*x t7-33-\3V;",8D~@?'(#,##3--9?3??  ""FE,66'<0B@ KY FYFY??+3?+9/+239333392993293210!'##"&5467754#"'63232655667!#"&546324&#"326f;M®evj.jVώppqn6**710*6aK 1QeXZze/*x iDlnli-33--44%s&vR&+5V!&vA&+5ws&v1R+&+5\!&v{,&+5^;&69\;s&V9! *@  /22933333310&'#567!TMN˽CeH]SQ_p4F!*@   /32933333310!&&'5367Tlw˓RT!T2/{]SWY/3910!!Z+ &@ @o /3]293210#"&'3327 ܦ/UU+/6} /3910432#"SSGOTJ  @   /33/]39310#"&546324&#"326Jppqn6**600*6lnli-33--44  ?3/9910327#"&54673-#7o- J8-lU)56m+QD^@  /93210667!#5 Nm6T 2@  ! /33399939323104632#"&%432#"&'667!#G:9JJ9:G#9JJ9+5u'{B'(T 2>+5'+T 2>+5',T 2>+59&2RT 2 >+5'<T  2 >+5l&vZT $2$$>+5&U "&+555$%T@LY??+33310!!TJ9 ((1q=f+wG@% LY   LY LY?+?+9/_^]+33333310!5! ! 32654&#"3iQQeϿfzmm|B,P.3 /@  LY ?3?+333393310!!!&& 3 R <>)Jo01R? C@#  LY    LY LY?+?+9/_^]+33333310!!!!!Rdw=Hw2=#@ LY?3?+333310!!!!!=L3NyS@)      LY  LY?+99?+93993339939310355!!"'63!N5J3#-  = )y7<\"+V@+""+ -',+ +MY! $$MY    ??99//3+33+333339333331032654&##5#"$546$335!32###"33)衏55)9V;m@@  MY ??339/3+33333933310!#!# !33!3265!33"#L !7 W@+  " !  LY  LY?3+3?+993333333333993310"!!&54$3 !!654&%Ąs<?yv}H]AƸ`H9V&,j"R !&+55V&<jR &+55\^&~T13&+5N%^&T%/&+5^&Tw&+5^&T &+5&UD *&+555\q *K@&)", +GY%HY%) GY ?+93+?+9?3333339910%26754&#""323673327#"&'#ovko{kv2+ 'T [pv"nߏ 00TT^7ahv MZ)X@," '' +*"##"GY## GY GY?+?+9/+9?333393339102#"'!4$"32654&##532654&~0<|H5cnnй?4'|pnsmf\d^<@  ??33333333939310!47!3667!8,V=B9=c-6VR>I,Yt\)k@5!!$+$*$$!''GY!!   FY?+3?99323+9933333993393910&54632&&#"!"$5464&'326oэy\XIJC_i{xioz-B-76.6iF^Ҷ]:#~e}N%s&b@2## ('&&JY& &&   FY FY ?+?+999/_^]+933333933910#"!267! $54675&54632&&#"3H gY瀐sX^wMqnAH}-)Mk 1э.&026B7\ P@' " ! !FY"??+99339333333399310!6654&'$4%#!5!EOOfH43V'IgA%]/ )M~ ߶JZ5 !}s2@  GY  ????+93393310!4&#"!336632V^r)3ryyy^QS\+ ?@ FY FY  FY?+?+9/+33333310! ! 267!"!&&  uk7iyln i kui5^ !@   GY ?+?33910327#"&5I#3^!"b@2 ""$"# HY HY ??+?+393333339939393103'&&#"5632327#"&'&'##$\_24OWss3%L7!$r'n)r+ .!\ZJ Fhb lwC4L^ws^ *@  ?2?9323393310!36!!9Esf4X^+\.e@2%&&))#  ##0/!++/JY &" JY ?+33?9/+9333339933339333104675&5467##5!#"33#"!6654&'&&\ۇC$K끓/aEOOf~6 4k% ҉u_R{{GU5!}f]/ )&\sR^B@!  FY GY?+??+333339933910%27#"&5!!#57!#C?)66#Buf31ys/@  GY GY?+??+3333310#"'#!32%"32654&ښqj+t#3f^-@  GY?+?333333310 !32654&'!2ir}r+3( `kַv\w #P@)## %$FY FY"  ??3+3?393?+33339333104&#"66$5474632^Z9@nxZJֺNOa a#zy4 m X@,"!  HYHY?+3??+3?93333333339333102!327#"&'!&&#"56ZrP)J39F=14Un}4hF88;rm3q{%@5 Fu`F>FA@   FY ??3+3?3?33339333106654!!$!PN#<& !3ŭ ;m{^'?@ %%) (! FY?3+33?39/333393910"&'##"47!3265!3265!z) .w0@%}c`SLLT^d}%@1iind.Ѥt'هs3 &j #&+55&j' +&+55\^&RTB"&+5^&TN&+5m{^&T50&+5V&(jR !&+55)R@*   LYLYMY?+??+39/+3339392910"'3266554&#!!!!!!2mtWcI62S_ZJ\&+D7YG^νTs&avR&+5w#?@  LYLY LY?+?+9/+33339910"!!327# 4$32'&J y ɼjzMloWɿM(#jW70%<^6B,9V&,j"R !&+55hR-#Q@* %$#LY LYLYLY?+?+?+9/+33399333103 !!!'"'5326!32654&##s'i>_T@:35>7[ X^HcaW Hefc[R@*   LY LY LY?+??39/++33333933310!!!!!!!3 32654&##i#65s'X^Hw=aefeY)F@#   LY LY ?3?+39/+333933910!4&#!!!!!!2FPZJYG^Ѻ`s&vR&+59&6^R&+5V= 2@  LY'??3+?333339310!!!!!!!=TR65VL$ ?@  LY LY LY?+?+9/+333339103 !!!!32654&##z8VhO7HefeY%Ta V Q@(     ' LY LY?+?+33?33333939393103!3!!!! q)Tl ];"COLTV^(T@(       ?33?339333333332333393333310!!!!!!?!@<<B^&J@% !(!'MY $$MY$ MY ?+?+9/+93339933910! '3 54&##532654&#"'6$32ȫ^nq{ԅ}`O-3ahXfKYwSM,@  ?2?39933339910!3!!4#! sZ>VJ&6R&+5` 4@    ?3?39333233333310!!!!!`6 J<B=1@  LY LY??+?+3339310!!!'"'5326!=>_T@:35>7[ caW 0f+w2=n3w&)y79E@!    LY?+?39333393939310#"'3267!379@    LY '??+33?33/3333339310!!3!!!!!5"68@`LJu A@!  LY LY LY?+?+9/+33393310!!!!3 32654&##uV{8/hPaefeY A@   LY LY?+?39/+?333339310!!!3 32654&##!!p6d5NQC5beffXy 2@ LY LY?+?9/+3333310!!!3 32654&##V6z80hO7aefeYHI@&  LY    LY LY?+?+9/_^]+33333910"'63 !"'3267!5!&&)c]bEc x8'gq}KMQ@+    LY LY    LY?+??9/_^]+?+3333393310! !!!!! 3 4&#"6"I<N+LwM>!3x Q@(   MY LY  ?3?+9/+933339339310!&&54$!!!#"33| ʙx12юJ1VdapV;uD\%#D@"% !!$ FYGYHY?+?+9/+933333310%6%36632! 2#"\%7,#~|=5d16kY5(1P{RXox+#2Q)^ N@'" !JY JY  JY ?+?+9/+93333393910#!!24&##3264#!326qnw=ffaead9Zc^B;If8^@FY??+33310!!-^^o1^I@%   FY # FY ?+33?3?+333399339310%#!!!36!3\WMw^`op$\bsH^R@'      ?33?339333333223333393333310!!!!!!;dVVd;?77FN#s(L@&'  #*)('('JY((  FY FY ?+?+9/+933399339102654&#"'6632# '532654&##5jzMPZw߉uV`v8=66&!-'9 "}efVE(.C>DA#^ ,@     ?3?39932339910!!47!o^FFw^#?&6&+5^ 6@   ?3?39333233333310!!!!}PE71^7^^5@  FY  HY??+3?+3339310!!!#"'5326! \|jD119M=Ny O!^:@     ?33?3993323393310!!#&''!!>!!6++13 !%,q>l nD^#MGn^ 3@  FY   ?3?39/+33333310!!!!!1V^R3^\sR^#@ FY?3?+333310!!!k^y^sS\sF/=^(@ FY??+3339310!!!5=^y^\\'P@( ! FY FY ??3+3?3+3?333393333310!$54%!4&'66>4&ŚXd/%d ^[od^ 4@   FY#??+3?333339310%3!!!!!N12^y{^-@ FY  ??39/+33333103267!!#"&5XM1jU^g( 8.!^ 5@  FY?+3?3333339310!!!!!!!!1w1w1^yyo^>@    FY#??+33?33/3333339310%3!!!!!!!!1w1w1^yyf^ A@!  JY FY JY?+?+9/+333933103 !!!54&##325gh^PyA:-^ C@! JY JY?+?39/+?3333393103 #!!4&##32!!ѓ11Xhg1^A:^^ 2@ JYJY?+?9/+33333103 !!!4&##321hg^A:Js?@   JY FYFY?+?+9/+33333910"'53267!5!&&#"'663 ҆nx ZkdwVK^EP{|?#-sI@&   GY FY  GY?+??9/+?+3333393310#"$'#!!36$3232654&#"1%bqobcpob13^R^ M@&     JYJY ?3?+9/+933339329310!!&&5463!!#33#"J-loϨnYKU-sbFOI\b&Hj 1&+55&j@6$$$('' GYJY  GY?+3??99//3+3+93333399339910"'53254&#"!#535!!!3632=kM;<{^VsϜ1;fʼnn/ǡS!&v&+5\sA@! JY FYFY?+?+9/+333339910 !2&#"!!3267!Xkis[ngOf#* JAz}˃}$,I\sVL&j &+55}M^Q@* ! JYFY HYJY?+?+?+9/+3339933310!##"'5326!32!4&##32- \|jD119M=#bay OP`A:^Q@)   FYJY JY ?3+?39/++3333393331032!!!!!!!4&##32^;1\1Dba3^RA:V@+   GY JY    ?3?99//3+3+9333339933910!!4#"!#535!!!3632ϴsϜ1;fP/ǡS!&v&+5?&\6&+5o^ 6@   #FY?+3?3?333393103!!!!!12x^yo}#@ LY??+333310!!!!! q6#@ FY??+333310!!!!!^1s&:CR&&+5!&ZC&&+5s&:vR&&+5!&Zvd&&+5V&:joR 3&+55&Zj 3&+55s&<C|R&+5!&\CY&+5R/333105!R\R/333105!R\R/333105!R\1N @  /39/3233310!5!5!5!NRR1@  ?33210'673'e5B#[q@ ?33210#72~E(?@ /33210%#7!4|A$ @  ?33210#&'7?%@;a Uw%@  ?323322210673!%673!e5B#e5B#[q[qw #@    ?323322210#7!#7!2~E2~E((? "@    /323322210%#7!#7!4|A$4|A$  { N@%     ??9/3339933339333993310%!5!%77777LB_{}@>           ??99//3339933333993333339333933333310%%!5'75!%%oK78L//L87K/-yxb)  /93104632#"&b욣ub9 #,@ $ TY! ?33+3333221074632#"&%4632#"&%4632#"&uZVS[\RT\GZWS[\RU\HZVS[\RT\TVXRO[YQTVXRO[YQTVXRO[Y?  "-7BCd@1.>8388E D)###C5 @+1;& ?32???333223/3329333293332103254#"#"&5!2%#3254#"#"&5!23254#"#"&5!2;-2``2-Y+-2``2-YP,2``2,X5}{}J}{}}{}j BR^0@/39/39333333210Rs=wwR^0@/39/39333323310'7s#;w\\w9u'Hw@ ??33210#+Jf *@     ??39299339104&#"#3363 D<9ZHǢIL@`qTe/#'V@+  RYNY NY ??+9/+9/3+333333333910!!!#53!!!!<ϕoRj%y@=  " &' ! RY !RYNYOY?+?+99/3+32+3993399333333939102&&#"!!!!!!5667#535#53546]NEPLggFJdKR#VVqsJl'*jUss)q@< #''% + +*QY NY&#&QY#!PY # # #NY??+99//3++3+?+3339339933391032654&##!#!! 27#"&5#5773!!B~T5uNSaXHhumh#3>lgGD==DG>Zud7f@IItZOJĨǤdeeddcc82)f_+-)$F@ "  %&""   /3/9/93399399333339310%2673#"&5556746324#"66+5X9Z@-       /3333322323333399392910'7#5!7!5!3!!1YPP`\OT۪V٪V9= :@     /2/9/339333333331035!5VTX9= 6@    /2/39/39333333331035! 5XT>JXP B@    ??9333993393333310#3P=r=r!fg)&IL)&IOh3? @  /3293210#"&'!32673Ysec ?gS[_}^ !@  GY?+3?33310"'53265!FuTFIMG1VT)^@  ?93210667!#^'PV1@^;@  /93210667!#^'K[V1@N!@  /93210!5673'NX1@)5  @   !?3?399331032654&#"!"&5!2%-12..21-X}|{{}3 J B@     ??9/3392999333399310##5!533!547}} 5ᗗAͤVblT9L@$  !?3?39/3393993939393102#"'53254&#"'!!6d27WQ?8m%84 *?@+-58@   !?3?39/39993399310#"&5%366322654&#"ٯ#C YJt;><9Dm5W+/G?6DjBT;J(@ ??399939310!5!TMJ)-5!-F@!%+%+  ./ (( !"?2?393939933993399102#"&5467&54632654'"6654&CLKB#GW:9;(A+B BA>=21 , 84 95!/333333333/3339333333333333339/333/39/3/339/393/399333333333933939332933333333333310!#%5!#533!5353!5!!5!5!#3#35!#35!35!#35#3#3#"&546323254#"%32##32654&##32654#"'53253T/0momImmmm0oowoooomm~smp.,;0m^{B.$*/;J1%Z^4+V}i0oo/mmmmmmoo;mmJoooo/yhIaCS1D D8QYb" "+%J fVr_cT*X@)%  +, (("""//99//3333/9933999939333210 54676654&#"63232654&#"TV,AgIOGRZ?>1HT;GFBIHCHEVW/2A1R~X8*P:/5K6DpJ;?HI>@IH}!&7L&+5))6v@="4 1 1*..((6  78GY44 **FY11FY1%FY?+?+9/+339/+9933939399333310&&#"!"&54654&#"'63232655'&$&546323e;F *0LZga\Ȣ,ߩ89r+-5i+*V^X?GKO!tьF@"   MY?+3??9333333393310>32&#"!!}>xhu_UB,(5C6PTB +'`/3^(l@5 ##  * )!!  FY &FY?3+39?+339/3339939393993310"'##"547!57!!4'!32655!326FS R??3@>\gTLLTg\fѲɰssu&0vT&+5B!&Pv,&+5&$[sV;u&D[r9&2R\XN  @  /39/393210#"&546324&#"326Nppqn6**600*6lnli-33--44yh+1@ ?2939392210467#"&767!#yIE%-%?BCJZ**RpJ%%-J'CW^)&I'IL/)&I'IO/wH@#     LY @ LY?+?+993/3393339910! ! 65!3 !"jRZ]-${=պszmk=2.\"#H@# $#   GY@ GY?+?+993/3393339910!"&5!265!32654&#"pG-Wi4m{zkl{zla1̍0EE-k}()9@  @LY?+?39/3/33323310665!# 5!3265^JF- k5jg¢!iJsJ@%  @KY GY??+9?39/+/339323310!'##"&5!3265!665!3)0s1V^r1GN- lMVsyyutfW!C!vR /23910#'6654&#"56632 K6*"AJi)Ϝ)G 3% " oR%}/10432#"٦TR疖GNs&(CzR&+5s&CTR&+5\b!&HC$&+5#!&C &+5w=2b@1++((00 4#3))  MY-&&LY ?3+39?3+3339/33339393310"'663 !"&'# !2&&#"327!3254&'ZDl@K )tMMt) JBlD[&SU6Hl!-1g]4^dSl"}O@(  MY LY   LY?+?99//+3+3333333339103 !!!5!5!!32654&##5{8V5yiPd7defeY'J@&  FYJY JY?+?39/++3333333339103 !!!5!5!!4&##3231g9hgyˤyA:R"U@,!$#LYLY! LY ?+??9/3+3?+333399339910!3267# #!!3!2&&#"!f Ъarhw6,|$dZWdw(%(#N=:g':s W@- " ! FY  FY FY?+??9/3+3?+333393339910"$'#!!36$32&#"!!3271[MVxdkZ ts3^R,$?qp~PE E@#     MY  ?33?39/+3333999222210!#!#!!!'df-{/u9 wwDdYE4^ L@%    JY  ?33?39/+3333393333999910#!#!!!!'&'bNPo #HZZ^uPW] t@9     LY  ?3333?9/+3393?3333339/39333399999910!#!#!!!!!!!'&'dg6{/u93\ wwwCDd'47^x@;  FY   ?3333??39/+339333339/339333399999910#!#!!!!!!!3&'oBBn#`553^RDI)F@B    LY MY ?22?9/33+39333+93333393339393393931036675!!&&'!!):9{)TCGV({ų$Ջ+%;|dqe{{9^@B    JY JY ?22?9/33+39333+93333393339393393931036675!!&&'!7!u(}[4Yy*t^8/6<^hZ} mjj {'MB ? DNm"#@V"  ! % $#% " "LYMY LY   ?333??9/39/++39333+933333233933393933939310!67!!!!5!!&&'!!P,36C9{)TCGV({3+%;|dqe{{9L^"#@U"  ! % $#% " "JYJY FY  ?333??9/9/+3+39333+933333233933393933939310!67!!!!5!!&&'!7!#u 3Yz)u^J0>]_\b)YhZ6ì{ԅϾSw`6NWe "')X)enahXfKYw6Lw(dN./#dL@Y4* 99 GEECCIIIB@ *0N?@@**M?{H3"6TJ~iholaKYUON0V4D|턄vpjzMPZA>]W9RVcd o"a_{ "}e'44*)@ADA8=66&!! l_)fL-muFw ?@ LY LY  LY?+?+9/+33339910! ! 267!"!&&iQQeHzmm|ۮ\s ?@ JY GY GY?+?+9/+33333310!"&5!2267!"!&&ap>ndbpm1̍0ttttqppqA@  LY ?3??+933333393310"!!67>32&B.@*9!+67\xVtF3GvsK'f@@    GY ??+?3933333393310!367>32&#"!?2 ,{3LkULH+' 3^Oo|Xj1,7s&v'R )&+55!&v *&+55w ".k@7  0)0#/ ,LY &LY  MY ?2?+3?393?+?+33222333939310!367!#"'532677! ! 326&#"N  G'ANM7AQy"LECK ^Rpg[u cd7{xxv\ )s"0k@7  2##2**1- GY-&GY&  GY ?2?+3?393?+?+33222333939310!367!#"'53267732654&#"!"&5!2M  H'AMO9@Qy";m{zkl{zl^Kwg[u cd7)̍0w91(P@*#'  !!* )#' 'LY@ LY?3+3?3+3333393910#"'$%66326632$%#"'9#qv.$D=5H1}E0-E'ff)(ss$FC{&<2,B&%**JMKKM\+T@, $$** !!- ,'$**FY@ FY ?3+33?3+33333393910#"&'&54763266326654&'#"&' H69G nj99+>SOPI>=6D1&5:;6'%#!RR">'+!3~/816Aw=1GY@PLO=cGRKNxRw>/-!pcenA6) 3;1bt6&-&]V:5:Z\R)@R@RDH54MH+AAHH# (##TS@,AHHEPEDDP,P,P15511;@   FY (@FY&?2+39?3+33323/99//9/3933333393339332910 32&&#"3273265#"'632!"'#"'&&#"#54>32356654.54632f|V?B%wlmv'A>V||z&g2.+ ":fT:pwN2B%,%NGNT)&< V$&-&^V ;4:Yw=B2@@H?<;4788;;++((00 B#A4??@95=<8<<@@))  MY-&&LY ?3+39?3+3339/23229333339393322310"'663 !"&'# !2&&#"327!3254&#'##'##'5'ZDXcGRKNxRw>/-!JT oYggggY*@A  )&%!""%%    ,+))&#''"&&* ?223?3323333933333939339993393229910!!366!36!!#'##'##'5f@% ? j`4ㅘ'R7117117P^ov6u>?;/XffffXw#3@  LYLY?+?+?3339310 4$32&&#"!267!ZMe[Z:NjWg':\s3@ GYGY?+?+?3339310&!2&#"327!Z!Xh~rw}* PB% hy ?/9910%'%7%7%LG㴁FGJ{J;{Z}9IĤ{{ @  /393210#"&543!632#6083m bm69+3G8u^s9H @  /29/392102>32#&&#"##5Nwp:in? +.IJ%-&6ua1;47X$@  /393939102&&546oGN%-%D1~UX:5 : V`MYX$@ /3939391056654.546320E%-%NGNT^V ; 5:Y) (6DR_m@JP4,H,,ck:&B&&^ k^VkVnod^WjgS``gIA;O7EE>LLZ-%3))"00ZZgg  /32/329/39/3332229/3332223322299932932932102#&&#"#62#&&#"#662#&&#"#66!2#&&#"#662#&&#"#66!2#&&#"#662#&&#"#6!2#&&#"#66]qOb@3/2),!$6::$,2?@ #037;(++;3# /3/393333339993333333210#6736673#&'5&&'5'766'677'&&&'7BF$a5Ia4GA݁ZBO݁ExbCExbC{LbRC&b'Z1BO݁GA܂!Ia5F$a5DnXb'XDnXbYFcbxF24bEV+!"[@-! #  " LY  '!?222??993+/33293339993210!3!!!!4#!#"&'!3267 sNZwYsce {>VTLgS[_ooN? !_@/  "  ! @  FY  #??+??39922/33293339993210!!!!47!#"&&'!3267o+މ)g  Yqgd^FFw^ὩJlN_[/N@( LY  LY  LY ?+?99//3+3+33333333910!!3 !!#535!32654&##+z8V6hO7!HefeYP@) JYJYJY??+9/39/++33333333391035!!!3 !!#4&##321ymhg5?oA:u@;    LY LY  ??9/2++99399399333393293999910'##!! 37'7654&##_]XsVr D:R)w>}p5Rou5Zmhs(@A!"$"##&&* )!$##"&"&GY GY?2+???99+9939939933992393393999910"'#!336632'"337'7654&p+6c^l4qhktfRe;JSSѠ{v!{dNl/P A@   LY  LY ??+9/3+3333333910!!!!#53PoʉTd^ A@   FY  GY ??+9/3+3333333910!!!!#53Lω^^yU@+  LY LY LY??+9/+?+393333393910"!!!632#"&'32654&m5Jk1nJ o ס/Ͱ ^Y@-  HYGY  HY?+3??+9/+93333339910%#"'3265!"!!!632zr-y1t}*.1JKD31^ Vn@6   LY  '?33??39333333+3/333333333933333910!!!!!#!!!?!@R=ը<<BLoX^i@4    FY  #??+?3?33933333/333333393333333910!!!!#!!!;d VVd;?77F^&N#s&1VJ@$    LY'??33+?3933/333333233910!!#!!!Gո6 J1 L<Bo5^M@&    FY#??+3??3933/333333233910!3!#!!}PE)71#^7^Pa@/      ?3?93333233393333339999910!!773!!#j|6zXdZcbGy^U@)        ?2?393333332233333999910!737!!#'!cthE>8.N\Nȱ?Mǿp7>8&=Jpb"W}L}{jz18\s*3@H" 220+0%%+++54+%0+0.2(.FY((GY 22 ""  GY JY ?+3+3/399?+9/+9933333339393933310327#"'#"32&#"327&&546324&#"6VN*;@HTb*y0CX8ohol *,-ZLgv4V"74OM9H~W@w&&9\s&F)Vy 6@  LYLY'??+?+393333310!!!!!!+sPs L/o=^ :@   FY FY#??+?+333933310!!!!!5=^fy<^5@  ??33?33333933310!!367!NP $"NM^I<`^@.   LY  ??39/3939+33333933339910!!!!!!5!1N??P\Z)^L@%    FY??33+3?33339939333310!!!!5!!367!#NP $"NM^I<`V^@.      LY'??3+3?39333/33332993239333910!!#!!!%ժ:V;5N5 L)+ o^g@3    FY  #?3??+39333?/33333399339399910!!!!#!!3ZZ ;#d)VHK@%@  ' LY LY?+?3+39/?333993310!!!!!!!!;i6+NTL/o7^D@"   FY FY  #??+3?3+3333993310!!!!!!#51^lyymVF@@   LY  LY'??+?39/+/333333310!!!#"&5!3267!+ʚ]5buRw6 L54&ɶ\jk!)J{o^@@  FY FY #??+?39/+/3333333103267!!!!#"&5XM1jU^g( 8.mJ@$    LY?3?9/333+3933333933310#"&5!367!!#q((5bmY6ʁnɶ\neH 3J5-{^J@$    FY?3?9/333+3933333933310#"&5!33367!!#F31}N^1iC}Zg)6f+@ LY ??39/+3333310!6632!4&#"!6[buOv3'Ǹjk *q^-@  FY ?3?9/+3333310!4#"!!66321jWH^D8.`!(c@3% &*) $""LY%@ LY LY?+3?9/3+3+99333333933310%2$7# #"&547333! !"!4&bLn}?5`)%d%\[ ҕ ]DKBU6ztYHX8u|Gݳ`s%g@5"#'&$! !  FYJY"@JY?+?9/3+3+99393333339333106$32!3267# ' 54733%"!&&N!jbN)`%^| w+-'(`E75Nsyp|V$+}@@#$$))!( - ,$''%%LY( @LY"MY"?3+3?9/3+3+99?3333933339939310&#"&547333! !32$7!"!4&?5`)%d%\[ ҼLnm~ (IztYHX8u|G]D@> duo`s '@C %%$  ) ( #&##!FY JY$@  !JY?+?9/3+3+9939?3333933339939310&&' 5473336$32!3267!"!&&ݵ)`!jb^| w(`E75N+-? +syp|B,&6uR&+5?&6/&+5X@,  !  LY MY  ??39/3+3?+33333393399310"!!7!32#"&'32654&Ko6X/nJ@Pס/Ͱ ^X@, GY  HY?+3??39/3+33333339939310%#"'32654&#"!!!2yr-y1t~2z1X'D3 ^ VI@%  'LY LYLY?+?+?+?/3332939310!!!'"'5326!!!=>_T@:35>7[ NucaW TLo^N@(FY HY FY#??+?+3?+/3329339310%!!!!#"'5326!+݉ \|jD119M=Ny OfC@" LY  LY?+3??39/+333333910%#"'3265!!!!!fKR~6C5Z/= ^E@"  HY FY??39/+?+333333310!!!!#"&'326711Lv@prlo3^R :VL@&    LY  LY '??3+?39/+/33293333310!!!!!!!!fN6C5 Lw=Jo^M@'    FY  FY #??+??39/+/33293333310!!!!!!!1+݉V^R3^mV=@  LY  'LY?+??39/+333333310!!!3#"&5!3267!]5buRw6V+4&ɶ\jk!){o^=@  FY  # FY ?+??39/+3333333103267!!!35#"&5XM1jU^g( op8.V!T@*   '   LY?33+?3993?/332933393310!#!!3!!!!46#!# ZoN L{uX^TL1oL^U@+  FY#??+?3?3993/332933393310%!!!#&''!!>!!+މ6++13 !%,q>l nD^#MGnB,&$6uR&+5V\?&D6)&&+5V&$jVR #&+55V;&Dj 8&+55%VuvA&(6R&+5\b?&H6&+5=@ LY  LY LY?+?+9/+33333310"6$3 ! 5!&&267!3pZ+ ӕ [G SEnuH#\ws=@ JY  JY FY?+?+9/+33333310%267! !"55!&&#"566Zcv >t<6ckXvun} 𔂒&2,$V&jR 1&+55\w&j 1&+55V&jXR '&+55&j '&+55^V&j-R <&+55N#&j >&+559jP@( MY  MY LY?+9?+9/+33339939310!!! '32654&##hP]h{Z\d O,5irf_9V^R@) FY  GY FY?+9?+9/+33333939310!5!#"'32654&##F\evbxP-3&MR&+5#&Mu&+5V&jR %&+55#&ju #&+55wV&2jR +&+55\&Rj /&+55w ?@ LY LY  LY?+?+9/+33339910! ! 267!"!&&iQQeHzmm|ۮ\s ?@ JY GY GY?+?+9/+33333310!"&5!2267!"!&&ap>ndbpm1̍0ttttqppqwV&~jR /&+55\&j 1&+55HV&j#R /&+55J&j /&+559&M1R&+5&\M&+59V&j1R )&+55&\j ,&+559s&SR &&+55!&\SR )&+55mV&jVR )&+55{&j# (&+55VT /@  LY LY'??+?+3333310!!!!T+TLo^ /@  FY FY#??+?+3333310!!!!-^f^V&j5R -&+55-&j ,&+55/P& >+5^& >+5&;>+5  ^&[>+5Va@1      LY?3?9/3+3399333393393333310!!!!!!!!q)V;5N'hN)j ^i@5       FY?3?9/3+33993333933939393103!!3#!!#fZZ.+dJ=\b 4@ LYLY??+9/+33333104$!3!! #"33\8{5VPh1JYefe\qG\&S@)&& ( ' ##LYLY??9/+39/+3933339339104$!3!3265!#"&'#"&#"3265\* s5OVZN1l'+}H][Tb1BAfq-N=?Jil`fA;\ ,W@- $ .*-  (GYHY!GY?+3+?+999/?333393910"323&&5!32655!#"&''26754&#"^j 1PXWK-x>.Zofjqb(6&*fiKFfq=L7R!(R@)$ *$)MY&&!MY& LY?+?+9/3/+9333933339103265!#"&54&##53 54&#"'6!2SUYO1ùXkqo$eYfq-jmNXdΐ9\s(V@+'" * )('('JY (( HY  FY ?+?+99//9+9333933339102654&#"'663232655!#"&54&##5erMOZxׄWK-8=66%".&9 'zfq̙efVs[@.  !  MY MY LY  '??+?+9/+99333333933910!!!4&##53 54#"'6!2+ȶu*o$LjmѦdΐNo-s"]@/" $ #!""!JY "" FY# FY ?+??+9/9+99333333939102654&#"'6632!!!4&##5jzMPZwсoי8=66&!-'9 "}egFNI!D@!   #" LY LY ?3+3?+9/3339933103265!#"&5!'"'5326!OWZN2>_T@:35>7[ rwHCfq-=caW ^D@! ! FYHY ?3+3?+9/33399331032655!#"&5##"'5326!jPXWK- \|jD119M=/yJCfq OZ@-  LY LY ?+??99//+3933333333933103265!#"&'!!!!!=IUUI165}KFfq-=^Z@-  FY  HY?+??99//+393333333393310!!32655!#"&'5!!2NQUI-k^RHCfqV3^w@@! LYLY LY?+?9/++333393910!! 4$3 &&#"32655!5MkrhӚ5{gTk9*\s@@!   GYFY GY?+?9/++333393910!! !2&&#"!265!\E,\KH]*0V#'tc)b?@  LY  LY ?+?9/+3333939103265!#"&5!!!KVXL1sPs}KFfq-˾?/F^?@  FY HY?+?9/+333393910!32655!#"&'!5=PXVL-^KFfqX(R@)% "*"")%MYLY LY?+?+9/+93333933991046632&#"33#"32$7! $54675&&v΅z릪 a̷`i[COwQKfXhaga1/OʒN%s$N@'!! &%$$JY$$ FY FY ?+?+9/+93339993310#"!267! $54675&54$32&#"3HoX瀐o[RㅏDIy.(Mk 1э,(GhB7b&9 >+5^& >+5R&$gDVR;u&Dg&$f#R&+5V;&Df'&+5&$w!R &+55V&Dw )&+55&$xR &+55;&Dx 0&+55J&$y!R '&+55V&Dy <&+55b&$zR ,&+55V;&Dz A&+55Rs&$'KXRgD &+5VR; &D&Kg ##&+5&${)R &+55V;&D{ .&+55&$|'R  &+55V;&D| 5&+55X&$}'R +&+55V;&D} @&+55b&$~'R &+55V;&D~ ,&+55R} $!!!!&'#"&'3327432#"7jj{%!F ܦ/UUTR\D`|$/6}jGNVR;+&D'gN/&+5R&(g\Rbs&Hg&(fR&+5\b&Hf &+5`&(RR&+5\b&HR &+5&(wR &+55\&Hw "&+55&(xR &+55b&Hx )&+55J&(yR %&+55\&Hy 5&+55b&(zR *&+55\b&Hz :&+55Rs&('KRg&+5\Tb!&H&Kg)&+5B&,fR&+5u<&f&+5BR&,gR&LgwR&2g\Rs&Rgw&2fR&+5\&Rf&+5w&2wR &+55\ &Rw  &+55w&2xR #&+55&Rx '&+55wJ&2yR /&+55\&Ry 3&+55wb&2zR 4&+55\&Rz 8&+55wRs&2'gKR&+5\R!&R'gK #&+5ws&_vR&+5\!&`v}$&+5ws&_CdR'&+5\!&`C,&+5w&_fR"&+5\&`f'&+5w`&_RR"&+5\&`R'&+5wR&_g\R&`gR^&8gR^&Xg^&8f^R&+5&Xf&+5)s&avR&&+5s!&bv &+5)s&aCR&&+5s!&bC &+5)&afdR!&+5s&bf$&+5)`&aRR!&+5s&bR3#&+5R)&ag}Rs&bgR&<g^&\gV&<fR &+5&\f&+5`&<RR &+5&\R&+5\ &B!  /2]210&&'5!!&&'5!F>"-!d)I-!d)17H892H8-9 @   /3]29/10#&'#567!'673#pcrapg;5YU5CK[eAN[nYu  @  /]239/1067!#&'#7#&'53/pg<1~(arjiX@6SH,Ae`FwWpY- %@ /3]29/239310#'6654&#"5632#&'#567!!} 7B%+#%F^qȢpcrapg;5`r=t H)K[eAN1%)@ ! !!!/3]22/39/3/310".#"#663232673#&'#567!7$KHC(+ q kS%MHB))q jZSB0<!1o$0t}GQJN`E;1@   /]23910673#%#"&'332677F/\s àsXXr i`naNWS^L1@   /3]2910#&'53%32673#"&'je/FrY[p Uz`i3K_WS1 -@   /33/]2393]210#'6654#"563232673#"&'126k 3';5FVdrY[p 4A)n )hCK_WS1 $+@"@ H"     /3]22/3+2/3103273#"&'%".#"#663232673jb $KHC+( q b\%MHB))q h;F1$.dy$0mp +@  /?39393393104&'3#"'5326NFOB#pJR<7#-4mB54&#"'6632!?pZ,PTTXz mTP03@MHwZx{NB&V@-"( ""'PY |  $$OY$& OY %?+?+9/_^]+93333933910!"'32654&##532654#"'6!2UdoqH[+$O+6hsgVYl0;Րys F@"  PY %??39/3+3933393339910%#!!5!3!5467#y#Vs2"0%d5rP@(OYNY OY%?+?+9/+33333933993102!"'3 54!"'!!76fO^5({7#=bO *5 BHP7Pp,@NY$??+93339310!!%/HJBJ%F@# ##&'  PYOY&PY%?+?+9/+999399210!"'532667##"&5432%"32654&JCT\j :r `lbd^}PV[ë^L|j|{Pw)&IIR#4@@4$,+,-0&(() )200//)562&&,*$$)  0))*5-*?33/339/33/3399333/993939223399333310#"'532654&'.54632&&#"##33#7#uoXsX-/#%lH'r_p48<'%-*JiFdq+6'#&57@7Cq7D\7F\7G7Hq7J7777777 7W7Xq7Y\7_7`q7b7q7\7q7 \7!q7"\7#q7%q7&\7'q7(\7)q7*\7+q7,\7-q7.\7/q70\71q72\73q74\76q78q7:q7<@<C<D<F<G<H<J<< <W<X<Y<_<`<b<<<< <!<"<#<%<&<'<(<)<*<+<,<-<.</<0<1<2<3<4<6<8<:<<<@<B<D<I<J<K<L<M<N<O<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<^<_<`<b<d<f<h<j<l<n=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_>-DD DD EE EYEZE[E\E]EE7E<E>E@EEEE EpF)F )F)F )HH HYHZH[H\H]HH7H<H>H@HHHH HpI{I {I{I {KK KK NFNGNHNRNTNNNNNNNNNNNNNNNNNNNNNNNNNNNNHN`N6N8N:N<N@NBNDNJNLNNNRNTNVNXNZN\N^N`PP PP QQ QQ RR RYRZR[R\R]RR7R<R>R@RRRR RpSS SYSZS[S\S]SS7S<S>S@SSSS SpURU RUDUFUGUHUJURUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDUFUHURU RUYU`UU U"U&U(U*U,U.U0U2U4U6U8U:U<U@UBUDUJULUNURUTUVUXUZU\U^U`W)W )W)W )YRY RYYY")YRYY RY ZRZ RZZZ")ZRZZ RZ [F[G[H[R[T[[[[[[[[[[[[[[[[[[[[[[[[[[[[H[`[6[8[:[<[@[B[D[J[L[N[R[T[V[X[Z[\[^[`\R\ R\\\")\R\\ R\ ^-q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq-{&*24G_IKMOQSUWY[]_-{-{-{-{$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjln$;=;=?C X!#%')+-/13             YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p   YZ[\]7<>@ pR R")R R  YZ[\]7<>@ pR R")R R q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  &*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_$79:;<=$&68:;=?C X!#%')+-/13oqsR R "@E=K=N=O=`={R R$79:;<=$&68:;=?C X!#%')+-/13oqs-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p  &*24G_IKMOQSUWY[]_FGHRTH`68:<@BDJLNRTVXZ\^`FGHRTH`68:<@BDJLNRTVXZ\^`\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqsR R "@E=K=N=O=`=R R\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs  $79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs-{R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`$$$$")$$q$&$*$2$4$7)$D\$Fq$Gq$Hq$Jq$P$Q$Rq$S$Tq$U$V$X$Y$Z$[$\$]$q$q$q$q$q$q$$$$$$$$q$\$\$\$\$\$\$q$q$q$q$q$q$q$q$q$q$q$$$$$$q$\$q$\$q$\$$q$$q$$q$$q$q$q$q$q$q$q$q$$q$$q$$q$$q$$$$ $$q$$q$$q$$q$$$$!$$)$&)$+$-$/$1$3$5$7$<$>$@$Cq$D\$F\$G$Hq$J$$$$$$$ $W$Xq$Y\$_$`q$b$q$\$q$ \$!q$"\$#q$%q$&\$'q$(\$)q$*\$+q$,\$-q$.\$/q$0\$1q$2\$3q$4\$6q$8q$:q$&@&Cq&D\&F\&G&Hq&J&&&&&&& &W&Xq&Y\&_&`q&b&q&\&q& \&!q&"\&#q&%q&&\&'q&(\&)q&*\&+q&,\&-q&.\&/q&0\&1q&2\&3q&4\&6q&8q&:q&(@(Cq(D\(F\(G(Hq(J((((((( (W(Xq(Y\(_(`q(b(q(\(q( \(!q("\(#q(%q(&\('q((\()q(*\(+q(,\(-q(.\(/q(0\(1q(2\(3q(4\(6q(8q(:q(8@8C8D8F8G8H8J88 8W8X8Y8_8`8b8888 8!8"8#8%8&8'8(8)8*8+8,8-8.8/808182838486888:8<8@8B8D8I8J8K8L8M8N8O8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8b8d8f8h8j8l8n9R9 R999")9R99 R9 :::"):$:&:*:2:4:D:F:G:H:J:P:Q:R:S:T:U:V:X:]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::!:+:-:/:1:3:5:<:>:@:C:D:F:G:H:J:: :W:X:Y:_:`:b:::: :!:":#:%:&:':(:):*:+:,:-:.:/:0:1:2:3:4:6:8:::<:@:B:D:I:J:K:L:M:N:O:Q:R:S:T:U:V:W:X:Y:Z:[:\:]:^:_:`:b:d:f:h:j:l:n;&;*;2;4;;;;;;;;;;;;;;;;;;;;G;_;I;K;M;O;Q;S;U;W;Y;[;];_=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_?&?*?2?4????????????????????G?_?I?K?M?O?Q?S?U?W?Y?[?]?_CqC qC&C*C- C2C4C7qC9C:C<CCCCCCCCCCCCCCCCCCCCC$qC&qC6C8C:CGCCCCCqC qC_CICKCMCOCQCSCUCWCYC[C]C_CoCqCsCqDD DD E-{GGG$G7G9G:G;G<G=GGGGGGGGGGG$G&G6G8G:G;G=G?GCGGGGGGG GXGGG!G#G%G'G)G+G-G/G1G3GoGqGsGVqV qVfVmVqqVrVsVuVxVqV qVT[[[V[_[b[d[i[p[q[r[t[u[x[[[ [T\\\V\_\b\f\i\m\s\v\y\z\{\|\}\~\\\\\\\\\\\\\\\\\\\\ \!]q]r]x]T^^ ^^ _q_ q_f_m_qq_r_s_u_x_q_ q_T```V`_`b`i`t`` aaaaV\a_\ab\afai\amasavayqaza{a|a}a~qaaaaaaaaaqaaqaqaaqaaaaaqaaaaaaa a!aSbqb qbfbmbqqbrbsbubxbqb qbTdfdmdsfffVf_fbfdfifpfqfrftfufxfff fThfhmhshhiqi qifimiqqirisiuixiqi qiTmmmVm_mbmdmimpmqmrmtmumxmmm mToooVo_obodoiotooo qqqqV\q_\qb\qfqi\qmqsqvqyqqzq{q|q}q~qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq q!qSrrrVr_rbrfrirmrsrvryrzr{r|r}r~rrrrrrrrrrrrrrrrrrrr r!sssVs_sbsdsispsqsrstsxsss sTtftmtsttuuuVu_ubufuiumuu vqvrvxvTxxxVx_xbxfxixmxsxvxyxzx{x|x}x~xxxxxxxxxxxxxxxxxxxx x!y){{ {{ || |||| ~) y~     y~ y~         y~       n| q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqql~    n|   n|   n| l|~  qff jlrqs~ffqqq q  q q qqq qn|q qq  r|  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq)l|~    l|~   rsz|  rsv  l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqqqff jlrqs~ffqqq q  q  rsz l|~  ))  n|   n|  rsz|  rsz|   ) js      j  )j       js   s  j        m  m         js    m  m  j   sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R 7$&q7$&q7$&q$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q                        q  q  q                             ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q    q    q    q q  q   !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) & * 2 4 7q 8 9 : <                         $q &q * , . 0 2 4 6 8 : G f m qq r s u x  q  q   q  \ q        T _ a l |\ ~        q    q    q  \  \    \     \        q  I K M O Q S U W Y [ ] _ a c e g i k m o q s q!q!r!x!TSSSS TTTVT_TbTfTiTmTsTvTyTzT{T|T}T~TTTTTTTTTTTTTTTTTTTT T!XqX qX&X*X- X2X4X7qX9X:X<XXXXXXXXXXXXXXXXXXXXX$qX&qX6X8X:XGXXXXXqX qX_XIXKXMXOXQXSXUXWXYX[X]X_XoXqXsXqYY YY ZZZVZ_ZbZdZiZpZqZrZtZuZxZZZ ZT`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`RbIfbWfbYfbZfb[fb\fbfb%fb'fb7fbfbfb4fb5fb]fb^fbpfbfbfjj jj llllllllllllllllllllll lrlslzl|lllllllllllllllllllllllllllll llllllmmmmmmm msmmmnn nnnnnnnnn n|nnnnnnnnnnnnnnn nnnoo ooooooooo omooooooooooooooooooooooooooopppppplp~ppppppppppppppppp p ppprqr qrrrqrrrrrrrqr qrnr|rrrrrrrrqrrrrrrrrrrrrrrrrrrr qrrqrrrsqs qssssssssssssqs qsjsms}sssssssssssssssssssssssssssss s ssssstqt qtttqtttttttqt qtnt|ttttttttqttttttttttttttttttt qttqtttuqu quuuuuuuuuuuuqu qujumu}uuuuuuuuuuuuuuuuuuuuuuuuuuuuu u uuuuuv vx xzzzz zzzzz z|q|q||||||||q| q|r|s|||||| | ||||}} }}}}}}}}} }}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~ ~r~s~z~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~  qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  s s s rsz|    rsz|    rsz|  sl~  )    |   m rsv    )))))) jklqrsuwy}~)))))    ) js   f |   l{=}~j    )l{=}~j  l|~  j  l|~  j  l|~  j  )  )))))) jklqrsuwy}~)))))    ) js  \ \fH\ \|qqH HHq qq qmqq   l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )) jklqrsuwy}~))     s)) jklqrsuwy}~))     sl{=}~j  )  )    |         l|~  j   f m| )  )  )  q qqq qn|q qq  q qqq qn|q qq       rsz|    rsz|   l|~  j    )   rsz|    rsz|    rsz|    rsz|   qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )))))) jklqrsuwy}~)))))    ) js  l{=}~j  l|~  j          q             r v |       q                                                                           q             r v |       q                                      )   q rv|q    q rv|q    r    r|   )  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq     !q! q!&!*!- !2!4!7q!9!:!<!!!!!!!!!!!!!!!!!!!!!$q!&q!6!8!:!G!!!!!q! q!_!I!K!M!O!Q!S!U!W!Y![!]!_!o!q!s!q"" "" #q# q#&#*#- #2#4#7q#9#:#<#####################$q#&q#6#8#:#G#####q# q#_#I#K#M#O#Q#S#U#W#Y#[#]#_#o#q#s#q$$ $$ %q% q%&%*%- %2%4%7q%9%:%<%%%%%%%%%%%%%%%%%%%%%$q%&q%6%8%:%G%%%%%q% q%_%I%K%M%O%Q%S%U%W%Y%[%]%_%o%q%s%q&& && 'q' q'&'*'- '2'4'7q'9':'<'''''''''''''''''''''$q'&q'6'8':'G'''''q' q'_'I'K'M'O'Q'S'U'W'Y'[']'_'o'q's'q(( (( )q) q)&)*)- )2)4)7q)9):)<)))))))))))))))))))))$q)&q)6)8):)G)))))q) q)_)I)K)M)O)Q)S)U)W)Y)[)])_)o)q)s)q** ** +q+ q+&+*+- +2+4+7q+9+:+<+++++++++++++++++++++$q+&q+6+8+:+G+++++q+ q+_+I+K+M+O+Q+S+U+W+Y+[+]+_+o+q+s+q,, ,, -q- q-&-*-- -2-4-7q-9-:-<---------------------$q-&q-6-8-:-G-----q- q-_-I-K-M-O-Q-S-U-W-Y-[-]-_-o-q-s-q.. .. /q/ q/&/*/- /2/4/7q/9/:/</////////////////////$q/&q/6/8/:/G/////q/ q/_/I/K/M/O/Q/S/U/W/Y/[/]/_/o/q/s/q00 00 1q1 q1&1*1- 121417q191:1<111111111111111111111$q1&q16181:1G11111q1 q1_1I1K1M1O1Q1S1U1W1Y1[1]1_1o1q1s1q22 22 3q3 q3&3*3- 323437q393:3<333333333333333333333$q3&q36383:3G33333q3 q3_3I3K3M3O3Q3S3U3W3Y3[3]3_3o3q3s3q44 44 5-{66 6Y6Z6[6\6]6676<6>6@6666 6p7-{88 8Y8Z8[8\8]8878<8>8@8888 8p9-{:: :Y:Z:[:\:]::7:<:>:@:::: :p;-{<< <Y<Z<[<\<]<<7<<<><@<<<< <p=-{>> >Y>Z>[>\>]>>7><>>>@>>>> >p?-{@@ @Y@Z@[@\@]@@7@<@>@@@@@@ @pA-{BB BYBZB[B\B]BB7B<B>B@BBBB BpC-{DD DYDZD[D\D]DD7D<D>D@DDDD DpIII$I7I9I:I;I<I=IIIIIIIIIII$I&I6I8I:I;I=I?ICIIIIIII IXIII!I#I%I'I)I+I-I/I1I3IoIqIsIJJ JYJZJ[J\J]JJ7J<J>J@JJJJ JpKKK$K7K9K:K;K<K=KKKKKKKKKKK$K&K6K8K:K;K=K?KCKKKKKKK KXKKK!K#K%K'K)K+K-K/K1K3KoKqKsKLL LYLZL[L\L]LL7L<L>L@LLLL LpMMM$M7M9M:M;M<M=MMMMMMMMMMM$M&M6M8M:M;M=M?MCMMMMMMM MXMMM!M#M%M'M)M+M-M/M1M3MoMqMsMOOO$O7O9O:O;O<O=OOOOOOOOOOO$O&O6O8O:O;O=O?OCOOOOOOO OXOOO!O#O%O'O)O+O-O/O1O3OoOqOsOQQQ$Q7Q9Q:Q;Q<Q=QQQQQQQQQQQ$Q&Q6Q8Q:Q;Q=Q?QCQQQQQQQ QXQQQ!Q#Q%Q'Q)Q+Q-Q/Q1Q3QoQqQsQSSS$S7S9S:S;S<S=SSSSSSSSSSS$S&S6S8S:S;S=S?SCSSSSSSS SXSSS!S#S%S'S)S+S-S/S1S3SoSqSsSUUU$U7U9U:U;U<U=UUUUUUUUUUU$U&U6U8U:U;U=U?UCUUUUUUU UXUUU!U#U%U'U)U+U-U/U1U3UoUqUsUXIRXWRXYfXZfX[fX\fXfX%RX'RX7fXfXfX4RX5RX]RX^RXpfXRXRZIRZWRZYfZZfZ[fZ\fZfZ%RZ'RZ7fZfZfZ4RZ5RZ]RZ^RZpfZRZR\IR\WR\Yf\Zf\[f\\f\f\%R\'R\7f\f\f\4R\5R\]R\^R\pf\R\R^IR^WR^Yf^Zf^[f^\f^f^%R^'R^7f^f^f^4R^5R^]R^^R^pf^R^R`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`Raaa$aaaaaaaaaaCaa aXaaa!a#a%a'a)a+a-a/a1a3fIffWffYffZff[ff\ffff%ff'ff7ffffff4ff5ff]ff^ffpfffffhIfhWfhYfhZfh[fh\fhfh%fh'fh7fhfhfh4fh5fh]fh^fhpfhfhfjIfjWfjYfjZfj[fj\fjfj%fj'fj7fjfjfj4fj5fj]fj^fjpfjfjflIflWflYflZfl[fl\flfl%fl'fl7flflfl4fl5fl]fl^flpflflfnIfnWfnYfnZfn[fn\fnfn%fn'fn7fnfnfn4fn5fn]fn^fnpfnfnfooo")o$o&o*o2o4oDoFoGoHoJoPoQoRoSoToUoVoXo]oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooo!o+o-o/o1o3o5o<o>o@oCoDoFoGoHoJoo oWoXoYo_o`oboooo o!o"o#o%o&o'o(o)o*o+o,o-o.o/o0o1o2o3o4o6o8o:o<o@oBoDoIoJoKoLoMoNoOoQoRoSoToUoVoWoXoYoZo[o\o]o^o_o`obodofohojolonpRp Rppp")pRpp Rp qqq")q$q&q*q2q4qDqFqGqHqJqPqQqRqSqTqUqVqXq]qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqq!q+q-q/q1q3q5q<q>q@qCqDqFqGqHqJqq qWqXqYq_q`qbqqqq q!q"q#q%q&q'q(q)q*q+q,q-q.q/q0q1q2q3q4q6q8q:q<q@qBqDqIqJqKqLqMqNqOqQqRqSqTqUqVqWqXqYqZq[q\q]q^q_q`qbqdqfqhqjqlqnrRr Rrrr")rRrr Rr sss")s$s&s*s2s4sDsFsGsHsJsPsQsRsSsTsUsVsXs]ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss!s+s-s/s1s3s5s<s>s@sCsDsFsGsHsJss sWsXsYs_s`sbssss s!s"s#s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s6s8s:s<s@sBsDsIsJsKsLsMsNsOsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sbsdsfshsjslsntRt Rttt")tRtt Rt { {{ {")$q&*247)D\FqGqHqJqPQRqSTqUVXYZ[\]qqqqqqq\\\\\\qqqqqqqqqqqq\q\q\qqqqqqqqqqqqqqq qqqq!$)&)+-/1357<>@CqD\F\GHqJ WXqY\_`qbq\q \!q"\#q%q&\'q(\)q*\+q,\-q.\/q0\1q2\3q4\6q8q:q9 9B#FQ i uR  . .2*` r   F , \ t  (2 8Z \ \ TJDigitized data copyright 2010-2011, Google Corporation.Open SansBoldAscender - Open Sans Bold Build 100Version 1.10OpenSans-BoldOpen Sans is a trademark of Google and may be registered in certain jurisdictions.Ascender Corporationhttp://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlLicensed under the Apache License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0Digitized data copyright 2010-2011, Google Corporation.Open SansBoldAscender - Open Sans Bold Build 100Version 1.10OpenSans-BoldOpen Sans is a trademark of Google and may be registered in certain jurisdictions.Ascender Corporationhttp://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlLicensed under the Apache License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0ff      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.notdefnullnonmarkingreturnspaceexclamquotedbl numbersigndollarpercent ampersand quotesingle parenleft parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon semicolonlessequalgreaterquestionatABCDEFGHI.altJKLMNOPQRSTUVWXYZ bracketleft backslash bracketright asciicircum underscoregraveabcdefghijklmnopqrstuvwxyz braceleftbar braceright asciitildenonbreakingspace exclamdowncentsterlingcurrencyyen brokenbarsectiondieresis copyright ordfeminine guillemotleft logicalnotuni00AD registered overscoredegree plusminus twosuperior threesuperioracutemu paragraphperiodcenteredcedilla onesuperior ordmasculineguillemotright onequarteronehalf threequarters questiondownAgraveAacute AcircumflexAtilde AdieresisAringAECcedillaEgraveEacute Ecircumflex Edieresis Igrave.alt Iacute.altIcircumflex.alt Idieresis.altEthNtildeOgraveOacute OcircumflexOtilde OdieresismultiplyOslashUgraveUacute Ucircumflex UdieresisYacuteThorn germandblsagraveaacute acircumflexatilde adieresisaringaeccedillaegraveeacute ecircumflex edieresisigraveiacute icircumflex idieresisethntildeograveoacute ocircumflexotilde odieresisdivideoslashugraveuacute ucircumflex udieresisyacutethorn ydieresisAmacronamacronAbreveabreveAogonekaogonekCacutecacute Ccircumflex ccircumflexCdotcdotCcaronccaronDcarondcaronDcroatdcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGbrevegbreveGdotgdot Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbar Itilde.altitilde Imacron.altimacron Ibreve.altibreve Iogonek.altiogonekIdotaccent.altdotlessiIJ.altij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotLslashlslashNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautOEoeRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexScedillascedillaScaronscaron Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflex YdieresisZacutezacute Zdotaccent zdotaccentZcaronzcaronlongsflorin Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccent circumflexcaronmacronbreve dotaccentringogonektilde hungarumlauttonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos.alt Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIota.altKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9Iotadieresis.altUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronpirhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonos afii10023 afii10051 afii10052 afii10053 afii10054 afii10055.alt afii10056.alt afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109 afii10110 afii10193 afii10050 afii10098WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveendashemdash afii00208 underscoredbl quoteleft quoterightquotesinglbase quotereversed quotedblleft quotedblright quotedblbasedagger daggerdblbulletellipsis perthousandminutesecond guilsinglleftguilsinglright exclamdblfraction nsuperiorfranc afii08941pesetaEuro afii61248 afii61289 afii61352 trademarkOmega estimated oneeighth threeeighths fiveeighths seveneighths partialdiffDeltaproduct summationminusradicalinfinityintegral approxequalnotequal lessequal greaterequallozengeuniFB01uniFB02 cyrillicbrevedotlessjcaroncommaaccent commaaccentcommaaccentrotate zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni1F4Duni02F3 dasiaoxiauniFB03uniFB04OhornohornUhornuhornuni0300uni0301uni0303hookdotbelowuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BF uni04C0.altuni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CE uni04CF.altuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7 uni1EC8.altuni1EC9 uni1ECA.altuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABuni030Fcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCcyrillicbighookLCone.pnumzero.osone.ostwo.osthree.osfour.osfive.ossix.osseven.oseight.osnine.osffuni2120Tcedillatcedillag.altgcircumflex.alt gbreve.altgdot.altgcommaaccent.altIIgraveIacute Icircumflex IdieresisItildeImacronIbreveIogonek IdotaccentIJ IotatonosIota Iotadieresis afii10055 afii10056uni04C0uni04CFuni1EC8uni1ECA   46latnMOL ROM  nlatnMOL (ROM B      ligaligaligalnumlnumlnumloclloclonumonumonumpnumpnumpnumsalt saltsaltss01"ss01*ss012ss02:ss02@ss02Fss03Lss03Rss03Xtnum^tnumftnumn    &.6>FNV^Pz2HJJ.,ZgwEG      !$%IJ6 "(^IO]ILI5O4LI^V0R *H C0?1 0 +0a +7S0Q0, +7<<<Obsolete>>>0!0 +iV˱H,[ ]0z0b8%a&Z0  *H 0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0 070615000000Z 120614235959Z0\1 0 UUS10U VeriSign, Inc.1402U+VeriSign Time Stamping Services Signer - G200  *H 0ĵR`)J[/Kk5TX56^bMRQ4q{f*j 7٘tvJcEG.k NK+XJ,XB-uލǎlLgrIž`<cxi{-004+(0&0$+0http://ocsp.verisign.com0 U003U,0*0(&$"http://crl.verisign.com/tss-ca.crl0U% 0 +0U0U0010 UTSA1-20  *H PK$ $- 7 ,Za񑑳V@뒾89u6t:O7ʕBǠWdB5N3M'L8MxSݤ^ ⥾`߭(ǥKd[98"3/!?DA e$HDT\y>]r},CS}=*:Om ]^SWp`+nx'4[^I2300-GߍRFCmH 10  *H 01 0 UZA10U Western Cape10U Durbanville10 U Thawte10U Thawte Certification10UThawte Timestamping CA0 031204000000Z 131203235959Z0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0"0  *H 0 ʲ }uNgadڻ30X~k6xw~o< hlʽR-H=]_/kLR`@~ ?Ǵ߇_zj1.G 1s W-x43h/Š*Ë!fXWou<&]'x1"ijGC_^|}bM "Vͮv M٠h;004+(0&0$+0http://ocsp.verisign.com0U00AU:0806420http://crl.verisign.com/ThawteTimestampingCA.crl0U% 0 +0U0$U0010U TSA2048-1-530  *H JkXD1y+LͰXn)^ʓR G'/8ɓN"b?7!Op18UN$ҩ'NzaA*^ݻ+>W~ +;R8'?J00eeR&.Y)"\0  *H 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 090521000000Z 190520235959Z01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0"0  *H 0 g`IoV|f^ q-!ќPL"5; .Z|=;%X{ ξ'tag'MjaXy'M4+G Df$fO8TrfujIh8y 0,`Hת809:|@T/ܨR>+!\ P4.M^%Ԍn|)]1ZՌgX5+!`x^{`W ]A cT`C!00U00pU i0g0e `HE0V0(+https://www.verisign.com/cps0*+0https://www.verisign.com/rpa0U0m+ a0_][0Y0W0U image/gif0!00+kπjH,{.0%#http://logo.verisign.com/vslogo.gif0U%0++04+(0&0$+0http://ocsp.verisign.com01U*0(0&$" http://crl.verisign.com/pca3.crl0)U"0 010UClass3CA2048-1-550Uk&pȡ?-50  *H ݔAaix0Ɛ<~B$s/DrPU nQj71ܥ-OM2NgUejzd8xEv1z`³]fvYI8VAwX00fgymPSo0  *H 01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0 100729000000Z 120808235959Z01 0 UUS10U Massachusetts10 UWoburn10U Monotype Imaging Inc.1>0<U 5Digital ID Class 3 - Microsoft Software Validation v210U Type Operations10UMonotype Imaging Inc.00  *H 0Di|U 25L3^ L*8ט@I "SOCʋVnH9c;$5}rGWyˊJ@p-5cįפ {uePd"}KXEMYLM00 U00U0DU=0;09753http://csc3-2009-2-crl.verisign.com/CSC3-2009-2.crl0DU =0;09 `HE0*0(+https://www.verisign.com/rpa0U% 0 +0u+i0g0$+0http://ocsp.verisign.com0?+03http://csc3-2009-2-aia.verisign.com/CSC3-2009-2.cer0U#0k&pȡ?-50 `HB0 +700  *H N"gA~™cjrb<8=_G_[KI  VD 5< D`E*oL;4gpZ9\Zl5|eKmIp=b۴A~}n"w6MZ S1+(RzkwD ]%,͊0>KyʦN $ 񺐶\<'MU,:&lDOw( 0{ *H  1l0h0g0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA8%a&Z0 +]0 *H  1  *H 0 *H  1 110505165508Z0# *H  1񤟓 A{l˨ߐ`0  *H b=Di?=դZ ޝ'WBʅmo*s^sz-A&FxӂkVG}|`A_-`E4QV 2gSgugoconvey-1.6.1/web/client/resources/fonts/Open_Sans/OpenSans-Italic.ttf000077500000000000000000006376401266412531300261310ustar00rootroot000000000000000DSIGZw@*,tGDEF&& GPOS 77&,8GSUB+=&dOS/2M=`cmap)/hcvt fpgm~agasp#%glyfPXT%headGc<6hhea t$hmtxkernT+ ~C6locaM0VmaxpC nameSt"post7l&+prepT _< cHK b  y W/\k33f @ [(1ASC X H ++?hHX\BHRH`jh7+hyh/h h/hhPhhh`hb+hyhhyjoqVTVVVjmV#uVVTTVV'hb'?JJj#5'Do?b;bbb;;99;;}bb+;mZqbu;hhshhhhh;oXh7mh`wo=V{BWjqqqqqqVVVVTHThwhhhhVbbbbbbbbbbbb;;;;Z;}b}b}b}b}bh}=qqqq;;qbqbqbbbbbTVbTHbVbVbVbVbVbjjjjmV;mV;;;;;;#uV99V9VV9VD9T;T;T;)]T;}b}b}bbV+;V+V+;'m'm'm'm;Z+hqhqhqhqhqhqu;???3hqbbw}='mooHoD'uooPooqGG`\GBTqhqVVwV?mVuVwTT#oVV+'b?;qhbTmJ?b;Xbqh9bR}bLbbXL\bbqh}bbVVV'#7VVyVoVqZVVVV5BVVyV'TmVoVV'RTTTJVoVVbTdNb7bb}qq;L=;}b;b;;NbqqqqT'?;7b;7bm;;9;;;qV;uuu;777'1\{\}\{}ZN+DXD h-h7h?9;yVS]Rww hdb'hshhh\\Vy!TT\}/VmT;qb;sZ3}bq.VVbqhj\V;;V;HRVh;B}by`y` ybbbhbu{Tw}))VqmV'VN V;B}T+;yT5uV9{NjV; V;V;bb;bm+7BZZoT;PP5V;3JmV;yV;T=qbqbbVbJT;JT;5B}5uVqVq}b}b}b;;;qV;JV'`bfb+sV;bDVPy?7qbqbqbqbqbqbqbqbqbqbqbqbVbVbVbVbVbVbVbVb;}b}b}b}b}b}b}b}b}b}b}b}bhqhqqqqqq;;;V TobJxRRoF<9 R/55555/V/V/V/V/V/V/V/V//VRV`/VVVVVVV 0HI~'2a7 # O_?M   " & 0 3 : < D p y  !!!! !"!&!.!^"""""""+"H"`"e% IJ(3b7 #P`>M   & 0 2 9 < D p t  !!!! !"!&!.!["""""""+"H"`"d%aIvhcb]gD Xz}} Bvt n%"iOS0L\pr`<&'()*+,-./0123456789:;<=>?@AIJ$%TUVWXY\]^_`abcdefhijklmnopqrstuvhijkFopqrstu45]^@G[ZYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! , `E% Fa#E#aH-, EhD-,E#F` a F`&#HH-,E#F#a ` &a a&#HH-,E#F`@a f`&#HH-,E#F#a@` &a@a&#HH-, <<-, E# D# ZQX# D#Y QX# MD#Y &QX# D#Y!!-, EhD ` EFvhE`D-, C#Ce -, C#C -,(#p(>(#p(E: -, E%EadPQXED!!Y-,I#D-, EC`D-,CCe -, i@a ,b`+ d#da\XaY-,E+)#D)z-,Ee,#DE+#D-,KRXED!!Y-,KQXED!!Y-,%# `#-,%# a#-,%-,CRX!!!!!F#F`F# F`ab# # pE` PXaFY`h:Y-, E%FRKQ[X%F ha%%?#!8!Y-, E%FPX%F ha%%?#!8!Y-,CC -,!! d#d@b-,!QX d#d b@/+Y`-,!QX d#dUb/+Y`-, d#d@b`#!-,KSX%Id#Ei@ab aj#D#!# 9/Y-,KSX %Idi &%Id#ab aj#D&#D#D& 9# 9//Y-,E#E`#E`#E`#vhb -,H+-, ETX@D E@aD!!Y-,E0/E#Ea``iD-,KQX/#p#B!!Y-,KQX %EiSXD!!Y!!Y-,EC`c`iD-,/ED-,E# E`D-,E#E`D-,K#QX34 34YDD-,CX&EXdf`d `f X!@YaY#XeY)#D#)!!!!!Y-,CTXKS#KQZX8!!Y!!!!Y-,CX%Ed `f X!@Ya#XeY)#D%% XY%% F%#B<%%%% F%`#B< XY%%)) EeD%%)%% XY%%CH%%%%`CH!Y!!!!!!!-,% F%#B%%EH!!!!-,% %%CH!!!-,E# E P X#e#Y#h @PX!@Y#XeY`D-,KS#KQZX E`D!!Y-,KTX E`D!!Y-,KS#KQZX8!!Y-,!KTX8!!Y-,CTXF+!!!!Y-,CTXG+!!!Y-,CTXH+!!!!Y-,CTXI+!!!Y-, #KSKQZX#8!!Y-,%ISX @8!Y-,F#F`#Fa#  Fab@@pE`h:-, #Id#SX<!Y-,KRX}zY-,KKTB-,B#Q@SZX TXC`BY$QX @TXC`B$TX C`BKKRXC`BY@TXC`BY@cTXC`BY@cTXC`BY&QX@cTX@C`BY@cTXC`BYYYYYYCTX@ @@ @  CTX@   CRX@ @@ @Y@U@cUZX  YYYBBBBB-,Eh#KQX# E d@PX|Yh`YD-,%%#>#> #eB #B#?#? #eB#B-,CPCT[X!# Y-,Y+-,-@ !H U UHU?MK&LK3KF%&4U%3$UJI3IF%3UU3U?GFF#"33U3UU3UOU3UoTS++KRK P[%S@QZUZ[XYBK2SX YKdSXBYss++^stu+++++t+st+++++++++++++st+++^NuH^If%3S}/P`9 (KF.T  ; U * v  P s # ? S n I } Z!CxJN .rDVA%DFFX&@~"Vl,?Y -@%tr h y !! !2!C!U!f!r!~!!!!!!!" "")"1"""""""###%#6#H#Y#k#|######$'$r$$$$$$$$%%%$%0%B%T%`%k%%%%%%%%&&4&^&p&&&&&&''P'b's''''((((((((() ))-)9)E)W)i)t))))*$*6*G*Y*j*|*******+++$+6+I+[+l+~++++,2,--$-6-H-Y-d-o----..4.W...////'/4/A/M/Z/f/z///////000!0A0I0Q00000001E1M111222(292K2^233H33444o44451595^5566K667737788e8x8888899.9s9{9999:7:t::::;; ;;R;Z;;<< .>a>>?FFFFFGGaGiGzGGGHH#H4HFHXHkH}HHHHHHHI I I7I]IIIJ'JAJQJJJKK9KEKZKKL2LMMaMNNSN[NNNNNOJOuOOOOPJPsPQQ3Q`QQQQQQRR/R_RRSS.SSSSSSSSSSSSSSSTU1UCUKUUVTVfVxVVVVVWXXmXXYFYOYXYaYYYYYYZUZZ[/[[\\F\\],]]^I^_y___`"`\`````a:ab?bcaccd,dcddddefWfg gQgghVhhhiJijjjjPjjjk3ktkkll9lkllm8mnn#n/nYnnno-oeoopp[ppq,qzqqrVrs,sssst tPttuuLuuuv9v|vvvvvwwww0wAwwwwxx%x8xKxxxxyyy-y?yGyOybytyyyyyyyzzz,zRzwzzz{5{y{{|4|e|m|}'}}~5~~6ɀUӁ%-{Ё܁ 2EXk~ς.ATg}΃*=PcvƄ؄,?Rexąڅ ,=OasƆ؆ 0BTeq}ˇ܇H}‰@r>^gÊPϋ׋T΍,8Dҍ,?QcuƎΎ  /2/310!!7!!IhyJh++@ OY?+?9/10#4632#"&+m1OD-8NB173LX76D^8B ?3210#!#kHkH?;3@   ?3?39/333339/3333310!!#!#!7!!7!3!3!!! b }y e -{}1} /`RRTLLTH/%,:@ )", % KY&&KY//99//3+3+92310#7&'53&&546773&'6654&'11xRIb}ؿ''|?y^wk~BQlvEI:)-1r @? H7 |\6T J tb5Y+:%@%118 ?3?3??9/39/310#"32654#"&54632"32>54#"&54632Ø>!Ci?jAhE?eVnzertx#Bj@k4T?&@eWmzertxJNt gkc1\~wOGlb1B 50@**'(0-/JY3 JY3?+?+?999/10">54&267%467&54632673#'#"&itRh>UWr΀p;شgԯAnQHeux܉DxnxsGN\:MY3B[CbuIjߔfɞNvbR*{ndV ?10#kHR  '??103#RrS@ ` '??10#3q`'}Uj ?3/10%%'%7V{wqt57s)/4ym  /33310!5!3!!#{zy}+/10%#7#q~N79s/3107!7#"՞+# OY ?+1074632#"&+QG+5PD.6JM[45G_4} ??10#}Ӯ-JyD @ KY KY?+?+10#"&5$3 "3265D񳰼 mqwdosqaجC/  ??9910!#7'3L;2YPb5:n 7@ KYLY?+?+310!!7>54&#"'632!}fa/xgMYRްO]}{Kct9Dsoб/1(-@KY && KY& KY ?+?+9/+910#"'532654&##732654&#"'6321ʳ||ү^UtcPbP }rO15\l6BvL %@LY ??9/3+33310##!733!6#+HJpBu.@TcNN)2$PH-@MYLY KY?+?+9/+9102#"'532654&#"'!!6Vג֓0bZJ!W}ѲyOf~ 9IZ(-@ !MY KYKY?+?+9/+9104$32&#"36632#"&26654#"yoI#DfD;j䓶^QB|`0y#O^ŬYlq9_rby@ LY?+?3103!7!1{!`V%12@)# ,KY,, &KY KY ?+?+9/+9102#"&5467&&546632654&"6654&Üjxᘾؾ_Qm phrNXsͭPNszfũLE`oa54&+pjp@ 3c琴mlLY)v Wٌ"/,KWžW|9jzZ+d @ OY OY ?+?+1074632#"&4632#"&+QG+5PD.6PGaSA.6JM[45G_4M[hI]5d@ @ OY ?+/10%#74632#"&#q~NcPGaSA.6M[hI]5y@ //3293310%5ibߕ/33/]3105!5!hZby@ //33933105yiHs!bZ&%@$$OY$ IY?+?+9/910667>54&#"'66324632#"&esP.g`QB=\R}XPG,5SA.6[dXd>]e332{x[qhM[45I]4oF5A*@&+ 6==   +2?399//33339310#"'##"&546632326654#"!27# $!2"32&nzosA}X@DfNJ  J^\BAUF?Tޤ$.uVZqA_nr]S;@ IY?3?9/+310!#3#&'-K#%W/Jm+X}V -@  JY JY JY ?+?+9/+910 #!32654&##!2654&##s{15' • n~hgnt{ @ IY IY ?+?+10"327#"$32&ëVndŗE3ݻ9+PEV @ JYJY?+?+10!!! 2$54&##z5V2DzmpNpVj &@ IYIY IY?+?+9/+10!!!!!!!5!5 br5+Vj @ IYIY?+?9/+10!#!!!!5n N&@IY IY IY?+?+9/+10!# $32&&#"327!5˚huhBMj͸j`9K! (,"2'Vs @ IY ?3?39/+10!#!#3!3=l5Pn @ JY  JY?+3?+310!!77'7!\%#^^#L%5  IY"?+?10"'732673i0ELd3O}xDV+ @  ?3?39910!#&'#33 HH}5e:VVIY?+?1033!V55!T@  ?33?3910!##33!#7#+5  Ѯ~3HJ}LJNwMT@  ?3?39910!###33673s4 *5*</ @ IY IY?+?+10# $32%"32654&OĨW+̜lV @ JY JY?+?9/+10!##!232654&##Ç{5J=ض}o #@IYIY?+?+910"32654&# $32#jĨO5i+NV &@JY  IY?+?39/+910#! #32654&#5@ifЇ`ey`Aym'#& @ IY IY?+?+9910#"&'532654&'&&54$32&&#"jGiuc_BBE"Jig5"TNwQUt&.&,w6MD=Xdy@ IY?+3?10!#!7!!j!h@  IY?+?310#"&547332677,:QxnjRu  ??3310%673#3=e߿󴢪aŐJ^ċ@    ?3?33910!#&5##3367336731H,> YC+  K8ňH{Xb`S} @  ?3?39910!##33T3J??39103#3qwg% @IYIY?+?+3310!!7!7!!u{q Zdo'?3?310!!#3s}}!P ??10#wٚJjj'?3?3103#7!!w@|ߍ5)//33103#5Vm -)hDH/310!7!o+?!/10#&&'53h=+h=<b`\ '@  FY FY ?+?+??99102373#7##"&5462654&#"\( CƋ)axp[hf^\c]Ƭd)gzڣrq;9"'@ FYFY?+?+??9910"&'##336632"32654!a% F}J370 ]` `uoichfXvoƭnu+b\@  FYFY?+?+10"&54$32&#"3267֔/xcpiuH>|R33(?b!'@  FYFY?+?+??991023673#7##"&5462654&#"W Ne^&^ulgeiZwf}hĮd#otեb\"&@FYFYFY?+?+9/+10"&54632!#3267"32654&ҕ!{?c^4g0 IYwP$0,#ἧwq5F *@  FYGYFY?+?+?+3310"'53267#?6632&#"3#hE8@0LR .(t +L=W]'|s:CBdȥalL\(5CH@(33FY9GY &33(&@GY&(GY(,GY?+?+?+99//9++310#"'!"&5467&5467&&5463232654&''326654&#"L)7B?uܐNf[?PNLJlxZPOv?XRNuAHk>`5N)ʓi6)PEc+ }SMZt>H~UYTVRVQ;)@  FY?+?3?910!654#"#336632ٔY!eJ!#) ^d'j^)v'Rf{j>h!; ??2103#34632#"&y@3XC,(4H8GZ7L1 @ FY?+?210"'532734632#"&E6=:}+$T@3VC,&4L8GZ7L19!@    ?3??99103##3J+'RJHr-/- {o9- ??103#3L;\,'@  ! 'FY?3+3?33?9910!654&#"#33663236632#654&#">KTy!e W\qz VcEJQwk^)FNxߝ%Hwht}yDn`h*>KtՒ ;)\@   FY?+?3?910!654&#"#336632ٔGNY!e ``h(?Lxޞ%Hze}Oe`bV @ FYFY?+?+102#"&5464&#"326ܐڒ}km_wh]VżľOqs 9Z"'@   FYFY?+?+??9910"&'##33632"32654!a( kP `uoichdZ&Z4ðnu+b`\"'@ FYFY?+?+??99102373#67##"&5462654&#"^% C}e 0_`)\ymbeh\e[-ylïh"izף;h\@   FY?+??9102&#"#33>E3$54[wk H^g\ xՂ H_S-D\$ @ FY FY?+?+9910#"'532654&'&&54632'&#"ɩFE~Ftlʥ68ew]jGok].7E*.dN9NDI`J+WE8P?nbH  ?2?31033373}@4EHh`\uH@    ?3?33910!&55##33673363?  2S+/Z'%n Z^NvHXz|u^5*V XH @  ?3?39910#33#类J9N5d;H@  FY?+?3910336673#"'532677bJ #hEH]HD?DRu7LHERW+aec}H @GYGY?+?+3310!!7!7!!1!XuV}/'@  &'??329/3910"&54766'4#72676633"3!% vD"!i\G~h/ISiw4YWhFIW{z);H:(51 ??103#'@  &'??239/391023"##52676675&54776541!wC$ shH~k2Qciv0]D+Vh}HWBu}*;HA"51sP3T /332210"56323267#"&'&&\62bEtV@a273dH~HKZE4m%B7n! ^@ " OY?+?9/103#4632#"&mQF,5QA06+L\46G]3)(@ MYKY   ??99//++3310#7&&546773&#"3267F}+#{%wb/mnpivH>{"Ϛ> (4}(>1@ NYKYLY?+3?+9/3+3102&#"!!!!7677#73JB2Er/XP!G5/LKVOb+.^a!'$@  %/322291047'76327'#"''7&732654&#"D\grre\FFZbuwbZDghhfub\FFZhqwbZDFZ`wggh=@! MYMY  ??399//]92+33+31033!!!#!7!7!733F!)98"!ʣ @ ??9/9/103#3# ;,8-@3--603'$GY GY?+?+9331047&54632&#"#"'532654&'&&6654&wϰ5vfyL|db4zor̰w8LefpTRjeP_cjFD{EΌXq !@    //3399333310XN׬qoVqHvQ}1E1 /3/10#!579sj-5-@%))5** #''..  ?3?39/399/39/3104$32#"$732$54$#"%###323254&##^Zi-*װ֯_Uq壝Z\_fZ^Zƭӭ)*N~#`p~L>/310!7!!^F   /3/3104632#"&732654&#"׵STqtRSrsRPvSTPtuORuu !@     //399//33310!5!3!!#5!{z{x}`J  ?33?310!7%>54&#"'632!sW(>;Zi;}m}iJjdcW/5@PZeq^c}w9"@ " !?3?39/3910#"'53254##732654&#"'632%EN}l}rͲZ_atE;f^7mr fE8HkRG<=D]Xp_6!  /106673#8%&Ki<:16jH @  FY?+???39910326673#7##"'##3'Y"i ]bp3 HP vyh`N4I\@ IY/+/39/910####"&563!rs>T-}3KZhV /3210#"'53254&'73Ӣ)-&NZWQQG+5PC/6]K]f304|wbmdJM[44G_3s&$CR &+5Ms&$vR &+58s&$KBR &+5/&$R`R &+5+%&$jBR ""&+55&$P@o]]]]55<@ IY IY IYIY?+?+3?9/+9/+10!!!#!!!!!#bJ!ds6TN/+P &&z#Vjs&(CR  &+5Vjs&(v}R &+5Vjs&(KFR &+5Vj%&(jBR &+55s&,CR  &+5ks&,vR &+5Is&,KSR &+5>%&,jUR &+55H -@IY JY JY?+?+9/3+310!!#73! 2$54&##!!z V2DzoJ!jmpN T/&1RR &+5s&2ChR &+5s&2v!R %%&+5s&2KR ""&+5/&2RR %%&+5%&2jR //&+551w @   /3/39107'b@CcBa`Ac@``@`w )#@#$&IY&IY?+?+910#"''7&5$327"&4'326ȄpjOcHr02)Z!#[W`\69\>?ڇ\XZvWqJls&8CXR &+5s&8v#R &+5s&8KR &+5%&8jR ))&+55s&<vTR &+5VR %@ JY  JY ??9/+9/+10!##33232654&##RF55⌑=ٶ~nX?,@6' 9FY $FYFY?+?+?+910"'532676632#"'532654&&'&&54667>54&#"E6=2AT+¢*Qn_/l3ٸ]3>q.BXE%>]P>"iYw(_n"Ǝ}9c[iSD8B"kqCG)3te(>87En<5VGE8?C%@I}齮b`!&DC ""&+5b`!&DvD **&+5b`!&DK ''&+5b`&DR **&+5b`&Dj 44&+55b`&DP $$&+55bX\*8BB@$ y=<:?>=P'0@ "!FY$FY?+?+910#"''7&546327%"&4'326dbimDjhiw>pld6 9eg_A}RgNDOai\-/T#-q^!&XC &+5q^!&Xvh ""&+5q^!&XK &+5q^&Xj ,,&+55;!&\v ""&+59$'@  FYFY?+?+??9910"&'##336632"32654!b' f_( e_ `uoichfXhHGD}hðnu+;&\j ,,&+557&$MbR &+5b`f&DM# $$&+5N7&$N3R &+5b`&DN $$&+5H&$Q-bH`\&DQ s&&v9R ""&+5b!&FvF ""&+5 s&&KR &+5b!&FK &+5 1&&OR !!&+5b&FO !!&+5 s&&LR %%&+5b!&FL %%&+5Vs&'L^R  &+5b&G8Hb/*9@ GY %FYFY?+?+??9/3+3991023?!7!733##7##"&5462654&#"{a) y')e^^tqfggbdZW_'}hĮc#pu֫Vj&(MZR &+5bf&HM &&&+5Vj7&(N=R &+5b&HN &&&+5Vj&(O\5 &+5b&HO ++&+5VHj&(QLbg\&HQ!Vjs&(L/R &+5b!&HL //&+5Ns&*KR $$&+5L!&JK JJ&+5N7&*NR !!&+5L&JN GG&+5N1&*OR &&&+5L&JO LL&+5;N&*9-L!&J:u HH&+5Vss&+KR &+5;3&KK= $$&+5V4@ JY IY  ?3?39/+9/33+33103##!##7373!737!Dᬏl5581j/P-;%/@   GY FY?+?3?9/3+3910!654#"##7373!!3632ّX!a ')^X цY.x1ف擆:lo/&,RtR &+5;&R  &+5E&,MpR &+5;f&M &+5`7&,NER &+5;&N &+5H&,QH&LQ+1&,OR &+5;H ??103#3H&,-;%&LMs&-K&R &+5!&7K &+5V;+&.99;!&N9F9!H@    ?3?399103##3J+'R>2/- {oH;V[s&/vR &+59<&Ov  &+5V;V&/9;-&O9V$&/89z&O8?Vv&/Ohe9&OOV %@  IY?+?99//9103'737!Tmo;ʨ>c]Ƭd)gzڣrqs&vTR &+5bX!&v LL&+5ws&vR 33&+5=P!&v9 11&+5';#&69;D\&V9!  /3210#&'#56673g9hlmw%[*0wF'cB9!  /32103673#&''d)O*{{jW "[+! d9mPM4_Bf/310!!!f /3210#"&5573327"qbJ\"劂wj;B}D /104632#"&D@2XC+&6`5JZ7L1' @  / ?  /3]210#"&546324&#"326xcev|_evh@31B;83@ctsb^ura5>>56==oH  /2103327#"&54667RD(E')*DS_*P[AJM*F kSN5YO:P/  /2310".#"#3232673F(KGC ,3d:,OG>,3dB#+#9:$+$6?u!   /32106673#%6673#,/3EVV/,3EV-KA23FA2ou  /106673#o.mGhT@%&,jUR &+55%&<jR &+55bu&~T ;;&+5?u&T 22&+5;)u&T ##&+5hu&T &+5J&U00&+555b\#1*@+FY$$FY?3+3?+?991023673327#"55##"&5462654&#"wc& 6.%XH"&N Y\!`up[ff^\a]x2LuD-#& y  maŭe)gzݬrq+6@ $%%$FY%%FYFY?+?+?9/+9910>32#"&'"32665!#732654&-R'||VR}w)5PfQDHo0h(3?&2Z_cvT H ??3910#633673*PJV?<ӒVJj+#@&& FY FY?+?+9/310&&54632&&#"#"&542654&'TaQǡCkz:ae>Ts DNNQsy>%ZU,EECr؇ֱ&eC2󰁓?Z(-@''FY'' !FY FY ?+?+9/+910#"327#"&54675&&546632&&#"33prgF_JOgr>/;whZ}leTVZ&-sN_KH"`YFMb^3@ # FY?+39?99104##7!#6654&'&&bPsXwhN\nJC{z^ qku3>uYGN`p6-?2C;)\@   FY?+???910654&#"#336632oGNY!e ``h(?Lxޞ%Hze}Oetb1+ &@FYFY FY?+?+9/+10"&53 '2!"!65EꪇJ!\uK+ nFڏ#=!ـ%hH FY?+?10%27#"&5463}0[c&yu wv!k L0w9!H! "@  FY FY?+?+?910'&&#"'632327#"&'&5# HC70?H`w@w :""AZS +7B5m` <xb } cixjHwbH   ??2310363#bJ JKHNR^04@-&//GY//&#(!%&&%FY&?+92?9/+99910#"#6654&'&&54675&&5467##7!#"!37P~\I_mKGlm.DY9^/\Yr^k3WES_l91C07, _t$R_bVRLH"@ FYFY?+?+33?10%27#"&547!##77!#,(F?[_uͪ ы !u]Q=RJBPc:)$-Z"@ FYFY?+?+?910#"&'#!2%"32654&-XG\_sy,Rnk^u9E/nGwQn bR\!@  #FY?+?9910#6654&'&&54$32&&#"-]^dM]^ZDn/*pGnlVsN$4yYFTS?4=)9֙H3"bH@  FY FY?+?+310#"&5!!!"3254'F%+"|xHXە5_O]kvLH@  FYFY?+?+310%27#"&547!77!!5[!e }q {u:uwvABPo>::JH@  FY?+?3?10"&54633263zn!uda0EMxmKbZ#(@FY  FY?+33?+3?10&&5476632#4#"66կĞk'bGPoFd +h LJ'@FY FY?+?+??991023327#"&'#&&#"'6em)C9;&)B?fr/9`< 5.3FJtZ]F }~sv@O?{f @  FY ?3+3??3?10663#&&5473ѩedfjjzz/mUy+"ů\yuH bwH'$@% FY"?2+3?39/910"&547332332654'3#"&'y~:A=C}aOXXh&j %%&+55J&j ''&+55bu&RT %%&+5Ju&T &+5bwu&T 11&+5Vj%&(jBR &+55+@IYIYIY?+?+3?9/+10"'53267654&#!#!7!!! %FCY9%PE'#6,>%&,jUR &+555-!0@ IYIY!JY IY?+?+?+9/+10 #"'53266!3 !! 4&##KL143Si^mJstցX5t@snV)@  IY   JY ?+??39/3+31033 !!!#3! 4&##snđ5<r{uPI@po#@ IY   IY ?+3?39/+104&#!#!7!!!2#6il霬!fZZZ;ZP^'qR]V1s&vR &+5Pb&6qR &+5Vy @  " IY ?3+??3103!3!#!ZPRXJ}$Zj &@ IY  IYJY?+?+9/+10 !!!! 4&##N5 e-s}uF)K@roV%VjaV$@" IY  IY?+33?+?310!#367!3#!PuPqf'DrM={ŢEVj(@  ?33?33910333###Hh}^wwFF!)%%''-@JY %%JY% JY ?+?+9/+910#"'532654!#732654&#"'6632'ɬNpȻ}iHqׁ#pO-;jbv{J?V@  ?3?29910333#7##Zʡ<"NuJ9!y-Vb&6R &+5V1 @  ?3?3910!##33)45+8%1@IY IY?+?+?10 #"'53266!#KL143Si^ɬցX5JT0Vs+2VynV3 &7P@  IY?+?3910"&'532673673'`[Ijbˬ1=@V| '{}kn˯s;TX @ " IY?+3??310%#!3!3rP/5w{'@ IY ??39/+910!#"&547332673FɜmkRdKXXJ^d%NO!.JT @ IY?+3?331033!3!3T5JT@ " IY?+33??3310%#!3!3!3?rP5{ &@ IY  IY JY?+?+9/+10 !!!7! 4&##! s}uFK@roVT "@IY   JY ?+??39/+10!#3!3 !! 4&##5ㅋ5Hst@snV @IY JY?+?9/+103 !! 4&##75Hst@sno&@IY IYIY?+?+9/+10%2!7!74&#"'632#"&'5w-d?+ǵdOj\c\)HL%*0V#*@ IY  IYIY?+?+??9/+10#"47!#3!!2%"32654&5>Bt 䅱X+DGP(]ϙݾo &@JY JY?+?39/+910#&54$!!##"33R1}̬beJb|b`\Dd($@ "FYFY?+?9/+910476$76632#"&26654&#"dJpZjvoJg盼`VXX\I+B,%UhXcîʞ^v{gsfbZ'-@!!FY!! FY FY ?+?+9/+9102#"&54$!2654&#"32654&nahɊۏ|&᰸fZ@r[`W:/i[QMkbHP7mZ$ @ "FYFY?+?+99106632327#"&54667>54#"tLd3biLg5 ,"zjG=?M7DOTKTc93>I/wHb5))-@ #GY FYFY?+?+9/+910#"&54632375&#"'66322&&#"5겨e-pg+8?1Y[ai.ѺBS[ /z$/p~zb\H\<G@':GY  <(FY#/  FY4?3+3?3+3??9/_^]3+310##"'732654&#"5632333>32&#"327#"&547##!ԅC85/ichc1?W2dizO>67hbbd9:S4gL"s퓊8 F\&-@%&&%FY&& FY FY?+?+9/+910 54&#"'6632#"'532654&##7{#VVBS5[cִGQfk!?J &+)ym1E+-qbYMq^HXql&X67 &+5;3H @  ?3?39103##3^wsqH#HP@FY FY ?+?+?10!#&#"#"'5326676632#''M`RSTtd/'@[W@Wz~x =Y LW=FH@    ?33?3910!#&'#3673ɼey{ns"Wq#\qXH+AM;H @ FY   ?3?39/+10!3#!#abhiH5HbVR;)\Q9ZSb\F;\P;H\b#+@ #FY FY ?3+3?3+3??10##&&54$73>54&'jɡfdƚ^CnektXƻʮ$̷-P)񑑦 H[q^H!!@ !"FY?3+3??3910326673327#&&5##"&547ÖX"dN3qP>9قHIY2xN3Nkdeݍ>n3H@ FY  ??39/+910326773#67## 477''PG0A+6H5SAq57qH,%@, ''FY?3+3??339910326673#7##"&'##"&547332667?=LTy!d W\qz TdEJPzkHK\+ENxߝwhsz{DnKf+>KrؑqH6)@!$6 *"1$1FY$?33+33??3399103266733267#&&5##"&'##"&547332667B=LTy!d+#' qP?<qz EJPxkHIY,GLxߝQ0'' kde݂s?sId+>KtԓT;H-@FYFYFY?+?+9/+910632#"&547!7!"32654&}_ǪbGegadrbhˠ_cϒj>a]vcTNH )@ FY FY ?+??39/+910!#3!632#"&547"32654&>g}^ƪdiadsbH ˡ_can:a]vcUMH$@ FY  FY ?+?9/+910632#"&5473"32654&ZmmɄfkij|ihm\[calM`B11D7 UF]d]py׼NFn[, >pDe`j\nb&Hj 66&+55;!*<@$ &'&GY''$) FY $)$FY?+??9/+9/3+3910!!3632#"'5327654#"##7373^&  $E6;;|*X!\ 'ZTᒄ>h嫟c$wߞLف7!&v ..&+5b\&@FY FYFY?+?+9/+10"&54$32&#"!!3267֘/xc}2!+w9r[|\33#A{)?D\V;L;&j &+55MP(45@&)FY&&FY&/FY?+33?+9/+910632#"&547&#"#"'532667>32"32654&j^ƪ`!vcTN9H"2@FYFYFY?+??399//++910632#"&547!#3!3"32654&{`ƪnV@ IY?+?103!#?b7+:;@ GY?+?10!#!3BnͨF5H?s&:CR &+5u!&ZC !!&+5s&:vR ''&+5u!&Zv ))&+5%&:jmR 11&+55u&Zj{ 33&+55s&<CzR  &+5;!&\C &+57u/3107!7#7"ՠ7hu/3107!7#"ՠ7hu10'BtB%{ ?10'63b8 }  ?10#7(XE[*+/10%#7#q~N ?10#&'7w={{  ?3210'63!'63P)b8*z } ?3210#7!#67(XE- ^9u[*~%R /3210%#7!#7#q~N+ _?< "@  ??9/333910%#73%Ǧ#%%ΏF! ] N?@!       ??99//3333339910%%#773%%F%υ%7g'7υG&y+! z !  /104632#"&Ǔ}\^Y]b\c+5'',;GV1@<<TT&22 9 BBM?333?3??9/39/33310#"32>54#"&54632"32>54#"&54632"32654#"&54632Ø>wBj@k4T?&?eVmzertwBj@k4T?&@eWmzertxCi?jAhE?eVnzertxJN~yOGkc1\~wOGlb1Ɂt gkc1 BXq-//93310XN׬qB|Q1s//93310'7xM(qRM}2K5&  ??10#™=J!@  ?3?2910654#"#3632=VLO=wehDVN!}D*TyNP1i-2@LY NY  LY ?+?9/3+39/+10!!##73!!!!97!s !-'S@/"#"MY#&'&MY'''?'O' #'#'LY KY?+?+399//_^]3+33+31076632&&#"!!!!!!76677#737#7f6(ְ[AB9Ai/s%r\K!Gny!s/'!.q|݅)t7$-H@%$ NY$%"KY%%$-KYMY?+?+?9/+9/+339/10%27#"&547#?33#32!##32654&##6EIa`gPdh-T*1{BՉ1w a[5ywNKρV-&,?Ѷw?&K@) NYMY !!LY! LY?+?+99//_^]3+33+310"!!!!!27#"55#7367#7332&KG }){aEYFPq1DžAc7; PT +1N2%@-(#?3?3??9/39/310##"&546632%"326654%"&546632&#"3267GuSivYm=YyBo63nHNbbBo95pGNbd̓gtpqip[da]lTUhwZda^pQPl'  /2/3102&#"#"'53265R(/?F7<3^`ytrs}3/!@ '$*/3/232322310"56323267#"&'&&"56323267#"&'&&\37bEtV@a273eH~HKZ046bAO@a273dH~HBb@9m%B7o! A7m "B7n! '@  //99//33333310#5!!5!3!!!'{=Dj95 %@//39/3393310%5 5!hhcߖ %@//39/339331055!hHp!cZ鍍f  /33/10#3 fH9 &IL&IO\5  /3210!"&5473326759 pqzx %"XbH FY?+?10"'53273E6=:}+$; ?106673#%^7\7575;  /106673#X9\V0N;7+!  /10#56673+$\=\68.<5  !?3?310#"&54632"3254bmt|ckBk>7?j֕%wx`e,Ҭ\J !@   ??9/3333310##7!733#7Ɂ++yEZeCBI$q9@  !?3?39/39102#"'532654&#"'!!6ps\wdhoYJCC5{A+jp4HkZ?N-y 7%@   !?3?39/39106632#"&54632&#"2654#"Je8`qP_sՔC>;Fp#bQaw/X3B-/~haZ8s`1ODIUJ- ?3?310!7!y-Jr^9"/@ )) # !?3?29/399102#"&547&&54632654&">54&j}m^I=Sy#bOcw/X3B-/|iaZȕ{ub1ODIUT #'+/37;?CGS[kt|@N*B)AF>E=&2%1 VKcuult\ZQ} vk K}kl\QQ\lk}K -, 48!59/333/3339/////////33333393322222210!#%5!#533!5353!5!!5!5!#3#35!#35!35!#35#3#3#"&546323254#"%32##32654&##32654#"'53253T/0momImmmm0oowoooomm~smp.,;0m^{B.$*/;J1%Z^4+V}i0oo/mmmmmmoo;mmJoooo/yhIaCS1D D8QYb" "+%J fVr_cT*@ (""//9////310 54676654&#"63232654&#"TV,AgIOGRZ?>1HT;GFBIHCHEVW/2A1R~X8*P:/5K6DpJ;?HI>@IH!&7L &+5} /+1;<@%5%GY/55*FY**9FY*!FY?+?+9/+9/3+310#"&54676654&#"76323267$46323365#"%*9 NHJV$"pÞnWbPkŒKC&K" VGRNABP~~cW҅sjkK:RTTu&0vT &+5;!&Pv 66&+5&$[b`\&D[/s&2y\@y   /3210#"&546324&#"326ydewvfdq?33@:93?atrabsv_6==65>>3^{   /310673#'467#"&+V@`B>A 4.07eZV0 "2>-=ALJ@&JE@@(?3$$FY- (: ( GY7(FY?3+3?3+333?3+3?3210"'53267!#"'53267#?6632&#"!76632&#"3##34632#"&!G6=6DV'E8@0FX .(t +L=W]-)q$-L=Y\+Oy@3XC,&6s|:t{:CBdȥallŦf|lèH6IZ7L1;AA@"7("(FY1">,,GY;, FY?3+3?3+333?3+3??10!#3"'53267!#"'53267#?6632&#"!76632&#"3#KG6=6DV'E8@0FX .(t +L=W]-)q$-L=Y\+s|:t{:CBdȥallŦf|lè%%@ IY IY?+?+9310# $326673"32654&OҔBQV!-ĨW+qj!8ulbH$%@ FY!FY?+?+931026673#"&5464&#"326nOX !#ڒ}km_wh]V!4ViľOqs @  IY ?+?3931063#"&5473!267+("ݫ7#.$"wVonhDq #@  FY?+??39931032667363#7##"&546ÖX"d("⨴ b_HIY,x"!}b,j.v!C!vRe /210#76654&#"5632ncj^^@4'82AowR^o5.*d Tw}  /104632#"&@3.*C,&64K4&7L1Vjs&(CR  &+5Vs&CfR &+5b!&HCU $$&+5q^!&XC &+5`8/@,,!!IY2((IY?3+3?3+39/910"'632#"&'#"&54$32&&#"32677332654&6^4Hur!1tѱ hR3Z6|~m56 ܎l/+V۷fΏ]SR^X"&[E˙hH@  ???33910333663##섪F ?9C oq:Kܪ5Hvt3T{1@IY IY @JY?+99//+3+310!!!7!3!!3232654&##{"4==r!>+u܎`rc\'#8@ FY FY FY ?+?3+39/+910!63 #"&547#7373!"32654&IqXɬb/-}oij{mߩ˜Uiϒs5c[teWKVB%1@IY!IY! IY?+?+??9/3+310"!!327#"47!#3!6$32&Bo Vn5B5,ÜH3>U9$ Z=P'PE;\%1@ FY  FY FY?+?+??9/3+310"&547!#336$32&#"!!3267ia;‡/xc~2!-vNz<~45H5336|(?q #@ IY ?33?9/+3310!###3##7'&'R{pZow^CPLh;}H !@FY   ?3?339/+310#####&'P\fo\߬JsHH1VZ+@ IY   ?3?39/3+33310!###!#3!3##7'&';}s5mnw\ FPPlLxI;=H,@  FY ?3?3?9/3+3310#######3!L^gm\!i`3 1HH51P{!4@ !JY !IY?+?339/3+3333310#>77!#&&####"!RPtk)g{> \fIcQ6wI싋M7ɒh=,cq=\H4@  GYFY?+?339/3+3333310#>77!#&&###"!o8d]Qc:1/Wcqn [r<)7jjg< ^ii @opTlTMq1V{$'=@! '%   IY   'IY ?+?3?9/3+333310!667!#3!7!#&&+##"!"D+}5)g{>\fm}IwHx+P㋋M7ɉq=f;\;FH #?@" # GY! FY   #FY ?+?3?9/+3+333310!67!#3!7!#&&###"!3.4i`ws10Y`qm \l>)8mW*H5biiVpNMs1Z'Jd@8?9IY??A00GIY)JY00AA5IYA" JY/ # JY?+33_^]+?+99//+9+9/+104!#732654&#"'67&''53>32&#"327632&#"&5467>Ȼ}iH'J$xTBPAF'&*%7>54##7#DP6w0_yAPZh6/'%"C?[aWcdĿ^:;ZL0Z0\`}EpGrBєÉ##>Y~HjtFq3Z{[mxViY6,#) 'kYN^76SBDuf &@IY IY IY?+?+9/+10# $3227!"!654&O55Z5aW+#R,0bV &@FY FY FY?+?+9/+10#"&54632267!"!74&ڒx$w*>u¾OȩANJ{d@  JYJY?++??3102&#"#3767>0F*<&>>Aa)b``p+^X&̂8`!N@  GY ?3?+?103367>32&#"#`@FV=MaF)%'*=0}H?dTc,y;ads&v+R ""&+55`!!&v ""&+55 &2\bhV&R\V1.9@% @--IY (# #IY ?+33?+332310#"&'&54$7632%"&'6326'J6;>ƣ+'p;>3Bntu0^1A-{s>1K6+%lC82g/-!(P1,0!>^Rb;05@%/ @(##FY /FY ?+3?3+332210#"&'&&546766322654&'#"&'6;jƄF328p̈́E638"2 vFG(Q#6 NIQM. ;0;2ᮜ(;-;3"|%-'`A"nF`3!UC@!$>' .  H4.4IYN.A;';IY"'?3+3?3+3232299210#".#"#63237654&'&&5432"'#"54$32&&#"326732654&#"'632fQuc^9d2=kjnAr!\9BN`ͱ hR3Z6||S:5Oܑla6^4Hyy$*$r$*$՘DJ,. GCX'1X"&[F9{}C[+ch>kimA{s'$1+;B;;X#0럅PP$-$x9ryp#+#Hq"J.. #&E` FE@") ::") @ )/)/IY)@6"6IY"?3+3?3+3339/33910#'##'##'7"'632#"&'#"&54$32&&#"32677332654&NwHJ-6^4Hur!1tѱ hR3Z6|~m56 ܎lgggg3+V۷fΏ]SR^X"&[E˙h&*@$  #???332322910#'##'##'733663##wHH+F ?9C oq:Kܪ5 gggg\Hvt3T @ IYIY?+?+?10&5$32&#"327gdŗEǥMC (PEݾrb\@ FYFY?+?+?10"&54$32&#"327eԖ/xcqiwgXӼ_33뢀|/du @  ?910%'%7%7%XH㴁EHJ{J;{Z}9IĤ{TN /9/310#"&543!632Y(,Z*,CH_1w^'">=wh /323102>32#754&#"##7Qys>dj{5)+pQ ^$+$_O$"%+%y}j/ /3104632&}A>*,#x9>("0.JC}/  /3105654'&&5432}srp)"^9BHq"J,. HC) (6DR_me@4 >7ELHZS`gc")0,,,%3Vcc\j:HHAO3jOOj3  /3/39///3333333332222210&&#"#632&&#"#6632&&#"#6632!&&#"#6632&&#"#6632!&&#"#6632&&#"#632!&&#"#6632o3@,/2('$ < 8//99//2210#677&''6673&&'7%'67'&'7%'766&&'57 F$a5sGA݁R Ia4!&b'ZEx+REC{L%ExbCWBO݁#BO݁ Ia5uGA܂24bE<Y?DnXFcDnXb'X< F$a5Vb",@"@ " IY ?+???32299103333##7##!"&54733267Z<"N9 qru}9!y-b{w %"[_qo,1@,$@) " FYFY?+?+??3229103266733##7##"&547!"&54733267ÖX"dȣlj ]cV9 qrHIZ1xI{ze>n{w %"[_V3@IY IY  JY ?+?9/+9/3+310!!3 !!#73732654&##5'/ <!)ntޏhݩrc"9@ GY FY  FY ?+?9/+9/3+3910!!63 # 47#7373"32654&ypX5}ohk|mߪ=[cn:c[udWKV9@  JY JY?+?9/+99//9933102'###327'7654&##JRu{5`BDJ}@=\}o9Z)?@ "%"%$$$  FY FY?+?+??9999//993310"&'##33632'"327'7654!b' mPJL=`urhJHWgfXV94ð`@mv;S,Nb $@ IY  IY ?+?9/3+310!!!##73b mF!w ^H $@ GY FY?+?9/3+3103#73!!!!;ig9oJi}}Vj.@  JY IYIY?+?+?9/+910"#!!632#"'532654& \%5q?Jq}wှy /5&; hH.@ FYFYFY?+?+?9/+910"&'53254&#"#!!632ND^+)[?rK4cCdFS3l] $,)HnˆŮ)@  " IY?+??3?339103333####Hh}^%sO`wFF!}%%\<@@":GY<<3"(FY#/  FY4?3+3?3+3???9/3+310##"'732654&#"5632333>32&#"327#&&547##!ԅC85/ichc1?W2dizO>67hbbdNBoJgL"s퓊g ۽8 H'&dHF\&T/"@  "IY?+???3910%3###33pR<45!{+8%;#H"@   "FY?+???391033###3^qPNsoH`{#HT-+@      ?3?399//99910!###3733 +P}}5Efy`8?^5?F(@  ?3?39999//9103#373%3##'ۦo{E% \)JLFuDlXsV))@ IY  ?3?39/3+39910!###73733#3 ۮ}!)'!Pсf9!*@  GY  ?3??9/3+39910373!!33###Ǖ))=40+'R \- {o !@   IY?+?3?910!##!7!33!+8%NH !@   FY ?+?3?9103##!7!soH#Vs%@ IY   "IY?+???39/+10%3##!#3!3^qOl5}Pn;H%@ FY " FY ?+???39/+10!33##!#abʑqPhiH5E{HV $@ IY   IY ?+?3?9/+10#!#3!!T駏l5Pn;H $@ FY   FY?+?3?9/+10!!!#!#abɪhiH5˒JHVN0@ JY IYIY?+?+?39/+910!#!#!632#"'532654&#"'5ё?J q}wှ\%^ /5&; H!0@FY  FY  FY ?+?+?39/+910632#"'5326654&#"#!#!S:m\qY*X>m\qP5bɨ=jmʈĭ3$+JHy-93@ %.++4JY IY IY#IY?+?+++910327#"&'#"$32&#"327&54632654&#"y.@CJ@WQ.9Z4Vy}:]a*Vuɀ!9<<{yÃE Ao|zQH &&7bH\&Fw @" IYIY?+?+3?10%3##!7!!qPj!h};\92@&-#*$#"*FY1*GY?+?3+3??3?9910%327#&547654#"#654&#"#33663236632%-3nO\Qwk>KTy!e W\qz VcX 'k$0<].tՒ ^)FNxߝ%Hwht}y)P-l,<bH   ??3910%673#3u33ggD yLnm%@  IY  ??39/3+39103!!#!7!73 " JL g#`+H!@   GY ?3+3??3910%673!!##733u33LLD y}o}Hn @  "IY?+???39910%3###33qR\T՜}3J?H @ " FY?+???39910#333##J:qR=N5d`{='@ " IY  IY?+3?+3??10%#!!7!!!3qP/j du{}ZH'/@% "$%$FY%FY?3+3?+3??910326673327#&&5##"&547!7!;vY!d #-3nQ?@\arU0z,& )kdexe0v')@ IY "IY?+??39/+910###"&5473326733;O٭uqR`W{XX4TK(GH03H)@FY " FY?+??39/+9103267733##67##"&546>3˒qPS#ȅ EH^)oE{?ǒ&JE'2@  IY ??39/+9/9/33910!# 47333673FbB> yw WeJG_X:'1;3.(KHZ5J1H4@ FY ??39/+9/9/339103673#67##7"&546>?=SA-m75AHZ+#Jrs5-+\0T@IY?3?9/+91063 #654&#"#3ޥH wy T`Y5\Z3:3.*II13;H@ FY  ?3?9/+910!654#"#336632>,U!Y`9#[,jHl~2i\̍wQJaoHݸɬ3$!/H1$@"IY IYIY ??++?+?103##! #"'532661KL143Si^{ցX5P&@"FYFYFY?+?+?+?10%3##&#"#"'5326676632BǨ''M`RSTtd/'@[W@Wz~x{ =Y LWVs"@ IY   IY?+??39/+10"'5326!#3!3˔t}8sl5D15 'Pn; H"@FY FY?+??39/+10!3#"'53267!#ab?y`[|/\iH51?HVs%@ IY   "IY?+???39/+10%3##!#3!3^紐l5}Pn;H%@ FY " FY ?+???39/+10!33##!#abȣǨhiH5I{H')@IY "IY?+??39/+910!#3# 47332673NRq_٭ yw R`XX1;3.(JI /J`H)@FY " FY ?+??39/+910326773##3667##"&546>.Rl/! ؇AH^)k~F*V5T%@  "IY?+?33?3910!##33!3##7#+5  ~3HJ}L{NwM=FH%@ " FY?+33??3910#&'#36733##ey{ns"WˤǑq#\qXH+AMGy,b&$6R &+5b&D6P ##&+5+%&$jBR ""&+55b`&Dj 44&+55bX\Vb&(6sR &+5b,&H6 %%&+5T#&@IY IY IY ?+?+9/+10"56632#"&54$!36554&27# yzic(Dj~5`2&N9PZe;\"&@FYFYFY?+?+9/+102#"&54$!374&#"566267#"ϖO2!zKPd:h. I\ݾvP.&."wp5FT%&jR 77&+55;&j 66&+55%&j9R %%&+55&j# PP&+55'%&jR ;;&+55c&jz ::&+55Z/@JYIY JY?+?+39/+310#"&'532654&##7!7!#Ԍ^AӒ 3v-$hts曋uH/@GYFY FY?+?+9/+3310#"'532654&##7!7!ɉ~ҬH رFXӸr}V&MR &+5q^f&XM- &+5V%&jR ""&+55q^&Xj ,,&+55%&2jR //&+55b&Rj //&+55~bV%&~jR 33&+55b&j 22&+55o%&jR 22&+55B&jU //&+55P&M\R &+5;f&\M &+5P%&jDR ))&+55;&\j ,,&+55Ps&SR ))&+55;(!&\S ,,&+55'%&jR **&+553&j ,,&+55Vj @" IY IY?+?+?10!3##jrP5};^H @"FYFY?+?+?103!!3#;9onPH{VT%&j'R ))&+55&j 44&+55yb7@IYIYJY JY "?+?+?+9/3+310!!!3#"'532677##73b mF!h=scC%.4(5  zu>3y^H7@GYFYFY FY"?+?+?+9/3+310%#"'532677##73!!!!=qbB&/3(6 ig9oJLp>3}}y'@JY JY"?+?+??39910%3#"'532677##33=paB&02(6 ZTՓ~q>33JyH'@ FYFY"?+?+??39910#333#"'532677#类J9=pcB&02(6 JN5d^{t>3)@IY  ?3?39/93+3910##!7!33!  !D`3H)@  GY ?3?39/3+39910!33!!##!uӪJwud-}N` @ JYJY?+?9/+104$!33! #"!3`8CⱵ!{pJbGfD%1@IY""IY?3+3?9/+9/910#"'#"&54!33327#"3267Dg(ɤG઻U$UO/iujgoP p 'NR[l{fbH$10@!,FY%%FY ?3+3?+?9/991032673#"&'##"&5463236732654&#"SVduBB+ijapa) L]yohdh+Tbz=ռm~o°`dZbH$nuتR-:@ '',JY,JY,#IY,?+?+9/+9/99104654&##732654&#"'663232673#  ˾upGsՁƮlNXgo`f,'#U8tadhv{K>$|ve\pɱm\*8@ !'FY !!FY! FY ?+?+9/+999/1032673# 74&##732654&#"'632duBB+ŶVgkXVHH5Z\dXz=ֻZTHc[DJ'T{lm3%4@ JY%"JY"IY?+?+?9/+9910!#654!#732654&#"'6323#\L٬rajWG*qdL+э_e?7{)pf\\&4@#FY"FYFY?+?+?9/+99103##66'4&##732654&#"'632nM"%^_kXVHH5Zah,yP@c[DJ'T{ll$'@ $$IY$IY?3+3?+9/1032673#"&547! #"'53266eq `h+ƯKL143Si^w9o˳A>ցX5P.)@**FY*" "FY?+33?+9/10326673#"&547&#"#"'5326676632jD[:BHgzu''M`RSTtd/'@[W@Wz~x2im=O>H$ =Y LWRHV3,@IY IY ?+??39/+9/1032673#"&547!#3!3gr`h-ð5l5#t̲=XPnB;mH,@FYFY?+??39/+9/10!#3!3326673#"&546biabD[:BHgzH5;H2im=ODN&@IY IY IY?+?+9/+10!#"$32&&#"326!1+eBlU띻1y'T/%b\\&@FY FY FY?+?+9/+10!#"&54$32&#"3 !o;*pJ@"@?\:&*N?%@ IY IY?+?+39/107!!32673#"&547!!ieq `f-įyH-o̲4asV/H%@ FY FY ?+?+39/10326673#"&547!7!!D[:AHgxu w2im=N>H Dy(-@&JY JYJY?+?+9/+9104$32&&#"33#"3267#"&54675&&9ӂM[WQܙnSk{-HFvC3~tzv6&Q°"?Zy1 +@ IY JYIY JY"?+?+?+?+103#"'53277#! #"'532661@o`F#,7MKL143Si^ՁnqցX5yP)+@'FY'FYFY FY"?+?+?+?+10%3#"'532677#&#"#"'5326676632?>pbA(03(5 ''M`RSTtd/'@[W@Wz~x~q>3 =Y LW&$gb`\&Dg&$fR &+5b`&Df &&&+5X&$wR &+55b&Dw ,,&+55%&$xR &+55b`&Dx ,,&+55 /&$yR &+55b&Dy ,,&+55b&$zR 00&+55b&Dz BB&+558s&$'gKBR &+5b`!&D'gK --&+5R&${R &+55b`&D{ !!&+55P&$|R &+55b`&D| ))&+55PX&$}R ##&+55b`&D} 55&+55b&$~R %%&+55b&D~ 77&+55N7&$'N3Rg &+5b`&D&Ng $$&+5Vj&(gb\&HguVj&(fR &+5b&Hf ((&+5V/&(RTR &+5b &HR ,,&+5VV&(wR &+55b&Hw ..&+55Vj&(xR &+55b&Hx ..&+55V /&(yR &+55b&Hy ..&+55Vb&(zR --&+55bf&Hz DD&+55Vjs&('gKFR &+5b!&H'guK //&+5)&,fR &+5;&f  &+5&,g&LgN&2g5bV&Rg&2fR !!&+5b&Rf !!&+5&2wyR ''&+55b&Rw ''&+55&2xuR ''&+55b&Rx ''&+55/&2yuR ''&+55b&Ry ''&+55b&2zuR ==&+55br&Rz ==&+55s&2'g5KR ((&+5b!&R'gK-h@ --%((&+5+5s&_vR //&+5bH!&`v9 --&+5s&_ChR ''&+5bH!&`C %%&+5&_fR **&+5bH&`f **&+5/&_RR //&+5bH&`R --&+5&_g5bH&`g&8gq^H&Xg&8fmR &+5q^&Xf &+5s&avR &&&+5q!&bvT ))&+5s&aC=R &+5q!&bC !!&+5&afsR !!&+5q&bf %%&+5/&aRR &&&+5q&bR1 ))&+5&agq&bg&<gL;H&\gy&<fR &+5;&\f/ &+5/&<RR &+5;&\R ""&+5/&B!  /3210#&&'53#&&'53Pm; (j^o; ,g;?;?j@  /399//3103#&'#7667673#V/9a^xJ K8.^++E`5<9ml:@/^>+u*V7@  /399//3103#&'#766&''3V/9a^xJ KCk8A5<9ml:@.=p]"@  /3299//3103#&'#76676654&#"5632V/9a^xJ KQED.(*BVXTH5<9ml:@ ^ (#N<9AE'#'@   !/39///33310".#"#632326733#&'#76'JD?+5e:*LD<&3 d@WW/9[bJ5%.5$';=3:7qi? b @ /29/210"&'33273673#xkWM5p"iI,ELيvA6w}_n,z' `@  /39/210&'73"&'33273'rH1HVxkWM5p"m`bgvA6w} ` @  /329/21076654&#"5632"&'33273EF.(%#:W\VH+xkWM5p"` '(P=vA6w}TH /2102654'3#"'7B9@)u"{A,$IEfT)p4qzk yy /210%#"'53267yBqbA(7%-4;ol3>yy /210%#"'53267yBqbA(7%-4;ol3>Yb q @ KY &MY?+?+10#"&54632%"32654& ϋsh_zrg_qKW򣍘J{\  ??9910!#667'3| <WN?:9Gl)q@ KY&LY?+3?+10!!7>54&#"'6632!%y5WUJjRznBa9ltg=JW?RodLTxzr(-@KY && KY&& KY %?+?+9/+910#"'532654&##732654&#"'632zʳ||ү^UtcPbP. }rO15\l6Bv\ !@MY $??39/33+310%##!733!667'NLy/H@_9s{DNxi@]-@MYLY KY%?+?+9/+9102#"'532654&#"'!!6ג֓0bZJ!W$ѲyOf~ 9IoD]@ $LY?+?310!7!1{!<2r(-@ !MY!!KY& KY%?+?+9/+910#"'532##"&546632%"32>54&pjp@ 3c琴mlLY)vWٌ"/,KWžW|9jzZ=:@(3$$FY-: ( GY7(FY?3+3?3+33?3+3310"'53267!#"'53267#?6632&#"!76632&#"3#!G6=6DV'E8@0FX .(t +L=W]-)q$-L=Y\+s|:t{:CBdȥallŦf|lèRV1%@,$  )$?3?3222109##33#7#%#"'53254&'&&54632&#"wyy~B^b4^iK~em^#PO5B7TsJ'nG-/yfs!l(j,2%+\DYn%c#/+(3"0Y&7z?/D&Wz5b\ +.@ FYFY!'FY!?+?+?+?9910%2654&#"%##"&54632373#"'532676]yifeh_`X C-Ҷ>P$w#otףZylïhtF$25b!&K 22&+55b&N //&+55b&O# 44&+55b!&:{ 00&+5V5 ??1033V7JVQs&CR &+5VBs&vR  &+5V(s&K2R  &+5V)%&j@R &+55Vv/&RGR  &+5V&MIR &+5VA7&N&R &+5H5&QFVt1&OfR  &+5Vd&-/` 'TV5V%&j6R &+55V5V%&j6R &+55V5V5V &fR  &+55&gf2I6$$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs) $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q  q q q           ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q   q   q    q q  q  !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) -&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq7$&q&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq$q$ q$&$*$- $2$4$7q$9$:$<$$$$$$$$$$$$$$$$$$$$$$q$&q$6$8$:$G$$$$$q$ q$_$I$K$M$O$Q$S$U$W$Y$[$]$_$o$q$s$q%%%$%7%9%:%;%<%=%%%%%%%%%%%$%&%6%8%:%;%=%?%C%%%%%%% %X%%%!%#%%%'%)%+%-%/%1%3%o%q%s%&&&*&2&4&&&&&&&&&&&&&&&&&&&&G&_&I&K&M&O&Q&S&U&W&Y&[&]&_'''$'7'9':';'<'='''''''''''$'&'6'8':';'='?'C''''''' 'X'''!'#'%''')'+'-'/'1'3'o'q's'(-{)))"))$))))))))))C)) )X)))!)#)%)')))+)-)/)1)3.&.*.2.4....................G._.I.K.M.O.Q.S.U.W.Y.[.]._/\/ \/&/*/2/4/7/8/9/:/</////////////////////////$/&/*/,/./0/2/4/6/8/:/G/////\/ \/_/a/I/K/M/O/Q/S/U/W/Y/[/]/_/a/c/e/g/i/k/m/o/q/s/222$27292:2;2<2=22222222222$2&26282:2;2=2?2C2222222 2X222!2#2%2'2)2+2-2/21232o2q2s2333$3;3=3333333333;3=3?3C33 3X333!3#3%3'3)3+3-3/3133444$47494:4;4<4=44444444444$4&46484:4;4=4?4C4444444 4X444!4#4%4'4)4+4-4/41434o4q4s47777")7$q7&7*727477)7D\7Fq7Gq7Hq7Jq7P7Q7Rq7S7Tq7U7V7X7Y7Z7[7\7]7q7q7q7q7q7q77777777q7\7\7\7\7\7\7q7q7q7q7q7q7q7q7q7q7q777777q7\7q7\7q7\77q77q77q77q7q7q7q7q7q7q7q77q77q77q77q7777 77q77q77q77q7777!7$)7&)7+7-7/717375777<7>7@7Cq7D\7F\7G7Hq7J7777777 7W7Xq7Y\7_7`q7b7q7\7q7 \7!q7"\7#q7%q7&\7'q7(\7)q7*\7+q7,\7-q7.\7/q70\71q72\73q74\76q78q7:q7<@<C<D<F<G<H<J<< <W<X<Y<_<`<b<<<< <!<"<#<%<&<'<(<)<*<+<,<-<.</<0<1<2<3<4<6<8<:<<<@<B<D<I<J<K<L<M<N<O<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<^<_<`<b<d<f<h<j<l<n=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_>-DD DD EE EYEZE[E\E]EE7E<E>E@EEEE EpF)F )F)F )HH HYHZH[H\H]HH7H<H>H@HHHH HpI{I {I{I {KK KK NFNGNHNRNTNNNNNNNNNNNNNNNNNNNNNNNNNNNNHN`N6N8N:N<N@NBNDNJNLNNNRNTNVNXNZN\N^N`PP PP QQ QQ RR RYRZR[R\R]RR7R<R>R@RRRR RpSS SYSZS[S\S]SS7S<S>S@SSSS SpURU RUDUFUGUHUJURUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDUFUHURU RUYU`UU U"U&U(U*U,U.U0U2U4U6U8U:U<U@UBUDUJULUNURUTUVUXUZU\U^U`W)W )W)W )YRY RYYY")YRYY RY ZRZ RZZZ")ZRZZ RZ [F[G[H[R[T[[[[[[[[[[[[[[[[[[[[[[[[[[[[H[`[6[8[:[<[@[B[D[J[L[N[R[T[V[X[Z[\[^[`\R\ R\\\")\R\\ R\ ^-q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq-{&*24G_IKMOQSUWY[]_-{-{-{-{$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjln$;=;=?C X!#%')+-/13             YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p   YZ[\]7<>@ pR R")R R  YZ[\]7<>@ pR R")R R q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  &*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_$79:;<=$&68:;=?C X!#%')+-/13oqsR R "@E=K=N=O=`={R R$79:;<=$&68:;=?C X!#%')+-/13oqs-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p  &*24G_IKMOQSUWY[]_FGHRTH`68:<@BDJLNRTVXZ\^`FGHRTH`68:<@BDJLNRTVXZ\^`\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqsR R "@E=K=N=O=`=R R\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs  $79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs-{R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`$$$$")$$q$&$*$2$4$7)$D\$Fq$Gq$Hq$Jq$P$Q$Rq$S$Tq$U$V$X$Y$Z$[$\$]$q$q$q$q$q$q$$$$$$$$q$\$\$\$\$\$\$q$q$q$q$q$q$q$q$q$q$q$$$$$$q$\$q$\$q$\$$q$$q$$q$$q$q$q$q$q$q$q$q$$q$$q$$q$$q$$$$ $$q$$q$$q$$q$$$$!$$)$&)$+$-$/$1$3$5$7$<$>$@$Cq$D\$F\$G$Hq$J$$$$$$$ $W$Xq$Y\$_$`q$b$q$\$q$ \$!q$"\$#q$%q$&\$'q$(\$)q$*\$+q$,\$-q$.\$/q$0\$1q$2\$3q$4\$6q$8q$:q$&@&Cq&D\&F\&G&Hq&J&&&&&&& &W&Xq&Y\&_&`q&b&q&\&q& \&!q&"\&#q&%q&&\&'q&(\&)q&*\&+q&,\&-q&.\&/q&0\&1q&2\&3q&4\&6q&8q&:q&(@(Cq(D\(F\(G(Hq(J((((((( (W(Xq(Y\(_(`q(b(q(\(q( \(!q("\(#q(%q(&\('q((\()q(*\(+q(,\(-q(.\(/q(0\(1q(2\(3q(4\(6q(8q(:q(8@8C8D8F8G8H8J88 8W8X8Y8_8`8b8888 8!8"8#8%8&8'8(8)8*8+8,8-8.8/808182838486888:8<8@8B8D8I8J8K8L8M8N8O8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8b8d8f8h8j8l8n9R9 R999")9R99 R9 :::"):$:&:*:2:4:D:F:G:H:J:P:Q:R:S:T:U:V:X:]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::!:+:-:/:1:3:5:<:>:@:C:D:F:G:H:J:: :W:X:Y:_:`:b:::: :!:":#:%:&:':(:):*:+:,:-:.:/:0:1:2:3:4:6:8:::<:@:B:D:I:J:K:L:M:N:O:Q:R:S:T:U:V:W:X:Y:Z:[:\:]:^:_:`:b:d:f:h:j:l:n;&;*;2;4;;;;;;;;;;;;;;;;;;;;G;_;I;K;M;O;Q;S;U;W;Y;[;];_=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_?&?*?2?4????????????????????G?_?I?K?M?O?Q?S?U?W?Y?[?]?_CqC qC&C*C- C2C4C7qC9C:C<CCCCCCCCCCCCCCCCCCCCC$qC&qC6C8C:CGCCCCCqC qC_CICKCMCOCQCSCUCWCYC[C]C_CoCqCsCqDD DD E-{GGG$G7G9G:G;G<G=GGGGGGGGGGG$G&G6G8G:G;G=G?GCGGGGGGG GXGGG!G#G%G'G)G+G-G/G1G3GoGqGsGVqV qVfVmVqqVrVsVuVxVqV qVT[[[V[_[b[d[i[p[q[r[t[u[x[[[ [T\\\V\_\b\f\i\m\s\v\y\z\{\|\}\~\\\\\\\\\\\\\\\\\\\\ \!]q]r]x]T^^ ^^ _q_ q_f_m_qq_r_s_u_x_q_ q_T```V`_`b`i`t`` aaaaV\a_\ab\afai\amasavayqaza{a|a}a~qaaaaaaaaaqaaqaqaaqaaaaaqaaaaaaa a!aSbqb qbfbmbqqbrbsbubxbqb qbTdfdmdsfffVf_fbfdfifpfqfrftfufxfff fThfhmhshhiqi qifimiqqirisiuixiqi qiTmmmVm_mbmdmimpmqmrmtmumxmmm mToooVo_obodoiotooo qqqqV\q_\qb\qfqi\qmqsqvqyqqzq{q|q}q~qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq q!qSrrrVr_rbrfrirmrsrvryrzr{r|r}r~rrrrrrrrrrrrrrrrrrrr r!sssVs_sbsdsispsqsrstsxsss sTtftmtsttuuuVu_ubufuiumuu vqvrvxvTxxxVx_xbxfxixmxsxvxyxzx{x|x}x~xxxxxxxxxxxxxxxxxxxx x!y){{ {{ || |||| ~) y~     y~ y~         y~       n| q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqql~    n|   n|   n| l|~  qff jlrqs~ffqqq q  q q qqq qn|q qq  r|  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq)l|~    l|~   rsz|  rsv  l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqqqff jlrqs~ffqqq q  q  rsz l|~  ))  n|   n|  rsz|  rsz|   ) js      j  )j       js   s  j        m  m         js    m  m  j   sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R 7$&q7$&q7$&q$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q                        q  q  q                             ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q    q    q    q q  q   !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) & * 2 4 7q 8 9 : <                         $q &q * , . 0 2 4 6 8 : G f m qq r s u x  q  q   q  \ q        T _ a l |\ ~        q    q    q  \  \    \     \        q  I K M O Q S U W Y [ ] _ a c e g i k m o q s q!q!r!x!TSSSS TTTVT_TbTfTiTmTsTvTyTzT{T|T}T~TTTTTTTTTTTTTTTTTTTT T!XqX qX&X*X- X2X4X7qX9X:X<XXXXXXXXXXXXXXXXXXXXX$qX&qX6X8X:XGXXXXXqX qX_XIXKXMXOXQXSXUXWXYX[X]X_XoXqXsXqYY YY ZZZVZ_ZbZdZiZpZqZrZtZuZxZZZ ZT`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`RbIfbWfbYfbZfb[fb\fbfb%fb'fb7fbfbfb4fb5fb]fb^fbpfbfbfjj jj llllllllllllllllllllll lrlslzl|lllllllllllllllllllllllllllll llllllmmmmmmm msmmmnn nnnnnnnnn n|nnnnnnnnnnnnnnn nnnoo ooooooooo omooooooooooooooooooooooooooopppppplp~ppppppppppppppppp p ppprqr qrrrqrrrrrrrqr qrnr|rrrrrrrrqrrrrrrrrrrrrrrrrrrr qrrqrrrsqs qssssssssssssqs qsjsms}sssssssssssssssssssssssssssss s ssssstqt qtttqtttttttqt qtnt|ttttttttqttttttttttttttttttt qttqtttuqu quuuuuuuuuuuuqu qujumu}uuuuuuuuuuuuuuuuuuuuuuuuuuuuu u uuuuuv vx xzzzz zzzzz z|q|q||||||||q| q|r|s|||||| | ||||}} }}}}}}}}} }}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~ ~r~s~z~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~  qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  s s s rsz|    rsz|    rsz|  sl~  )    |   m rsv    )))))) jklqrsuwy}~)))))    ) js   f |   l{=}~j    )l{=}~j  l|~  j  l|~  j  l|~  j  )  )))))) jklqrsuwy}~)))))    ) js  \ \fH\ \|qqH HHq qq qmqq   l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )) jklqrsuwy}~))     s)) jklqrsuwy}~))     sl{=}~j  )  )    |         l|~  j   f m| )  )  )  q qqq qn|q qq  q qqq qn|q qq       rsz|    rsz|   l|~  j    )   rsz|    rsz|    rsz|    rsz|   qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )))))) jklqrsuwy}~)))))    ) js  l{=}~j  l|~  j          q             r v |       q                                                                           q             r v |       q                                      )   q rv|q    q rv|q    r    r|   )  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq     !q! q!&!*!- !2!4!7q!9!:!<!!!!!!!!!!!!!!!!!!!!!$q!&q!6!8!:!G!!!!!q! q!_!I!K!M!O!Q!S!U!W!Y![!]!_!o!q!s!q"" "" #q# q#&#*#- #2#4#7q#9#:#<#####################$q#&q#6#8#:#G#####q# q#_#I#K#M#O#Q#S#U#W#Y#[#]#_#o#q#s#q$$ $$ %q% q%&%*%- %2%4%7q%9%:%<%%%%%%%%%%%%%%%%%%%%%$q%&q%6%8%:%G%%%%%q% q%_%I%K%M%O%Q%S%U%W%Y%[%]%_%o%q%s%q&& && 'q' q'&'*'- '2'4'7q'9':'<'''''''''''''''''''''$q'&q'6'8':'G'''''q' q'_'I'K'M'O'Q'S'U'W'Y'[']'_'o'q's'q(( (( )q) q)&)*)- )2)4)7q)9):)<)))))))))))))))))))))$q)&q)6)8):)G)))))q) q)_)I)K)M)O)Q)S)U)W)Y)[)])_)o)q)s)q** ** +q+ q+&+*+- +2+4+7q+9+:+<+++++++++++++++++++++$q+&q+6+8+:+G+++++q+ q+_+I+K+M+O+Q+S+U+W+Y+[+]+_+o+q+s+q,, ,, -q- q-&-*-- -2-4-7q-9-:-<---------------------$q-&q-6-8-:-G-----q- q-_-I-K-M-O-Q-S-U-W-Y-[-]-_-o-q-s-q.. .. /q/ q/&/*/- /2/4/7q/9/:/</////////////////////$q/&q/6/8/:/G/////q/ q/_/I/K/M/O/Q/S/U/W/Y/[/]/_/o/q/s/q00 00 1q1 q1&1*1- 121417q191:1<111111111111111111111$q1&q16181:1G11111q1 q1_1I1K1M1O1Q1S1U1W1Y1[1]1_1o1q1s1q22 22 3q3 q3&3*3- 323437q393:3<333333333333333333333$q3&q36383:3G33333q3 q3_3I3K3M3O3Q3S3U3W3Y3[3]3_3o3q3s3q44 44 5-{66 6Y6Z6[6\6]6676<6>6@6666 6p7-{88 8Y8Z8[8\8]8878<8>8@8888 8p9-{:: :Y:Z:[:\:]::7:<:>:@:::: :p;-{<< <Y<Z<[<\<]<<7<<<><@<<<< <p=-{>> >Y>Z>[>\>]>>7><>>>@>>>> >p?-{@@ @Y@Z@[@\@]@@7@<@>@@@@@@ @pA-{BB BYBZB[B\B]BB7B<B>B@BBBB BpC-{DD DYDZD[D\D]DD7D<D>D@DDDD DpIII$I7I9I:I;I<I=IIIIIIIIIII$I&I6I8I:I;I=I?ICIIIIIII IXIII!I#I%I'I)I+I-I/I1I3IoIqIsIJJ JYJZJ[J\J]JJ7J<J>J@JJJJ JpKKK$K7K9K:K;K<K=KKKKKKKKKKK$K&K6K8K:K;K=K?KCKKKKKKK KXKKK!K#K%K'K)K+K-K/K1K3KoKqKsKLL LYLZL[L\L]LL7L<L>L@LLLL LpMMM$M7M9M:M;M<M=MMMMMMMMMMM$M&M6M8M:M;M=M?MCMMMMMMM MXMMM!M#M%M'M)M+M-M/M1M3MoMqMsMOOO$O7O9O:O;O<O=OOOOOOOOOOO$O&O6O8O:O;O=O?OCOOOOOOO OXOOO!O#O%O'O)O+O-O/O1O3OoOqOsOQQQ$Q7Q9Q:Q;Q<Q=QQQQQQQQQQQ$Q&Q6Q8Q:Q;Q=Q?QCQQQQQQQ QXQQQ!Q#Q%Q'Q)Q+Q-Q/Q1Q3QoQqQsQSSS$S7S9S:S;S<S=SSSSSSSSSSS$S&S6S8S:S;S=S?SCSSSSSSS SXSSS!S#S%S'S)S+S-S/S1S3SoSqSsSUUU$U7U9U:U;U<U=UUUUUUUUUUU$U&U6U8U:U;U=U?UCUUUUUUU UXUUU!U#U%U'U)U+U-U/U1U3UoUqUsUXIRXWRXYfXZfX[fX\fXfX%RX'RX7fXfXfX4RX5RX]RX^RXpfXRXRZIRZWRZYfZZfZ[fZ\fZfZ%RZ'RZ7fZfZfZ4RZ5RZ]RZ^RZpfZRZR\IR\WR\Yf\Zf\[f\\f\f\%R\'R\7f\f\f\4R\5R\]R\^R\pf\R\R^IR^WR^Yf^Zf^[f^\f^f^%R^'R^7f^f^f^4R^5R^]R^^R^pf^R^R`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`Raaa$aaaaaaaaaaCaa aXaaa!a#a%a'a)a+a-a/a1a3fIffWffYffZff[ff\ffff%ff'ff7ffffff4ff5ff]ff^ffpfffffhIfhWfhYfhZfh[fh\fhfh%fh'fh7fhfhfh4fh5fh]fh^fhpfhfhfjIfjWfjYfjZfj[fj\fjfj%fj'fj7fjfjfj4fj5fj]fj^fjpfjfjflIflWflYflZfl[fl\flfl%fl'fl7flflfl4fl5fl]fl^flpflflfnIfnWfnYfnZfn[fn\fnfn%fn'fn7fnfnfn4fn5fn]fn^fnpfnfnfooo")o$o&o*o2o4oDoFoGoHoJoPoQoRoSoToUoVoXo]oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooo!o+o-o/o1o3o5o<o>o@oCoDoFoGoHoJoo oWoXoYo_o`oboooo o!o"o#o%o&o'o(o)o*o+o,o-o.o/o0o1o2o3o4o6o8o:o<o@oBoDoIoJoKoLoMoNoOoQoRoSoToUoVoWoXoYoZo[o\o]o^o_o`obodofohojolonpRp Rppp")pRpp Rp qqq")q$q&q*q2q4qDqFqGqHqJqPqQqRqSqTqUqVqXq]qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqq!q+q-q/q1q3q5q<q>q@qCqDqFqGqHqJqq qWqXqYq_q`qbqqqq q!q"q#q%q&q'q(q)q*q+q,q-q.q/q0q1q2q3q4q6q8q:q<q@qBqDqIqJqKqLqMqNqOqQqRqSqTqUqVqWqXqYqZq[q\q]q^q_q`qbqdqfqhqjqlqnrRr Rrrr")rRrr Rr sss")s$s&s*s2s4sDsFsGsHsJsPsQsRsSsTsUsVsXs]ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss!s+s-s/s1s3s5s<s>s@sCsDsFsGsHsJss sWsXsYs_s`sbssss s!s"s#s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s6s8s:s<s@sBsDsIsJsKsLsMsNsOsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sbsdsfshsjslsntRt Rttt")tRtt Rt { {{ {")$q&*247)D\FqGqHqJqPQRqSTqUVXYZ[\]qqqqqqq\\\\\\qqqqqqqqqqqq\q\q\qqqqqqqqqqqqqqq qqqq!$)&)+-/1357<>@CqD\F\GHqJ WXqY\_`qbq\q \!q"\#q%q&\'q(\)q*\+q,\-q.\/q0\1q2\3q4\6q8q:q9 9B%HS myR  .  .8*f r    J   6 j   (D 8l \ \ T\Digitized data copyright 2010-2011, Google Corporation.Open SansItalicAscender - Open Sans Italic Build 100Version 1.10OpenSans-ItalicOpen Sans is a trademark of Google and may be registered in certain jurisdictions.Ascender Corporationhttp://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlLicensed under the Apache License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0Digitized data copyright 2010-2011, Google Corporation.Open SansItalicAscender - Open Sans Italic Build 100Version 1.10OpenSans-ItalicOpen Sans is a trademark of Google and may be registered in certain jurisdictions.Ascender Corporationhttp://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlLicensed under the Apache License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0ff      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.notdefnullnonmarkingreturnspaceexclamquotedbl numbersigndollarpercent ampersand quotesingle parenleft parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon semicolonlessequalgreaterquestionatABCDEFGHI.altJKLMNOPQRSTUVWXYZ bracketleft backslash bracketright asciicircum underscoregraveabcdefghijklmnopqrstuvwxyz braceleftbar braceright asciitildenonbreakingspace exclamdowncentsterlingcurrencyyen brokenbarsectiondieresis copyright ordfeminine guillemotleft logicalnotuni00AD registered overscoredegree plusminus twosuperior threesuperioracutemu paragraphperiodcenteredcedilla onesuperior ordmasculineguillemotright onequarteronehalf threequarters questiondownAgraveAacute AcircumflexAtilde AdieresisAringAECcedillaEgraveEacute Ecircumflex Edieresis Igrave.alt Iacute.altIcircumflex.alt Idieresis.altEthNtildeOgraveOacute OcircumflexOtilde OdieresismultiplyOslashUgraveUacute Ucircumflex UdieresisYacuteThorn germandblsagraveaacute acircumflexatilde adieresisaringaeccedillaegraveeacute ecircumflex edieresisigraveiacute icircumflex idieresisethntildeograveoacute ocircumflexotilde odieresisdivideoslashugraveuacute ucircumflex udieresisyacutethorn ydieresisAmacronamacronAbreveabreveAogonekaogonekCacutecacute Ccircumflex ccircumflexCdotcdotCcaronccaronDcarondcaronDcroatdcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGbrevegbreveGdotgdot Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbar Itilde.altitilde Imacron.altimacron Ibreve.altibreve Iogonek.altiogonekIdotaccent.altdotlessiIJ.altij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotLslashlslashNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautOEoeRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexScedillascedillaScaronscaron Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflex YdieresisZacutezacute Zdotaccent zdotaccentZcaronzcaronlongsflorin Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccent circumflexcaronmacronbreve dotaccentringogonektilde hungarumlauttonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos.alt Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIota.altKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9Iotadieresis.altUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronpirhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonos afii10023 afii10051 afii10052 afii10053 afii10054 afii10055.alt afii10056.alt afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109 afii10110 afii10193 afii10050 afii10098WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveendashemdash afii00208 underscoredbl quoteleft quoterightquotesinglbase quotereversed quotedblleft quotedblright quotedblbasedagger daggerdblbulletellipsis perthousandminutesecond guilsinglleftguilsinglright exclamdblfraction nsuperiorfranc afii08941pesetaEuro afii61248 afii61289 afii61352 trademarkOmega estimated oneeighth threeeighths fiveeighths seveneighths partialdiffDeltaproduct summationminusradicalinfinityintegral approxequalnotequal lessequal greaterequallozengeuniFB01uniFB02 cyrillicbrevedotlessjcaroncommaaccent commaaccentcommaaccentrotate zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni1F4Duni02F3 dasiaoxiauniFB03uniFB04OhornohornUhornuhornuni0300uni0301uni0303hookdotbelowuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BF uni04C0.altuni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CE uni04CF.altuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7 uni1EC8.altuni1EC9 uni1ECA.altuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABuni030Fcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCcyrillicbighookLCone.pnumzero.osone.ostwo.osthree.osfour.osfive.ossix.osseven.oseight.osnine.osffuni2120Tcedillatcedillag.altgcircumflex.alt gbreve.altgdot.altgcommaaccent.altIIgraveIacute Icircumflex IdieresisItildeImacronIbreveIogonek IdotaccentIJ IotatonosIota Iotadieresis afii10055 afii10056uni04C0uni04CFuni1EC8uni1ECA   46latnMOL ROM  nlatnMOL (ROM B      ligaligaligalnumlnumlnumloclloclonumonumonumpnumpnumpnumsalt saltsaltss01"ss01*ss012ss02:ss02@ss02Fss03Lss03Rss03Xtnum^tnumftnumn    &.6>FNV^Pz2HJJ.,ZgwEG      !$%IJ6 "(^IO]ILI5O4LI^V0R *H C0?1 0 +0a +7S0Q0, +7<<<Obsolete>>>0!0 +UazƲIVv]0z0b8%a&Z0  *H 0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0 070615000000Z 120614235959Z0\1 0 UUS10U VeriSign, Inc.1402U+VeriSign Time Stamping Services Signer - G200  *H 0ĵR`)J[/Kk5TX56^bMRQ4q{f*j 7٘tvJcEG.k NK+XJ,XB-uލǎlLgrIž`<cxi{-004+(0&0$+0http://ocsp.verisign.com0 U003U,0*0(&$"http://crl.verisign.com/tss-ca.crl0U% 0 +0U0U0010 UTSA1-20  *H PK$ $- 7 ,Za񑑳V@뒾89u6t:O7ʕBǠWdB5N3M'L8MxSݤ^ ⥾`߭(ǥKd[98"3/!?DA e$HDT\y>]r},CS}=*:Om ]^SWp`+nx'4[^I2300-GߍRFCmH 10  *H 01 0 UZA10U Western Cape10U Durbanville10 U Thawte10U Thawte Certification10UThawte Timestamping CA0 031204000000Z 131203235959Z0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0"0  *H 0 ʲ }uNgadڻ30X~k6xw~o< hlʽR-H=]_/kLR`@~ ?Ǵ߇_zj1.G 1s W-x43h/Š*Ë!fXWou<&]'x1"ijGC_^|}bM "Vͮv M٠h;004+(0&0$+0http://ocsp.verisign.com0U00AU:0806420http://crl.verisign.com/ThawteTimestampingCA.crl0U% 0 +0U0$U0010U TSA2048-1-530  *H JkXD1y+LͰXn)^ʓR G'/8ɓN"b?7!Op18UN$ҩ'NzaA*^ݻ+>W~ +;R8'?J00eeR&.Y)"\0  *H 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 090521000000Z 190520235959Z01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0"0  *H 0 g`IoV|f^ q-!ќPL"5; .Z|=;%X{ ξ'tag'MjaXy'M4+G Df$fO8TrfujIh8y 0,`Hת809:|@T/ܨR>+!\ P4.M^%Ԍn|)]1ZՌgX5+!`x^{`W ]A cT`C!00U00pU i0g0e `HE0V0(+https://www.verisign.com/cps0*+0https://www.verisign.com/rpa0U0m+ a0_][0Y0W0U image/gif0!00+kπjH,{.0%#http://logo.verisign.com/vslogo.gif0U%0++04+(0&0$+0http://ocsp.verisign.com01U*0(0&$" http://crl.verisign.com/pca3.crl0)U"0 010UClass3CA2048-1-550Uk&pȡ?-50  *H ݔAaix0Ɛ<~B$s/DrPU nQj71ܥ-OM2NgUejzd8xEv1z`³]fvYI8VAwX00fgymPSo0  *H 01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0 100729000000Z 120808235959Z01 0 UUS10U Massachusetts10 UWoburn10U Monotype Imaging Inc.1>0<U 5Digital ID Class 3 - Microsoft Software Validation v210U Type Operations10UMonotype Imaging Inc.00  *H 0Di|U 25L3^ L*8ט@I "SOCʋVnH9c;$5}rGWyˊJ@p-5cįפ {uePd"}KXEMYLM00 U00U0DU=0;09753http://csc3-2009-2-crl.verisign.com/CSC3-2009-2.crl0DU =0;09 `HE0*0(+https://www.verisign.com/rpa0U% 0 +0u+i0g0$+0http://ocsp.verisign.com0?+03http://csc3-2009-2-aia.verisign.com/CSC3-2009-2.cer0U#0k&pȡ?-50 `HB0 +700  *H N"gA~™cjrb<8=_G_[KI  VD 5< D`E*oL;4gpZ9\Zl5|eKmIp=b۴A~}n"w6MZ S1+(RzkwD ]%,͊0>KyʦN $ 񺐶\<'ML kernT+ ~h6loca=ZlVmaxpj name 悤-postCl$&+prepގ]:f_< BK b   X/\5,33f @ [(1ASC X ? +7uq{-R-=hhoD\sq^+myoLooo^9qjoZH\o1 #3N9R3XJ=bwwdwf/-wwT7R=THoN+T!PdNuRo\dmo5)=q+LFuH; )^Jujjjjo4oZoo:/w9=b=b=b=b=b=bbwdwdwdwdwkuwwwwwow=b=b=bwwwww/wjdwjdwjdwjdwjdw/-/-/-/-oo$o$oZ'oZhZHawww/wm\oT\oT\oT\oT1 1 1 #399RRRRRRs=bubw\oT++u%7sd?5!))HujRoZ?)h=1 9oN{3Ro:9w^uw u^wwuwwwwmwwuwwj \ooZo:HR  9j=yRs1  oN\ D F9=b{^^)dwRD\fww)\w7+)Db;)dw^wTw^#3#3#39RRRJ))D)ffD{{ q R HqhNJms 3Rf 5ZwVod%{oooow551D+=3%VyTT) P3=b`{3w<Qjjdw bJ s dyR#{w -wZw!w wsu))//^ jyRD1' ^)Bbww1 )99 7 )\\Hd=5d=5oZ=R=?s\\foZ=b=bubjdwdwdw=RyRDRwwwFD   \^/^ 7N7owqwR PRVs wj )s^s\=b=b=b=H=b=b=b=b=b=b=b=bjdwjdwjdwjdwjdkjdwjdwjdwoZpoZwwwwwwwwwwww999w uu;11?w33*d-/{s\1 wwwwwAZ 0HI~'2a7 # O_?M   " & 0 3 : < D p y  !!!! !"!&!.!^"""""""+"H"`"e% IJ(3b7 #P`>M   & 0 2 9 < D p t  !!!! !"!&!.!["""""""+"H"`"d%aIvhcb]gD Xz}} Bvt n%"iOS0L\pr`<&'()*+,-./0123456789:;<=>?@AIJ$%TUVWXY\]^_`abcdefhijklmnopqrstuvhijkFopqrstu45]^@G[ZYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! , `E% Fa#E#aH-, EhD-,E#F` a F`&#HH-,E#F#a ` &a a&#HH-,E#F`@a f`&#HH-,E#F#a@` &a@a&#HH-, <<-, E# D# ZQX# D#Y QX# MD#Y &QX# D#Y!!-, EhD ` EFvhE`D-, C#Ce -, C#C -,(#p(>(#p(E: -, E%EadPQXED!!Y-,I#D-, EC`D-,CCe -, i@a ,b`+ d#da\XaY-,E+)#D)z-,Ee,#DE+#D-,KRXED!!Y-,KQXED!!Y-,%# `#-,%# a#-,%-,CRX!!!!!F#F`F# F`ab# # pE` PXaFY`h:Y-, E%FRKQ[X%F ha%%?#!8!Y-, E%FPX%F ha%%?#!8!Y-,CC -,!! d#d@b-,!QX d#d b@/+Y`-,!QX d#dUb/+Y`-, d#d@b`#!-,KSX%Id#Ei@ab aj#D#!# 9/Y-,KSX %Idi &%Id#ab aj#D&#D#D& 9# 9//Y-,E#E`#E`#E`#vhb -,H+-, ETX@D E@aD!!Y-,E0/E#Ea``iD-,KQX/#p#B!!Y-,KQX %EiSXD!!Y!!Y-,EC`c`iD-,/ED-,E# E`D-,E#E`D-,K#QX34 34YDD-,CX&EXdf`d `f X!@YaY#XeY)#D#)!!!!!Y-,CTXKS#KQZX8!!Y!!!!Y-,CX%Ed `f X!@Ya#XeY)#D%% XY%% F%#B<%%%% F%`#B< XY%%)) EeD%%)%% XY%%CH%%%%`CH!Y!!!!!!!-,% F%#B%%EH!!!!-,% %%CH!!!-,E# E P X#e#Y#h @PX!@Y#XeY`D-,KS#KQZX E`D!!Y-,KTX E`D!!Y-,KS#KQZX8!!Y-,!KTX8!!Y-,CTXF+!!!!Y-,CTXG+!!!Y-,CTXH+!!!!Y-,CTXI+!!!Y-, #KSKQZX#8!!Y-,%ISX @8!Y-,F#F`#Fa#  Fab@@pE`h:-, #Id#SX<!Y-,KRX}zY-,KKTB-,B#Q@SZX TXC`BY$QX @TXC`B$TX C`BKKRXC`BY@TXC`BY@cTXC`BY@cTXC`BY&QX@cTX@C`BY@cTXC`BYYYYYYCTX@ @@ @  CTX@   CRX@ @@ @Y@U@cUZX  YYYBBBBB-,Eh#KQX# E d@PX|Yh`YD-,%%#>#> #eB #B#?#? #eB#B-,CPCT[X!# Y-,Y+-,-@ TF!SRRFXPF!H U UHUOMXNMRMFQ'3&U&2%3$U3U3ULJOKJxJF:3UU3U?IFXHFGF FF7F#3"U3U3UU3UOU3UoTS++KRK P[%S@QZUZ[XYBK2SX0YKdSX BYss++^stu+++++t^s+++^st+++++++++++++++++++++++^Nu?_Z^WR^a[Y`RVRRp$$$$Pv~!Up+nch Ci K 2  D b $ a  b @y;d|T3uMy c0E~@e+Fm'QY3?z7js:Pe{ .@  ! 3 !'!!!!!!"2""""""########$$$*$$$$$$$%K%%%%%&&[&l&}&&&&'<'M']'n'~'''''''(S(d(t(((((((()))")2)C)T)`)p)))*C*T*e*v*********++!+-+8+s++++++++,,P,a,q,},,,,,-G-X-h-y---........///'/7/C/O/`/p/{////070H0X0i0y00000001H1Y1j1{111111122*2z33333334 494g44445,5j555666*6;6M6^6p6|666666667?7G7O7}7777778=8E8M8899o9999999:I::;\;<">s>? ?A?|?@?@@AAA/A?APAbAABBB$B6B>BBC8CICZCCCCCD7D?DDE"E3EgEEEEEEEEF#F+F3FdFFG GTGGH8HHHIXIIJ#J+JyJK KKOKKLL L2L:LBLhLpLLM MHMyMNNRNNOEOOPPPiPqPyPPPQOQWQgQwQQQRRR'R8RJR\RmR~RRRRRSS3STSSST"TTTUUU]UeUUUUV VWVW4WX(XYYYYaYYYYZZsZZ[[/[[[[\i\\\]]+]7]a]]]]^$^g^^__z______________aahayabbGbbbbbcc8cvcccdUddee ee9ePeaereeffhfg!gghuvvkvw,wwxxnxyypy|yyzzSzz{8{v{{|=|||}}h}~|~~~~~4zMȁ\OgYarۅ.y S+vȈ (9I[lt|@RcuO`pƊ؊ -?Pbs‹ikGOUZL֓u}Ӕ$0 BzUo() |Vn&xq  ,0K@'0-./!'  !'-/21**0/0/$?3?3??9/39/3933333310324&#"#"&5463232#"#"&54632#Z`c^`ZݖwZ``Zݔ`+uܹrq'J{ +7Q@-2 ,) 98$%/  5LY !LY?+?+?99993333310467'&&546326673#'#"&2676654&#"{KB@=V `? \mǀgy7(Pp||jrslRGJik7HtZS,tWgHevOROkU_^ut?9310#!=!R @   ?/99331073#&Rq0o1 ή3l= @   ?/993310#'3ۛo0q1:͵1h@ ?910%'%7w%u|}z'kh'G{GT'ho# 8@#  RY/?_ /]3+3939910!!#!5!3qNRPRRPRD3//9910%#7' KcAM!\7R@ SY/+99105!\RRD@  QY?+93107432#"PRRPNbbb@ ??993310#h Js (@  MY MY?+?+993310#"3232#"}v~pPIDP @    ?3?9933310!#47'3b  9V)G)q2@  MYNY?+?+993310!!5>54&#"'632!m>6߿ۓXZE̳^(Q@+#  *)NY  &&MY& MY ?+?+9/_^]+99333910!"'532654&##532654&#"'6632ӫߦT\ܞխmp1U{^Sc,2`z=JCGS+u @@!  MY?33?9/+993333310##!533!7#u^yguuC .%:@ MYNY MY?+?+9/+933102#"&'532654&#"'!!6 mBl_‚<:-o+(g7+˭''`#&N@*# (' OY  OYMY?+?+9/_^]+9933310$32&#"36632#"2654&#"^NIg LmߤfhcoXbdSοZNoxm+@NY?+9?93310!!5!NZV`Iy$1W@/ /( ",32",,"OY, ,, %MY MY ?+?+9/_^]+9393333102#"&5467&&546632654&'"6654&F㍞즮j򻨤ȝบe?wϾpIOFLviV|UGyFkW:?kxo (N@*% *)!OYp MY OY?+?+9/_^]+9933310#"'532##"&5432"326654&& hX+y  Inǐu#eg]J|VeV`gcչZMusD-9@"  QY / O o   QY?+/_^]+9399107432#"432#"&PRRPPR/#".Nbbbbb5..LD-/@  QY_   /]+//9310%#67432#"&/ KcABPR/#".a)lbb5..o # @?_/]93105#L7 =_ko#?@) RY RY/o/]+_^]]+9105!5!oLuRRhRRo # @?_/]93105o7Ljc_&=`9'A@!$  )(& PY&"QY&?+?+9/93933310546776654&#"'6632432#"%Ke[H>OP%nO$A\8@EsPRRPy%{YO=xN#'P0 ŬDfWQ/6Ybabbbq;5@T@-<;6 ". (.BA >+990 @  2%+2?3/39/]3339/39933333310#"&'##"&543232654$#"!267# $3232&#"Yo +lŠFQgۼN3]zKnwOrl]de)0hi$$4cPeZ#<@     LY?3?9/+99333310!#3#!&'qLA@s # D`>n`NQ@+   !LY LYLY?+?+9/_^]+99333310! #!!2654&#!! !@fBλXT+uJ-&@LY JY ?+?+9310 !27# 4$32&?*=֩)o/Z3eTP\P%(@  LYLY?+?+993310!!! !!3 %~^mo:= E@%   JY JY JY?+?+9/_^]+933310!!!!!!!Gn^^ <@!  JY? JY??+9/_^]+93310!#!!!!5f!El^_):@ KY LY LY?+?+9/+93310!! 4$32&# !27!U)B8ʍMeZfYX\X9 7@  JY/ ?3?39/]+99333310!#!#3!3gffVg1wZ 7@   LY LY?+3?+3933310!!57'5!FB AAH5 @  JY"?+?93310"'5323!\;NGfXJ 5@     ?3?399333310!##373}ff=V@KY?+?9931033!f`>@     ?33?39933933333310!##333#47#Rbg F|JTt|.@  ?3?39999333310!###33&53g bfa cvL (@  KY KY?+?+993310! ! ! ! _02ZTk^]mT=<Q? 4@  LY LY??+9/+9933310!##! 32654&##?ff 9@  KYJY?+3?+9333310## ! ! ! M!_02ZT6J^]mT=<Q R@.   LY?O  LY?+?39/_^]+393333310#! #%!2654&##5f\z}ʓ,f}Xo$4@ %& LYJY?+?+9993310# '532654&&'&&54$32&#"Fε%;Oy;fCSmZ4MNXLQhS:;o '%@ KY?+3?9310!#!5!!Lg%%V``%@  LY?+?3993310!"533265gNN *@ ??3993333103#367/oZmpT;JqK3D@"    ?3?3393993333333310!#&'#363663\T(;VnkNq%3 ) ghYWR9aUO(wlH,N 5@    ?3?3999333310!##33NuPHqAsm;VrF9,@ ??3993339103#3niu -RJ 8@  KYKY?+9?+993310!!5!5!!JXqL `LZ@  ?3/3993310!!!!ZTJ^@ ??993310##gJ3@  ?3/3993310!!5!!3JT=^X19'@?2993333103#XDdur1pNH@ SY/+3310!5!NRR! @  /99310#&&'53E`!FO/0LbR$Q@, "&% IY    HYFY?+?+?9/_^]+99333310!'##"&54$7754&#"'632%2655JRv ~%'ɾ}iWHTVT-FDZk yfqL!>@   #"  FYHY?+?+??99993333102#"&'##3366"3265t6 >c>yT`XyXJUb\ZwT&@ FYFY?+?+9310"32&#"327hhιh&-1X/5\3w >@   !   FYHY?+?+??999933331023&53#'##""!26554&DvDbA|ᲳgTVh~y즺 *Z2wTG@'    HY HYFY?+?+9/_^]+933310"32!3267"!4&mͿ]l\{$9P+Z(ý=@  HY HY?+33?+?9399310!##5754632&#"!JcʓZZPOta:%TȻVe-T)3?@G :4$.*$A@'2! 7IY` )2GY)'=IY')IY),IY?+?+?+9/+9/_^]+339993333310#"'332!"&5467&&547&&54632! 4&## 32654&#"ZѰJ;>O]w1;_jϰk;MS?EpT/40pM2mS'l bX~3@    FY ?3??+999333310!4&#"#33663 õcc=rbXs9) %@ `  ???]933310!#3432#"ccq?##??.`2.-4) 4@  @FY?+??_^]9333310"'53253432#"%P7E@  !   FYHY?+?+??9999333310"32373#47#'2654&#"9uTbvƩ -z~X T,@   FY?+??99933102&#"#3366bEODIcT CT_?xaTXT#4@ %$ FYFY?+?+9993310#"'532654&'.54632&#"XڀC͸%yCCkRkYRp6;UkMzBZBXNUf?5UlyF;@    HYHY?+?+333/939910%27#"&5#5773!!^FH^23?XDP:-VP}x?0@     FY?+??39993331032653#'#!  ·bTj?@X? (@    ?2?39333310!33673\f8)+f\?jr?L@'     ?3?33939393333333310!&'##33673363$-bj=;ZHHdJJ+?nMkLAp7? 3@     ?3?399933331033##rDAmsm/6?2@   FY?+?3/393333103363#"'532>7fi*_f;PkL9F:C3N?S ?b\l6V0e!RZ? 8@  HYHY?+9?+993310!!5!5!!Zw?X?X=7@   ?3/39/3993993310"&54'5665%wåzlh|XbaYfe[QPbc^+Zjhς{X@ ??93103#\\H7@    ?3/39/39939933104675&&54&'52#5665NYaaY{myÍy'{1gkZdaP[egoh#=,@ o@ H/+]329910"56323267#"'&N1v8l}=le~^8k>0qIt|=;^n,:=@`1@H9HT )@" QY?+?9/9333103#432#"&=wPR/#".ibb5.._@;  MY  MY 0`p??9/]q+39/_^]3+939910%&5475332&#"327###ZͺRgɴn R"+!7T3:\8N1O@*     OYMYNY?+9?+9/3+39399310!!5665#534632&#"!FN)n{ķ#t0`TR)DVBR 'T@%  )(@ H @ H  "o/]329+2+293310'#"''7&547'763272654&#"Z;nk;ZZ;gi;Ziӗi<]]P@-5*8<1 %@?<5-! IY !'IY!?+?+99933333310467&&54632&&#"#"&'532654&&'&&76654&&'eXVNˮ#[M3xVV\V2Ȑe?RX@Qc-S&/nQu@P"YK6E>+@fe*lR%_Nc[7AB.IqANH?)r@>PJ2pPL@  /329933104632#"%4632#"P @@?} @@?m.(VVV.(VVdD%5N@/.&76     "2*"?3?399//]3]3933310"327#"&54632&4$32#"$732$54$#"Trfj޺wl%b^^]0/͵ϲD+X-4S-^ZƲѲ0.N!D!7@ #" ?3]39/39333310'#"&5467754&#"'632%32655Tv_p_LDWm!urdF=ZiXtz-HTbZdg+MK1I8=6>d\@=R}- -@    _/]329333310%R5>>h6==++++o3@ RY/?_ /]+99310#!5RR\7RdD%5c@6  .& 76  "2*"?3?399//]3]39/33933333331032654#####324$32#"$732$54$#"p[hnMHyҨeӏ^^]0/͵ϲ]YOy"whp|^ZƲѲ0.f@ SY/+3310!5! Ru #@ ?  ?3]29933104632#"&732654&#"~~~ZzWV{xYZw[~|]\}o#'+W5Ju%@   ?33?393310!576654&#"'632!u}^]Mlm1w|6SJNyMGSRAgo/TW])9#?@% %$O_o ! !?3?39/]]3993310#"'532654&##532654&#"'632hXIxswwwij^Pv/Nk-bWSNTWMCQNF^x! @    /993106673#I$hFO04W??@     FY?+???39399933331032653#'##"&'#·bT2uc3c?@XM]79\Nb+qR-@ JY/+/9/393310####"&563!Rdd@RF3oD3+'@    /?39/393310#"'532654'73yD>NR]`Bde X 84^u%LJ @    ?2?99933103#47'^\b /#czMF! %@  ?3]2993310#"&54632324&#"dmmduH}# )@   _/]3/293310'7'7#>>5==5w+jk+yw+jk+y;p&{'?< ?55 {&{'t?5)&u'<F +?55Ju%T(?@ #*)!!&QY! PY#?+?+9/939333103277#"&54667>55432#"&9OaZI>}l@%oN(M@E/PR/#".%}UO=wO|.O0 ƪFl`o5[aa+bb5..s&$CR&+5s&$voR&+5s&$KR&+5&$RR&+5&$jR &+55&$P ?55m@;   JY   LY JYJY?+?+3?9/+9/_^]+93333993310!!!#!!!!!!#3%om@gd^^&&zs&(CR &+5s&(vFR&+5s&(KR&+5&(jR &+554s&,CR &+5Z_s&,vWR&+5[s&,KR&+5:6&,jR &+55/% [@6 JY?_o  LY LY?+?+9/_^]3+39399310!!#53! !!!!3 %~^moj^:=^&1RuR&+5s&2CmR&+5s&2v%R!&+5s&2KR%&+5&2RR"&+5&2jR (&+55w @  _   /]910'7H:h:ij9i9 :ih9h9:#U@1  %$!  !KY KY?+?+3399933910!"''7&!27'3 &# VJZ_0lHooËkxx;q]y<;jT=ȫ fs&8C9R&+5s&8vR&+5s&8KR&+5&8jR "&+559s&<v)R&+5? @@!  LY  LY/  ??9/]+9/+99333310!##3! 32654&##?ff  D4A@" & -. .65&2.2)HY2HY?+?+?999333310#"&'532654&'&&54676654&#"#4632Q;JAj[-_/AEryNn`AJJAcϽo@I',0B-KckC%k&0mjSzKWxV9QELTyl璥̺&QR&+5w9!&RC&+5w9!&Rvj"&+5w9!&RK &&+5w9&RR#&+5w9&Rj )&+55o# \@=RYP  RY@/?_ /]333/]+/_^]q+9399105!432#"&432#"&oPR/#".PR/#".RRcc4..tbb5..w9h#U@1  %$! FY !FY?+3?+399933910#"''7&5327&#"4'3269vVH]yz`JhpNbH^!bq:x )h|7zZwBR!&XC&+5!&Xvf&+5!&XK &+5&Xj #&+55!&\v"&+5L >@"! FYHY?+?+??9999333310632#"'##3265!"rsccsټTJXby&\j )&+55&$M1R&+5b5&DM(&+5!&$NR&+5b&DN%&+5B&$QbBR)4j@< ..'2 !'65@P '#.IY #'#HY#*FY?+?+?9/_^]+99/_^]393333310327#"&54767'##"&54$7754&#"'632%2655j1!(@Tc(&YRv ~%HGɾ}n T_WFECGiWHTVT-?qDZk yfqs&&vR &+5w!&Fv3&+5s&&KR$&+5w!&FK#&+5&&OR&+5w&FOX&+5s&&LR&+5w!&FL&+5%s&'LPR&+5w;&G8/%w'b@8 $)( IY FY  !HY?+?_^]+??9/3+39993391023&55!5!533##'##""!26554&DvD'bA|ᲳgTVh~ykRR *Z2&(MR&+5w5&HM&+5!&(N R &+5w&HN&+5&(Om5&+5w&HON$&+5B&(QPwgT&HQN%s&(LR&+5w!&HL&+5)s&*KR(&+5-!&JKM&+5)!&*NR&+5-&JN@&+5)&*O?R#&+5-&JOH&+5;)&*9-!&J:?D&+5s&+KR&+5&KK"&+5`@4    JYJY/ ?3?39/]+9/33+3393399103!33##!##5!fVggf^1J^Y@2     IY  FY ?]+?3?9/3+393933910!4&#"##5353!!3663 ųcc'=rRRbXsX&,RR&+5O&Rz&+5$O&,MR&+55&M&+5$M!&,NR &+5&N&+5ZB&,Qf'BF&LQZ&,OFR&+5?@ ??9310!#3cc?Z&,-o&LMH$s&-KR&+5 !&7K&+5;&.9;&N9)? 7@       ?3?3993333103##3+xTwcccb0%}?s&/vYR&+5&Ov &+5;&/9Ba;(&O9&/8 ?5H&O8&/Ok&OO8 9@   @ KY?+?9/99399103'73%!ω)fD/'VJp+L` =@$   ?_ ??9/]q99399107#'73+c-c1gF1VHs"s&1vR&+5!&Qv`&+5;&19;T&Q9Ps&1LR&+5!&QL&+5Z&QL<@   JY"?+?33?3999333310!!"'5325##33&53];NH bfa cX vLT>@ FYFY?+?+??999333310"'53254&#"#336632O9En_[^^wT ,3g@7'0'1! '54 0HY00 00 -* *FY $$FY?3+3?3+39/_^]+99933339910"&'#"&532!2!326732654&#"%"!4&7;ƙt9n!Ų]l\Ŵ )P+Z(5½s&5vbR &+5!&Uv&+5;&59m;T&U9s&5LR&+5!&ULx&+5os&6v?R.&+5TX!&Vv-&+5os&6KR2&+5TX!&VK1&+5o&6zFTXT&Vzos&6LR(&+5TX!&VL'&+5 ;'&79;yF&W9| 's&7LR &+5&W8D '?@!  JY  KY ?+3?9/3+3939910!!#!5!!5!!Lbgf%%_F_=``yFR@-  HY @  HYHY?+?+339/3+3939103#5773!!!!327#"&5#)23?5X^^FH^9:-VV}xP/&8RqR&+5&XR&+5&8MR&+55&XM#&+5!&8NR&+5&XN&+5&8PR &+55&XP &+55s&8SR #&+55!&XSX $&+55B&8QB/?#M@*  " "%$@P # #FY?+?3?393/_^]3933331032653327#"&54767'#!"&5 ·bHGj1!(@Tc('Nj?@X?qHn T_WFEE<3s&:K?R)&+5!&ZK)&+59s&<KR&+5!&\K&&+59&<jR &+55RJs&=vXR&+5RZ!&]v&+5RJ&=O\R&+5RZ&]O&+5RJs&=L R &+5RZ!&]L &+5 !@ HY?+?93310!#4632&#"cZZPOta˸VD@$ MYMY MY?+?+9/3+39399105754632&#"!!#"'5325/ϙReYGsf玈U7NBV;%ɺVXZ%.}@J(*   *.  0 /.@H. # JY  O(_(o(( ?3]9////]+_^]33+333393333310#!#&&54632&'32654&#"7673#DRD)sn5DTxabx1$(чL=>LN<2@ IY    HYFY?+?+?9/_^]+92_^]2]9/9333333310!'##"&54$7754&#"'632%26556673##"&5463232654&#"JRv ~%'ɾ}0k!#DD#xaaxxaaxL>>KN;)bDFzclqFCCxejr]+q! (@    /299333310#&'53673qHbLFrklqF{^qr]%P5@  H/+39910!!%+5R7` @   /22993310"'332673JR]XX]PWKKW 3  /9310432#"@""@m`2.-4s%  @   /32993310#"&5463232654&#"%xaaxxaaxK>>KN;>Katta^uv]BKKB@KL?B^&@    `p//]393310327#"&54673j1!(@TcPHZHGn T_WF8?q&@    /22993310"&'&&#"#663232673 $N> = -<I jT0P*"@.>Lj%5(EWo2",IStz!#@   /32933106673#%6673#HUwFRHUwF!rm!rms @    /993106673#8wZ4:KeMX5h1@  /39/33933310673##432#"%432#"K(ug2:@??@@??@}4GVVVVVVV &$T:?5oD3H &(ZT?5L &+ZT?5 ',T?5 &2 T?5) '<T ?5 &vTP&U &&+555$%@JY?+?99310!#!!5f!E^}((RJ=+H@*  JY?_o  KY KY?+?+9/_^]+93310!!%! ! ! ! g_02ZT_#k^]mT=<QZ,. *@ ?3?993333103#3#&'qqT1HsL%D`@"&% #HY?+3?93933333105!#654&&'&&54>7!݁::2?`r4vjѸ3\iVKqO!:VC<~Vg17,&мdT7@      FY?+???9399333104&#"#336632cT6p?WSMw+ I@'   HY/ HY HY?+?+9/_^]+99333310# 3  !"!3-a# _  qm LH=P?@  HY ?+?99310327#"&5]jA@R%?oT ?!"?@ "$#  IY IY?+?+?9333939310#'.#"5632327#"&''# 7#2B0,:?3DXD/$04C` YDkS* K.k++ J@Im_R?w? (@   ?3?2399333310333#f"8_f??qvwos/\@0!'  , $'10..IY..%#'$%$HY%?+3?9/+9939333339910#"#654&&'&&54675&&5467##5!#"!3)A}q`r5ujϺysEX| ]wK#&fawc2:*&ơ* $o+ VO^fw9TR?7@    HYHY?+?+33?93310%27#"&5!##57!#=*%-[gbݥD Ttq:V5T;@   FYHY?+?+?999933310#"&'##32%"32654&5TAb5Daþ#55^# ==woT 5@ "! #FY?+?939333310#6654&'.532&&# F%3`7;vM E*j`"h_,SJGJ2AFzDž:1Xw? 7@    HY FY?+?+39339310#"5!!#3265'#"1+³ĵO#V)P?,@HY HY ?+?+39310!327#"&5!57PRmxKG9oע?V[T:=?+@  HY?+?399333310"&3324&'3Zb!bS܈twT#J@&  %$FY  HY?3+3?+??9333993310$7!24&#">}PfJqXZi! "8{f (0T  N"H@)   $#IY IY?+?+??9329391023327#"&&'#&&#"56(8,(Xoj624$*&%;:QC8bp4#%.N:`(X& L1i-:3C:G?G@$   FY ?3+3??3?9333993310654&'3#$3$`?bb8~ݚ&   wh?)O@'#$$' ' '+* # FY?3+3?39/993333333910"&'##"4733265332654'3 q# 'i:AfB7|krcun|7Bg?;g_g_ 啍DؙP&j &+55=&j &&+55w9s&RT"&+5=s&T&+5whs&T3&+5&(jR &+55 D@% JYKYKY?+?+3?9/+933310"'5326554&#!#!5!!!2^0:TmvggdzV``s&avZR&+5B@$ JY LY JY?+?+9/_^]+93310 !!!27# 4$32&?,=֩)o^/Z3eTP\Po6Z,:6&,jR &+55H5-#O@*%$#LYLYKY JY ?+?+?+9/+39333310#!! #"'5326!3232654&##nGRMvb>7=0DND\>NJܰVo\f 3{塭#V@/    JY   LY?+??39/_^]]3+39333331032#!!#3!332654&##m/ffg۰1-{ ;@   JY KY?+3?39/+933310!2#4&#!#!5!!½ixLgoqV``s&vR&+5 D&6!R&+5 0@  "KY?3+??3933310!!#!3!3%b%fLfqV$R K@*   LY     KY LY?+?+9/_^]]+9333102#!!!!2654&#!Z^51+ž1`)%a E@$   " KY  KY?+33?+?393333310#!#3!3#!bci nR̃q>((=L@(      ?33?3393933333993210333###qLfLrf<<:R%N@* !'&KY ##JY#JY?+?+9/_^]+9933910!"'532654&##532654&#"'6!2L_`ʹol:`BGVh.2`}?MP.@    ?3?29999333310333#47##b`gc fDfJD&6R&+5 6@     ?3?393393333310!##33-ff=<</@ KY JY ?+?+?93310!#! #"'5326!g)\?EbKC2=4Was9V};\0+2n?3& '7 9@      KY?+?39393393310"'5326673373wIV`HgX?y#r+-Rdg%1mLEJ=cxDosN; 2@  "KY?+3??3933310%3#!3!3bfLf`/qV8@   KY??39/+999933310!##"&53!2673fgE`f{g3#;= 1@  KY?+3?33933310!!3!3!3=fffVV;@    " KY?+33??33933331033!3!33#fffbVV/q  K@*   LY KY LY?+?+9/_^]]+933310!!5!!2#%!2654&#!Z žV`{ZK@*  LY    LY ?+??39/_^]]+9333310!#3!2#!3!2654&#!ffif!̷{T @@# LY   LY?+?9/_^]]+9933310!2#!3!2654&#!5'\f-ž1FqB@$  JY  LY JY ?+?+9/_^]+93310"'63 #"'53 !5!PX)Dq6o#+\N3^3R3^,O@+      JY    KYKY?+?+??9/_^]+93333310! !#3!! 32#"bffL%K  kT1w8hmU<;R R@.  LY?O  LY?+?39/_^]+393333310#&&5!!##"3!!y{\fĽ}ʙJ}ݙbRD{#%A@! ""'&" FYFY?+?39/+93933310%6$736632#"2654&#"{cx_ kk߫tQYc#1V8'm^ϑ?Z@1  ! GY  GY  GY ?+?+9/_^]q+993333910#!!24!!! 4&#!!26fsu5ͺJp%Z9guyq?N_Q^5?@HY?+?99310!#!5c?)-? E@$    " FY  GY?+33?+?393333310#!#36!3#!-bbH qϿ*wTHL?L@(        ?33?339393333333331033###3wdy)d+y?''+D7T&P@,%! %('%&&%HY&& && HY FY?+?+9/_^]+9933910 54&#"'632#"&'532654&##5'~PO%ynj9gUjaf%#RN4l)"c1#}tqlV? ,@   ?33?33993333103#7#_{? !?&6 &+5? 6@   ?3?3933933333103##3{ ee?'??/@ FY FY?+?+?93310!#!#"'532!bWm'#q$<uaZ?>@  ?33?3939933333310%73##&&'#3>9^1X!Z:%j&?.f;5?a-? =@"  HY/?_o   ?3?39/]+99333310!3#!#bbNc?# ?w9TR?%@ GY?+?3993310!#!#!cccc?LTSwTF)h?%@ HY?+3?9310!#!5!hb?V?\wK@(   !  FY FY?3+3?3+3??9333910#&54734&'66bb!((&@P7?[? 2@    " GY?+3??3933310#!3!33ccbq??8@   FY  ??39/+99993331032673##"&5b`ccdp?zFMMBx? 1@   GY?+3?33933310%!3!3!3ccc^??;@   " GY ?+33??339333310%!33#!3!3cblcc^1q?)? O@.   GY  HY  GY?+?+9/_^]]+933310! #!!5!!2654&#`\RuӛVG|rja? O@.  GY  GY?+??39/_^]]+9333310! #!3!2654&##3ZbcKbbuӛ?Gvvla?? D@'  GY  GY?+?9/_^]]+9933310! #!3!2654&#=cpuӛ?GxtlaDwTD@&   HY    FYFY?+?+9/_^]+93310"&'53267!5!&&#"'6632f\(hͳj8E \5X:;0qڸ.+ 2XҾX5\TXTV)L&j &+55)M? V@0 "!GY  FYGY FY ?+?+?+9/_^]+9333310!2!!!#"'532!!2654&&#^͸\Wo% r&8umv^ZPswJU'h?T@-     GY    GY ?+??39/_^]3+3933399310!2#!!#3!!2654&&#'ĶccKc8uz?.?.Pm{KW&!&v&+5&\6&+5? 0@   "GY ?3+??3933310!!3!3!#7ccc?'@ JY?+?9933103!#cEf-u5'@ HY?+?993310!#!35c`?J3s&:CR&+5!&ZCX&+53s&:vR%&+5!&Zv %&+53&:j?R ,&+55&Zj ,&+559s&<C~R &+5!&\C,&+5RR@ SY/+99105!R\RRRR@ SY/+99105!R\RRRRlN'BBv%&HH++5 @  ?99310'673) c+AE p[eX @  ?99310#67 KcA@`#rD3'83HHH H H+++++5 @  ?99310#&'7 EA(c# WfT|J"@   ?3293310'673!'673f "b*BBN c+AE x[bfp[eXJ"@   ?3293310#67!#67 KcA@ $b(BB`#rWb-fDq '85HHH H H+++++55{s B@'   TY@??9/]+993910%#53%suRug3p_{si@C    TY   TY@   ??99//]+9_^]+993910%%#553%% guRRugpspE%pcp7 @ ?/]93104632#"&QIIQRHHRY[^VU`^&'q  ,0:Fa@36;1A!'0-./  !'-/;AHG8D**0/0/4>$?333?3??9/39/33393333333310324&#"#"&5463232#"#"&54632#32#"#"&54632Z`c^`ZݖwZ``Zݔ`+-Z``Zݔuܹrq'Jrq NR}@ _/]9310R5>>++H}@ _/]9310'7==5w+jk+y&=@ ??333210#=^+Jq-.@      ?3]2?399333104&#"#33632=UUl\ZK F-]Qn|Ze`hV@0  OYNY?   NY ?+?9/_^]+9/3+393910!!##53!!!!ufok}R+R9^^N1&m@> $ &('OY$@ H@OY  MY  NY ?+9?+9/3+3+2+3939310!!!!56655#535#5354632&#"!eFN)n{ķ#RRt0`TTRRDVBR&j@8 " (' @ MYMY&MYMY?+?+?9/+9/+33933339910%27#"5#57733#!##3 32654&##':20S㠠'=F-f:VB R;+V jV@JX*@P "  (,+ ! OY!@ H!@ OY ? %%MY%MY?+?+9/_^]]q3+3+2+393333310"!!!!327#"#53&57#5332&#)E블QG*' XK'uRhARA^" R&KfR2"(VH -1H@& 1./0& +.032)1 010#?3?3??9/39/393333310#"&5463232654&#""&54632&#"327#ݝga_fe`ced]ULyv}dUV^+N|z|JX|z T%Jsm&O@)$  ('$   $$  /3/39///]3999993993310%273#"&556746324&#"66ZNh^j\}stƽXQGIDH咭+T&Vӆ|\ij`s1M&*p@>" (),+ '%LY LY ''(LY'?+?3?39/_^]+_^]+99933333310!###33&53#"&5463232654&#"5!h bf#bda^ec`+tLh{}y|VV L@'    ?3333]2222339333333310##5!###33#7#9V XR}}VNN}ah^/RvfH9@  ! /??3/299//]3933310"&546632!3267&&#"y1RQHbٓ2Xz#5Fi)|5Buw'@'{  ?555 '@N'u  ?5555&='y@= +?555Z'@)' ?  ?555w&L@' $('  FYFYFY?+?+9/+999333310"&54632654&#"563 '2&&#"ϥ`=1,'_voͶ6KE!c33\L{} 5@  KY?+?999933331073!! P05|yy;{9#%@ KY?+?3993310!#!f?TLV E@$   JY JY?+9?+99393331055!!!VxtwF_E^E^o#)@RY/?_ /]+99105!oRR%,@  //39/332933310##533bn^X{ #/B@%! ' -10-** $$?/]223]22399331026632#"&'#"&546"32654&!"3267&&[A?^~^?BZPs77sPXhiOWjjWJs=l~t|:?^o*9}`qH9=;^n,:=@`qH9o#g@B  RY    RY / o  /]+993_^]]+9939910'!5!!5!!!!L{^ I}:%RFR1'RRo#&+W ?55o#&!+W ?55w- 5@    ?/99333333103# w1=1w!m&ILf&IOf @   /22993310"&'332673N Xjonk Xمn[^k? @  FY?+?93310"'53253%P7EABEF\k,-  !4589 //39399/]/+]3339/q33339393933333310!#%5!#533!5353!5!!5!5!#3#35!#35!35!#35#3#3#"&546323254#"%32##32654&##32654#"'53253T/0momImmmm0oowoooomm~smp.,;0m^{B.$*/;J1%Z^4+V}i0oo/mmmmmmoo;mmJoooo/yhIaCS1D D8QYb" "+%J fVr_cT*8@ % ,+(""//9///339333310 54676654&#"63232654&#"TV,AgIOGRZ?>1HT;GFBIHCHEVW/2A1R~X8*P:/5K6DpJ;?HI>@IH !&7L&+5  +,5f@6-*3$  $+76-0+!',,+FY,,'IY''0FY'FY?+?+9/+9/+99933333310#"&547654&#"'632! 4'$$546323'&#"-#'7>IPX( lw/^A'm>xw%71K_]4jkO84ÏZZneP6@ JY?+??9339393107632&#"#32fC*IwTiuq@b ZW-?,V@-''&  &.-&&HY+""FY?3+3?+3399/933333910"&'##"&547!57!!4'!32655332#j(%rSbҨ6QGIAS}mrbykbnkeߎ:Vě칱݆u&0vT&+5f!&Pv,&+5&$[bR&D[&2D\O ?55{- @   /32993310#"&5463232654&#"-xaaxxaaxK>>KN;>Katta^uv]BKKB@KLh&@   /93310673#%467#"&W$sj14gf$( .6CBxTf7&D%F&I'IfL&I'IfO D@" "!  @ KY KY?+?+9993339910! ! 6653! ! _0JQOh skkTk^]#T=<Qw!D@! #"  @ FY FY?+?+999933239910#"&532667332654&#"9tہHGd f`RŴǴ!Պ )&#@@  @ LY  LY ?+?39/+9933323106653!"533265YSi gqN#M@& ! @ IY FY?+??39/+9993332331032653>53#'##"&5 bBM!e @waT4v?@Xz Brn{\RX !C<!vQ R6d /210#'6654&#"5632d P YQCN0-47ly$y8,00N [j} /10432#"j@##@`2.-4s&(CR &+5s&CLR&+5w!&HC&+5!&C &+5B5T@+ 3%%+76("(/(/KY("KY"?3+3?3+39/9339333910%273324&#"'6632#"&'##"32&&#"gfnSg?_/+DsGoNLoItA+H\/kVLPRiA"^$c+55+qT#^$?G@%   ?3?339393333333310#33663363#%gyh'a"Qfє^eAR&?jMZL [@2  LYLY@ LY?+?9/_^]q+9/3+3939310!3!!!2#!!!2654&#!Pfi!=Tըb'`@7  GY    IY GY ?+?3+39/_^]]+939310!!! #!#5353!2654&#dr=bq?QӛQGxtla X@0 ! JY LY JY?+?+??9/_^]3+393333310 !!!27# !#3!!2&+bffu*֩)o^/Z3]1w4jP\PT"Z@2  $# HY     FY FY?+?+??9/_^]3+393333310"!#3!632&&#"!!327hccd =465Hй}-?'XX5\ O@-    JY_    ?33?9/]+3993333310####3#!&&'wbos1bs'RX"NNDb4X ? C@$    IY   ?3?339/+393333310#####!'#1eяbgo>t(/?  ?zQc@5     JY   ?3?9/3+3399333339992210####!#3!3#!&'Hbo3%ff1br3}y" !111wD-%Ue3Wh?e@=      HYP` ?3?3?9/]3+339333333310#####!#3!!'#d݃bfccfa#r/??''`Ps!m@; !!#"! LY 0  JY?+99?339/_^]3+3993339333310#&&####"#>75!Iyh\bi-#g"m|R h/hxJVFp/mhɞH!V^ ? m@< "! HY  PHY?+99?339/_^]33+393339333310#&&####"#>75!;]}Y6i,}u%c"w}+i0Z`)M[?S8kXsTTqH|r;uSVq$'~@E%&#"''!#)( !JY'!!!!$#&$$&JY$?+9?39/_^]33+3393333393333910#&&####"#667!#3!5!J~g,i,#g"u{NhB5ff%BVD7f'-i`^,')V^Z?#&r@=$%"!&& "('  HY& #"%##%HY#?+9?39/33+33933333933339102#&&####"#667!#3!5!dY3h*t{+b+|t)f6*ccv)NZ?S|5iXmKKkH>e%?'SVRhI@RG6<',$ '3870 f' c`kjjil`V{u? M@+JY?_o  KY  KY?+?+9/_^]+99333310! !  !"!_02Zr9 k^]m@. 1w9T M@+HY?O  FY  FY?+?+9/_^]+99333310#"&532267!"!&&9tƭ!Պ ) .@  LY?+??999333210"#367>32&1>;3^mfU$,Q@P_J0**h4{8y@ZT,@ HY ?2?+?99333210!3367>32&#"\fI%N}$EL;-D'?#Stm|6Xav s&vR "&+55!&v5 "&+55  0S@,0 ! !)210+ KY KY &+LY&?+?+?+?399933339310! ! 32#"%33663#"'5326677 8.f W g5RlN9F:C3M>)7mg\pOB@M#>5P#v8V/akw-T&R\ (P@+ !!& &*)JY$!& &KY ?+3333?33+339333910#"'$%6326326'#"'KI9IK6OO 6#OrJJA>EEtPNOL*&Pwb'P@+!%  )(FY#!% %FY ?+3333?33+339333910#"'&5476326326654&'#"'bJDLM}GJFC!HF(#LLHHBBB-2CY|@G 93OP0##P)7>3Y [ZYDDAOO O OO6KT7666& -&-KY & KY ?3+3?399+3_^]229/^]33/39333310%26732#"'6632#"&'##"32&&#"5654.54632%#"''&&#"#546323^JT_ض?_/+DsGoNLoItA+H\/fg$( .6 pCTC%8?Zif2`usL<=?:fD&N"^$c+55+qT#^$Sg8&D$FD1 :Khs4/w+=R@N3,HI' !',08IR TSR>>;HHM0//// /DMM@ HM   HY# FY*?3+3?3+399+_^]2^]q29/33/39333310%#"4632&#"32732654&#"'632#"56654.54632%#"'&&#"#546323 byWn{R!RKmjnnzNRR{hSԀgf9F$( .6 q~E#8?Zif2`us%9-V+CC+V-Tf77#%FD19:K hs4/B Cq@>&A3- &39 ED-606 @ H  6@=6=KY#60KY)0?3+3?3+322+239/9339393310#'##'##'5273324&#"'6632#"&'##"32&&#"{P 68 75 PZgfnSg?_/+DsGoNLoItA+H\/kVuuuuHPRiA"^$c+55+qT#^$ )l@;  ))( $%  %+*) @ H  $ )?3?3322+239993333333999910#'##'##'5#33663363#P 57 75 P%gyh'a"Qfє^euuuujAR&?jMZL /@  LY KY ?+?+?93310 !27## 4$32&?:E:g!=֩)o mTP\PwT+@  FY GY?+?+?9310%27##"32&#"{LGd+hH-1X/sdD@*       /99339910'%7%7%R)/+1P5-1'\-VJIN-JiJ @   /333993310463!6632#!#"&11%'((,7H&&((1#3)%1.$3+$$@  @ H /+23/3993102676632#54&#"##=zp9f6dkZ?8&I~q L-qj K:715@  /93104632&&6/ '$fg9F$D&8g5@  /93105654.54632ff~$( .6Sg8&D$F) (6DR_m@8 7D=>S_YZ(!" )6/0`mfgERKL "(06>DLRZ_gmon)"0@ H03,,%3mZSf@ HfjVcc\jE>7L@ HLO:HHAO3jOOj3 @ H  H /3+2/3+29///333+2333+2333+29333333333333333310&&#"#632&&#"#6632&&#"#6632!&&#"#6632&&#"#6632!&&#"#6632&&#"#632!&&#"#6632oL3=AK ]qOL3=AKdg\sL3>ALeg\s/L3>ALeg\s1L3>ALeg\s/L3>ALeg\sK3>AK \sE;>ALeg\s930    IY GY?   GY ?+?9/_^]q]+9/_^]3+3939310!!! #!#533!2654&#`=cp RӛRGxtla?]@2      LY  LY ?+?9/+9999999333910'###! 327'76654&##?pkyEeff ́XuFRP75!3'rLT'f@7% )(!  !FYHY?+?+??9999999993333910"'##33632''27'76!"scTpyF{ZyXFE{TJXb+51X"3{ / D@%  JY?   JY ?+?9/_^]3+3939910!!##53!!5If!E^Z^^5? H@)   HY  O _   HY ?+?9/_^]3+3939910!!!##53!5ncgVVG@'  LY JY JY ?+?+?9/_^]+933310!632#"'532!"#1sl%rl_f^1e8.$P ??@" FYHY FY ?+?+?9/+933310!632#"'532654&#"#!F]eηWpubVcy:dD#?L\@2     " JY?+??3?339393333333333103333####qLfL#^c3f<<:n1qd?\@2       " GY ?+??3?33939333333333310333####3wdy)nb5d+y?/1q''+RB&TDB7T&E@&      "JY?+???3993333310%3###373`bTff=^1qV?F@$      "GY?+???393393333331033###3{tb?ee?-1q'?C@$     ?3?3993333333310!###3733}VffV{c?E@&       ?3?399333333331033##'#3V{sVee<(T/B4?1O@,   JY ?3?39/3+3993933103533#73###1f=g}f^"VP@-     HY  ?3??9/3+399393310353!!33###c+xTwccLVb0%} '>@"     KY?+?3?99333310!##!5!73'}f>V`V)T? A@!      HY ?+?3?933933333103##!5!{ e?'VhL@)     JY     "JY?+???39/_^]+93333310%3##!#3!3vb{ffVg^1q1w?R@/    HY?O  " GY ?+???39/_^]+93333310!33##!#bwbwNc?#1q ?7 G@&   JY     KY ?+?3?9/_^]+9333310!#!#3!!7gffVV1wm? M@,   HY?O    HY?+?3?9/_^]+9333310!!!#!#bNc?#V ?K@)  LY   KYJY?+?+?39/_^]+9333310!#!#!632#"'532#"gfqnr}t_VV1e8-& ?C@$ FYGY FY?+?+?39/+9333310632#"'53265!"#!#!]QWrkd[Ibc'b:dD?+5m@;3 &,1&&763#.  ) JY @).KY)) ))KY KY?+?+9/_^]++999993339910327#"&'#"$5!2&# !267&5432#"6YkJ7*aa;dלF)OKo&_itksXD\=+(Si`i b0HwT 6m@ &,&&,487$ "/ )) FY)@ H)) 2HY @FY"FY?+?++9/++9999933399106654&#""'#"&&532&#"327&54632327OKN`IU}~rVvR@E<_N1jaX(>-,zA3~L+ 3[rEXB&&#wBT&Fu ' 4@  " KYJY?+?+3?93310%3##!5!!Lwc{%%^1qV``)h? 4@  " HY GY?+?+3?93310!3##!5!hwcv?u1qV9<? /@   ??3?339393310#33673b\f8)+f?jr9J@(    JY  ??39/3+3993339103!!#!5!53n;i=u C_m_;?@@"   HY?33+3??39393310!!!#!5!336733b5\f8)+fVjV?jruF@'      "JY?+???3993333310%3###33ec9PHqAsm;^1qVrF7?F@'     " GY?+???3993333310#333##mrDAmLmc9/6/1q {@@"  " KY  KY?+3?+3??933310%3#!!5!!!3ߜbC1Lf`/qV`` V)R?@@"    "  HY GY ?+3?+3??933310!!33#!!5!^wcb5u1qVH@%   KY "JY?+??39/+999333310%3###"&53!2673wb{gE`f^1q{g3#;d?H@%   FY " GY?+??39/+999333310326733###"&5b`cvbwdp?zFM1qMBxm@?  `p  KY ??39/+999/9/_^]]933339910!###"&53!336673fVgEVIf{H?3r$/?a@5   `p  FY ??39/+9/_^]999/933339910333673##5#"&5VccV#?z7tlx-@  KY ?3?9/+99333103$32#4&#"#fgFymf3fo7%?-@   FY  ?3?9/+9933310!4&#"#36632]bccdpmzDP#?MC=&`@6$#('##JY#?#_#o## ## KY KY?+?+9/_^]3+39333331047336$3 !!267# &&"!=dNR  +^rB-29B??B%`Cf^qJ*55T%Z@0#"  '&""HY "" ""HYFY?+?+9/_^]3+393333310"&&5473632!3267"!4&~vdͿ]l\{ vaA-28P+Z(ս=!(l@=&%*)%%JY%?%_%o%% %% " "KY KY?+3?+?9/_^]3+393333331047336$3 !!267##$&&"!=dNR  +^rcB-29B??B%`Ca4qJ*55T!(f@7%&! *) %%HY%% %%!""HY!!FY!?+3?+?9/_^]3+3933333310#&'&&5473632!3267#"!4&c~vdͿ]l\`evaA-28P+Z(սZ,=P&6^&+5L&6Z&+5K@'   KY JY?+??39/+33393333310!#3363 #"'532!"5ffՁJ6.BRrs[)L 1e8* ) ?H@%  HYFY?+??39/+3393333310!#33 #"'532654&#"cc{ "bz~[/gF\P?:d(=A@$JY"KY JY ?+?+??+9333310%3##! #"'5326!u{)\?EbKC2=4Was9^1qV};\??A@$ GY"FY FY ?+?+??+9333310%3##!#"'532!uvWm'#q$<^1quaZE@% JY  JY?+??39/_^]+9333310%!"&'532!#3!3LvHzffVg^3">/y-?G@' HY  FY?+??39/_^]+9333310!3#"'53265!#b~WalxNc?%6b=?Q@,     JY     "JY?+???39/_^]+933333310%3##!#3!3u{ffVg^1q1w?W@2    HY?O  " GY ?+???39/_^]+933333310!33##!#buwNc?!1q ?H@%   KY "JY?+??39/+999333310!##3#"&53!2673{bwgE`fg3#;?H@%  FY  " GY ?+??39/+99933331032673##3#"&5b`cwcwdp?zFMMBxO@*     " JY?+??3?3993333333310!##3333##47#Rbu{ F|1qTt|J?S@+    " GY ?+??3?393993333333310%733###&&'#3>9ts1X!Z:%j&1q?.f;5?aZ,D&$6R&+5b&D6%&+5&$jR &+55b&Dj 5&+55bLTD&(6R &+5w&H6&+5!=@   JY KY KY ?+?+9/+933310"5663 # 5!2!〹gIY5" :jId+ysl=bAwT=@     HY FYHY?+?+9/+9333102#"55!&&#"566267! v،YjZ`T P*Z'!&jR +&+55w&j -&+55=&jR "&+55L&jZ "&+55R&jR 6&+55D7&jr 7&+55RJ@'KYKY KY?+?+99/+9933310 !"'532654&##5!5!65r/Sm`V7``j?V@0 FY? HY FY?+?+99/_^]+9933310#"'532654&##5!5!?#|яZZ|{ הwDf+$عP=XI&MR&+55&M-&+5&jR  &+55&j &+55&2jR (&+55w9&Rj )&+55~w9T&~jR *&+55w9&j +&+55Fq&jR +&+55Dw&j +&+55 &M-R&+55&\M&+5 &jR (&+55&\j )&+55 s&SmR )&+55!&\S *&+55&jTR "&+55&j $&+55 /@   "JY JY ?+?+?93310!!3##!Eccf^1q5? /@   "HY GY ?+?+?93310!!3##bbc?Vu1q&jR (&+55&j '&+55/]@4 JY? JYJY JY "?+?+?+9/_^]3+39399310!!3#"'53255##53!!5Iw\Z9*-'c{!E^hs\|^^5?_@7HYO_HYGY GY "?+?+?+9/_^]3+3933310!!!3#"'53255##53!5nv\Z;'-'bwgVdhs\|VN@, JY JY"?+?+??3993333310%3#"'53255##33w\Z;'-'bNPHqAsm;^hs\|VrF7?N@,GY GY "?+?+??3993333310333#"'53255##rDAmLm\[;'-'b9m/6/hs\|NI@)    LY ?3?39/33+339333310!33!!##!+osmf/uPHq?wrZV7?O@.   IY/?_o ?3?39/]33+339333310!33!!##!{#rDAm)ysms`6!Ro :@  LY   LY?+?9/_^]+99333103!"&5463!!"3!g\'ٿ-JοZw Gq!"X@- ""$##LY # LY?2+3?9/_^]+9/993339310"&54$!33!2653#"'# 3265#!ftwg^yRLі˶w?+Q@)(#-, FY %%HY?3+3?+?9939/9339931023&5332653#"'##""!26554&Dp7czmbBmᲳgT^`~yG *Z2R/+]@2!") "-,!!&KY? , JY&KY&?+?+9/_^]+99/9393310#532654&#"'663232653#"&'&&ͪgp9p~ܜ vywf `~=OPRHħ%ҬP`T+S@+") "-, %HY, HY%HY%?+?+9/+99/9393310#532654&#"'6632323#"&&'&&px{%PXc`qi 7Z]btMVhc]jHR#+[{vrbp01GBo_R`"Y@1  $#KY?  " JY  JY ?+?+?9/_^]+993339103##4&##532654&#"'6!2ۚwb{ʹpk9` #1q`}@LPVT O@*   "! HY  " HY GY?+?+?9/+99333910 54&#"'6323##4&##5'~PO%zawcvjaf%#RN4n1q?mhV"C@#" "$#KY JYKY?+?+?+9/933310!#"'53266!323#"&5E$NRucB7=23D0FS.wzfVv\?qHWɧ)?C@#  FY HY FY?+?+?+9/933310!2653# !#"'532!obWo!s&qӏOfpbZ)I@'JY  JY ?+??399//_^]+9333310323#"&5!#3!3yfff-gu R1w`?O@-  HY?O   HY?+??399//_^]+9333310!332653#"&55!#bv|bmc?#6ϗOˏ?h:@KY LY LY?+?+9/+93310!! 4$32&&# !2!bRfU'P`( fXaT*$^#-"wT:@HY FY FY?+?+9/+93310!# 4$32&#"3 !ݍ ϣ #D'DXB 9@   KYJY?+?+39/933105!!323#"&5 !!}fV``)+)F?9@   HY HY ?+?+39/93310!!23# !5!^c51GlVs5&N@*#   ('$KY  JYJY?+?+9/_^]+99339104663 &#"33#"327! $54675&&r҄3ܦɴTl^oZk`VeOĒ ^TT D@&  "! JY KY JYJY"?+?+?+?+933310! #"'5326!3#"'53255#=)\?EbKC2=4Was9w\[8*-'b{V};\hs\|?C@%  GY FY  FYGY"?+/+?+?+933310!#"'532!3#"'53255#DWm'#q$:/("4T^deCYYD]qkQ "'%HH‡~]SS]}u"=@ " "@ H" "/?/3]9///+]33310".#"#66323273#&'#567)'G@:PI\N'E?:KL _eCYYD]=(/(ar'/'enO~]SS]} #@ @ H/2+99//]310"'3326736673#R]XX]P"32}%p+DWKKW*L]5y% #@   @ H /3+99//]310#&&'53"'332673D*r$}3&.5R]XX]P%{3^9?b''"8P^R]XX]P}k+Z #&?HJWKKWu ";@!  p    / ?  /2]9///3]33]3/10"'332673".#"#663232673R]XX]Pk'G@:PI\N'E?:-* L _WKKWZ(/(ar'/'F9en;BZ&@  ` p  //]3933104&'3#"'532GI[fV8+"0kHq?vWcT 1J^@  "/3?39931073#"'53255#w\[8*-'b^hs\|1J^@  "/3?39931073#"'53255#w\[8*-'b^hs\|?# @    ?3?9933310!#47'3#b  :V)G)ws (@  MY 'MY?+?+993310#"323 4&#"ķj11-3^ @    &?3?9933310!#47'3c 'Q5Rф%CH3s<@  MY'NY?+9?+9393310!!5>54&#"'632!~75{X+stHl|Fv*t(Q@+#  *)NY  &&MY&' MY %?+?+9/_^]+99333910!"'532654&##532654&#"'6632ߦT\ܞխmp1U{Sc,2`z=JCGS`^ <@ MY &$??39/3+3993333310%##!533!7#`^xd%}C*,/_:@ MYNY& MY%?+?+9/+933102#"&'532654&#"'!!6  mBl_‚<:-+(g7+˭''`#/_(@NY&$??+393310!5!ZV`I{sv(I@(% *)!OY p MY' OY%?+?+9/_^]9+933310#"'532##"&5432"326654&&hX+y  Inǐu#eg]|VeV`gcչZMus;&IIf\Z!2Q@*+..-2"*)&&' '*-43(.*"'0+$(?333]2222293333333310#"'53254&'&&54632&#"##33#7#5{>ch;qpUhzWP^EV;n^K"R}}V\qN!y;:('YONe!L!6/28)$4F`h^/ '&7z%yF&Wzw T)G@&' *+FY  $FY HY?+?+99??3+933331047##"32373#"'53265%2654&#"vuTݜ٠Ʃv6 -FkXȴ[ w !&K7&+5w &N*&+5w &OP2&+5w !&:}.&+55??91033fJ@s&C8R&+5>s&v6R &+5&s&KR&+5&jR &+55l&RR&+5&MR&+5!&NR&+5AB`&QC&OR &+59&- &VT?55&jR &+555&jR &+5555&fqR&+5B&gV2I6$$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs) $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q  q q q           ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q   q   q    q q  q  !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) -&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq7$&q&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq$q$ q$&$*$- $2$4$7q$9$:$<$$$$$$$$$$$$$$$$$$$$$$q$&q$6$8$:$G$$$$$q$ q$_$I$K$M$O$Q$S$U$W$Y$[$]$_$o$q$s$q%%%$%7%9%:%;%<%=%%%%%%%%%%%$%&%6%8%:%;%=%?%C%%%%%%% %X%%%!%#%%%'%)%+%-%/%1%3%o%q%s%&&&*&2&4&&&&&&&&&&&&&&&&&&&&G&_&I&K&M&O&Q&S&U&W&Y&[&]&_'''$'7'9':';'<'='''''''''''$'&'6'8':';'='?'C''''''' 'X'''!'#'%''')'+'-'/'1'3'o'q's'(-{)))"))$))))))))))C)) )X)))!)#)%)')))+)-)/)1)3.&.*.2.4....................G._.I.K.M.O.Q.S.U.W.Y.[.]._/\/ \/&/*/2/4/7/8/9/:/</////////////////////////$/&/*/,/./0/2/4/6/8/:/G/////\/ \/_/a/I/K/M/O/Q/S/U/W/Y/[/]/_/a/c/e/g/i/k/m/o/q/s/222$27292:2;2<2=22222222222$2&26282:2;2=2?2C2222222 2X222!2#2%2'2)2+2-2/21232o2q2s2333$3;3=3333333333;3=3?3C33 3X333!3#3%3'3)3+3-3/3133444$47494:4;4<4=44444444444$4&46484:4;4=4?4C4444444 4X444!4#4%4'4)4+4-4/41434o4q4s47777")7$q7&7*727477)7D\7Fq7Gq7Hq7Jq7P7Q7Rq7S7Tq7U7V7X7Y7Z7[7\7]7q7q7q7q7q7q77777777q7\7\7\7\7\7\7q7q7q7q7q7q7q7q7q7q7q777777q7\7q7\7q7\77q77q77q77q7q7q7q7q7q7q7q77q77q77q77q7777 77q77q77q77q7777!7$)7&)7+7-7/717375777<7>7@7Cq7D\7F\7G7Hq7J7777777 7W7Xq7Y\7_7`q7b7q7\7q7 \7!q7"\7#q7%q7&\7'q7(\7)q7*\7+q7,\7-q7.\7/q70\71q72\73q74\76q78q7:q7<@<C<D<F<G<H<J<< <W<X<Y<_<`<b<<<< <!<"<#<%<&<'<(<)<*<+<,<-<.</<0<1<2<3<4<6<8<:<<<@<B<D<I<J<K<L<M<N<O<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<^<_<`<b<d<f<h<j<l<n=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_>-DD DD EE EYEZE[E\E]EE7E<E>E@EEEE EpF)F )F)F )HH HYHZH[H\H]HH7H<H>H@HHHH HpI{I {I{I {KK KK NFNGNHNRNTNNNNNNNNNNNNNNNNNNNNNNNNNNNNHN`N6N8N:N<N@NBNDNJNLNNNRNTNVNXNZN\N^N`PP PP QQ QQ RR RYRZR[R\R]RR7R<R>R@RRRR RpSS SYSZS[S\S]SS7S<S>S@SSSS SpURU RUDUFUGUHUJURUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDUFUHURU RUYU`UU U"U&U(U*U,U.U0U2U4U6U8U:U<U@UBUDUJULUNURUTUVUXUZU\U^U`W)W )W)W )YRY RYYY")YRYY RY ZRZ RZZZ")ZRZZ RZ [F[G[H[R[T[[[[[[[[[[[[[[[[[[[[[[[[[[[[H[`[6[8[:[<[@[B[D[J[L[N[R[T[V[X[Z[\[^[`\R\ R\\\")\R\\ R\ ^-q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq-{&*24G_IKMOQSUWY[]_-{-{-{-{$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjln$;=;=?C X!#%')+-/13             YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p   YZ[\]7<>@ pR R")R R  YZ[\]7<>@ pR R")R R q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  &*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_$79:;<=$&68:;=?C X!#%')+-/13oqsR R "@E=K=N=O=`={R R$79:;<=$&68:;=?C X!#%')+-/13oqs-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p  &*24G_IKMOQSUWY[]_FGHRTH`68:<@BDJLNRTVXZ\^`FGHRTH`68:<@BDJLNRTVXZ\^`\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqsR R "@E=K=N=O=`=R R\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs  $79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs-{R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`$$$$")$$q$&$*$2$4$7)$D\$Fq$Gq$Hq$Jq$P$Q$Rq$S$Tq$U$V$X$Y$Z$[$\$]$q$q$q$q$q$q$$$$$$$$q$\$\$\$\$\$\$q$q$q$q$q$q$q$q$q$q$q$$$$$$q$\$q$\$q$\$$q$$q$$q$$q$q$q$q$q$q$q$q$$q$$q$$q$$q$$$$ $$q$$q$$q$$q$$$$!$$)$&)$+$-$/$1$3$5$7$<$>$@$Cq$D\$F\$G$Hq$J$$$$$$$ $W$Xq$Y\$_$`q$b$q$\$q$ \$!q$"\$#q$%q$&\$'q$(\$)q$*\$+q$,\$-q$.\$/q$0\$1q$2\$3q$4\$6q$8q$:q$&@&Cq&D\&F\&G&Hq&J&&&&&&& &W&Xq&Y\&_&`q&b&q&\&q& \&!q&"\&#q&%q&&\&'q&(\&)q&*\&+q&,\&-q&.\&/q&0\&1q&2\&3q&4\&6q&8q&:q&(@(Cq(D\(F\(G(Hq(J((((((( (W(Xq(Y\(_(`q(b(q(\(q( \(!q("\(#q(%q(&\('q((\()q(*\(+q(,\(-q(.\(/q(0\(1q(2\(3q(4\(6q(8q(:q(8@8C8D8F8G8H8J88 8W8X8Y8_8`8b8888 8!8"8#8%8&8'8(8)8*8+8,8-8.8/808182838486888:8<8@8B8D8I8J8K8L8M8N8O8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8b8d8f8h8j8l8n9R9 R999")9R99 R9 :::"):$:&:*:2:4:D:F:G:H:J:P:Q:R:S:T:U:V:X:]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::!:+:-:/:1:3:5:<:>:@:C:D:F:G:H:J:: :W:X:Y:_:`:b:::: :!:":#:%:&:':(:):*:+:,:-:.:/:0:1:2:3:4:6:8:::<:@:B:D:I:J:K:L:M:N:O:Q:R:S:T:U:V:W:X:Y:Z:[:\:]:^:_:`:b:d:f:h:j:l:n;&;*;2;4;;;;;;;;;;;;;;;;;;;;G;_;I;K;M;O;Q;S;U;W;Y;[;];_=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_?&?*?2?4????????????????????G?_?I?K?M?O?Q?S?U?W?Y?[?]?_CqC qC&C*C- C2C4C7qC9C:C<CCCCCCCCCCCCCCCCCCCCC$qC&qC6C8C:CGCCCCCqC qC_CICKCMCOCQCSCUCWCYC[C]C_CoCqCsCqDD DD E-{GGG$G7G9G:G;G<G=GGGGGGGGGGG$G&G6G8G:G;G=G?GCGGGGGGG GXGGG!G#G%G'G)G+G-G/G1G3GoGqGsGVqV qVfVmVqqVrVsVuVxVqV qVT[[[V[_[b[d[i[p[q[r[t[u[x[[[ [T\\\V\_\b\f\i\m\s\v\y\z\{\|\}\~\\\\\\\\\\\\\\\\\\\\ \!]q]r]x]T^^ ^^ _q_ q_f_m_qq_r_s_u_x_q_ q_T```V`_`b`i`t`` aaaaV\a_\ab\afai\amasavayqaza{a|a}a~qaaaaaaaaaqaaqaqaaqaaaaaqaaaaaaa a!aSbqb qbfbmbqqbrbsbubxbqb qbTdfdmdsfffVf_fbfdfifpfqfrftfufxfff fThfhmhshhiqi qifimiqqirisiuixiqi qiTmmmVm_mbmdmimpmqmrmtmumxmmm mToooVo_obodoiotooo qqqqV\q_\qb\qfqi\qmqsqvqyqqzq{q|q}q~qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq q!qSrrrVr_rbrfrirmrsrvryrzr{r|r}r~rrrrrrrrrrrrrrrrrrrr r!sssVs_sbsdsispsqsrstsxsss sTtftmtsttuuuVu_ubufuiumuu vqvrvxvTxxxVx_xbxfxixmxsxvxyxzx{x|x}x~xxxxxxxxxxxxxxxxxxxx x!y){{ {{ || |||| ~) y~     y~ y~         y~       n| q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqql~    n|   n|   n| l|~  qff jlrqs~ffqqq q  q q qqq qn|q qq  r|  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq)l|~    l|~   rsz|  rsv  l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqqqff jlrqs~ffqqq q  q  rsz l|~  ))  n|   n|  rsz|  rsz|   ) js      j  )j       js   s  j        m  m         js    m  m  j   sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R 7$&q7$&q7$&q$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q                        q  q  q                             ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q    q    q    q q  q   !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) & * 2 4 7q 8 9 : <                         $q &q * , . 0 2 4 6 8 : G f m qq r s u x  q  q   q  \ q        T _ a l |\ ~        q    q    q  \  \    \     \        q  I K M O Q S U W Y [ ] _ a c e g i k m o q s q!q!r!x!TSSSS TTTVT_TbTfTiTmTsTvTyTzT{T|T}T~TTTTTTTTTTTTTTTTTTTT T!XqX qX&X*X- X2X4X7qX9X:X<XXXXXXXXXXXXXXXXXXXXX$qX&qX6X8X:XGXXXXXqX qX_XIXKXMXOXQXSXUXWXYX[X]X_XoXqXsXqYY YY ZZZVZ_ZbZdZiZpZqZrZtZuZxZZZ ZT`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`RbIfbWfbYfbZfb[fb\fbfb%fb'fb7fbfbfb4fb5fb]fb^fbpfbfbfjj jj llllllllllllllllllllll lrlslzl|lllllllllllllllllllllllllllll llllllmmmmmmm msmmmnn nnnnnnnnn n|nnnnnnnnnnnnnnn nnnoo ooooooooo omooooooooooooooooooooooooooopppppplp~ppppppppppppppppp p ppprqr qrrrqrrrrrrrqr qrnr|rrrrrrrrqrrrrrrrrrrrrrrrrrrr qrrqrrrsqs qssssssssssssqs qsjsms}sssssssssssssssssssssssssssss s ssssstqt qtttqtttttttqt qtnt|ttttttttqttttttttttttttttttt qttqtttuqu quuuuuuuuuuuuqu qujumu}uuuuuuuuuuuuuuuuuuuuuuuuuuuuu u uuuuuv vx xzzzz zzzzz z|q|q||||||||q| q|r|s|||||| | ||||}} }}}}}}}}} }}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~ ~r~s~z~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~  qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  s s s rsz|    rsz|    rsz|  sl~  )    |   m rsv    )))))) jklqrsuwy}~)))))    ) js   f |   l{=}~j    )l{=}~j  l|~  j  l|~  j  l|~  j  )  )))))) jklqrsuwy}~)))))    ) js  \ \fH\ \|qqH HHq qq qmqq   l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )) jklqrsuwy}~))     s)) jklqrsuwy}~))     sl{=}~j  )  )    |         l|~  j   f m| )  )  )  q qqq qn|q qq  q qqq qn|q qq       rsz|    rsz|   l|~  j    )   rsz|    rsz|    rsz|    rsz|   qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )))))) jklqrsuwy}~)))))    ) js  l{=}~j  l|~  j          q             r v |       q                                                                           q             r v |       q                                      )   q rv|q    q rv|q    r    r|   )  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq     !q! q!&!*!- !2!4!7q!9!:!<!!!!!!!!!!!!!!!!!!!!!$q!&q!6!8!:!G!!!!!q! q!_!I!K!M!O!Q!S!U!W!Y![!]!_!o!q!s!q"" "" #q# q#&#*#- #2#4#7q#9#:#<#####################$q#&q#6#8#:#G#####q# q#_#I#K#M#O#Q#S#U#W#Y#[#]#_#o#q#s#q$$ $$ %q% q%&%*%- %2%4%7q%9%:%<%%%%%%%%%%%%%%%%%%%%%$q%&q%6%8%:%G%%%%%q% q%_%I%K%M%O%Q%S%U%W%Y%[%]%_%o%q%s%q&& && 'q' q'&'*'- '2'4'7q'9':'<'''''''''''''''''''''$q'&q'6'8':'G'''''q' q'_'I'K'M'O'Q'S'U'W'Y'[']'_'o'q's'q(( (( )q) q)&)*)- )2)4)7q)9):)<)))))))))))))))))))))$q)&q)6)8):)G)))))q) q)_)I)K)M)O)Q)S)U)W)Y)[)])_)o)q)s)q** ** +q+ q+&+*+- +2+4+7q+9+:+<+++++++++++++++++++++$q+&q+6+8+:+G+++++q+ q+_+I+K+M+O+Q+S+U+W+Y+[+]+_+o+q+s+q,, ,, -q- q-&-*-- -2-4-7q-9-:-<---------------------$q-&q-6-8-:-G-----q- q-_-I-K-M-O-Q-S-U-W-Y-[-]-_-o-q-s-q.. .. /q/ q/&/*/- /2/4/7q/9/:/</////////////////////$q/&q/6/8/:/G/////q/ q/_/I/K/M/O/Q/S/U/W/Y/[/]/_/o/q/s/q00 00 1q1 q1&1*1- 121417q191:1<111111111111111111111$q1&q16181:1G11111q1 q1_1I1K1M1O1Q1S1U1W1Y1[1]1_1o1q1s1q22 22 3q3 q3&3*3- 323437q393:3<333333333333333333333$q3&q36383:3G33333q3 q3_3I3K3M3O3Q3S3U3W3Y3[3]3_3o3q3s3q44 44 5-{66 6Y6Z6[6\6]6676<6>6@6666 6p7-{88 8Y8Z8[8\8]8878<8>8@8888 8p9-{:: :Y:Z:[:\:]::7:<:>:@:::: :p;-{<< <Y<Z<[<\<]<<7<<<><@<<<< <p=-{>> >Y>Z>[>\>]>>7><>>>@>>>> >p?-{@@ @Y@Z@[@\@]@@7@<@>@@@@@@ @pA-{BB BYBZB[B\B]BB7B<B>B@BBBB BpC-{DD DYDZD[D\D]DD7D<D>D@DDDD DpIII$I7I9I:I;I<I=IIIIIIIIIII$I&I6I8I:I;I=I?ICIIIIIII IXIII!I#I%I'I)I+I-I/I1I3IoIqIsIJJ JYJZJ[J\J]JJ7J<J>J@JJJJ JpKKK$K7K9K:K;K<K=KKKKKKKKKKK$K&K6K8K:K;K=K?KCKKKKKKK KXKKK!K#K%K'K)K+K-K/K1K3KoKqKsKLL LYLZL[L\L]LL7L<L>L@LLLL LpMMM$M7M9M:M;M<M=MMMMMMMMMMM$M&M6M8M:M;M=M?MCMMMMMMM MXMMM!M#M%M'M)M+M-M/M1M3MoMqMsMOOO$O7O9O:O;O<O=OOOOOOOOOOO$O&O6O8O:O;O=O?OCOOOOOOO OXOOO!O#O%O'O)O+O-O/O1O3OoOqOsOQQQ$Q7Q9Q:Q;Q<Q=QQQQQQQQQQQ$Q&Q6Q8Q:Q;Q=Q?QCQQQQQQQ QXQQQ!Q#Q%Q'Q)Q+Q-Q/Q1Q3QoQqQsQSSS$S7S9S:S;S<S=SSSSSSSSSSS$S&S6S8S:S;S=S?SCSSSSSSS SXSSS!S#S%S'S)S+S-S/S1S3SoSqSsSUUU$U7U9U:U;U<U=UUUUUUUUUUU$U&U6U8U:U;U=U?UCUUUUUUU UXUUU!U#U%U'U)U+U-U/U1U3UoUqUsUXIRXWRXYfXZfX[fX\fXfX%RX'RX7fXfXfX4RX5RX]RX^RXpfXRXRZIRZWRZYfZZfZ[fZ\fZfZ%RZ'RZ7fZfZfZ4RZ5RZ]RZ^RZpfZRZR\IR\WR\Yf\Zf\[f\\f\f\%R\'R\7f\f\f\4R\5R\]R\^R\pf\R\R^IR^WR^Yf^Zf^[f^\f^f^%R^'R^7f^f^f^4R^5R^]R^^R^pf^R^R`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`Raaa$aaaaaaaaaaCaa aXaaa!a#a%a'a)a+a-a/a1a3fIffWffYffZff[ff\ffff%ff'ff7ffffff4ff5ff]ff^ffpfffffhIfhWfhYfhZfh[fh\fhfh%fh'fh7fhfhfh4fh5fh]fh^fhpfhfhfjIfjWfjYfjZfj[fj\fjfj%fj'fj7fjfjfj4fj5fj]fj^fjpfjfjflIflWflYflZfl[fl\flfl%fl'fl7flflfl4fl5fl]fl^flpflflfnIfnWfnYfnZfn[fn\fnfn%fn'fn7fnfnfn4fn5fn]fn^fnpfnfnfooo")o$o&o*o2o4oDoFoGoHoJoPoQoRoSoToUoVoXo]oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooo!o+o-o/o1o3o5o<o>o@oCoDoFoGoHoJoo oWoXoYo_o`oboooo o!o"o#o%o&o'o(o)o*o+o,o-o.o/o0o1o2o3o4o6o8o:o<o@oBoDoIoJoKoLoMoNoOoQoRoSoToUoVoWoXoYoZo[o\o]o^o_o`obodofohojolonpRp Rppp")pRpp Rp qqq")q$q&q*q2q4qDqFqGqHqJqPqQqRqSqTqUqVqXq]qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqq!q+q-q/q1q3q5q<q>q@qCqDqFqGqHqJqq qWqXqYq_q`qbqqqq q!q"q#q%q&q'q(q)q*q+q,q-q.q/q0q1q2q3q4q6q8q:q<q@qBqDqIqJqKqLqMqNqOqQqRqSqTqUqVqWqXqYqZq[q\q]q^q_q`qbqdqfqhqjqlqnrRr Rrrr")rRrr Rr sss")s$s&s*s2s4sDsFsGsHsJsPsQsRsSsTsUsVsXs]ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss!s+s-s/s1s3s5s<s>s@sCsDsFsGsHsJss sWsXsYs_s`sbssss s!s"s#s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s6s8s:s<s@sBsDsIsJsKsLsMsNsOsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sbsdsfshsjslsntRt Rttt")tRtt Rt { {{ {")$q&*247)D\FqGqHqJqPQRqSTqUVXYZ[\]qqqqqqq\\\\\\qqqqqqqqqqqq\q\q\qqqqqqqqqqqqqqq qqqq!$)&)+-/1357<>@CqD\F\GHqJ WXqY\_`qbq\q \!q"\#q%q&\'q(\)q*\+q,\-q.\/q0\1q2\3q4\6q8q:q?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.notdefnullnonmarkingreturnspaceexclamquotedbl numbersigndollarpercent ampersand quotesingle parenleft parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon semicolonlessequalgreaterquestionatABCDEFGHI.altJKLMNOPQRSTUVWXYZ bracketleft backslash bracketright asciicircum underscoregraveabcdefghijklmnopqrstuvwxyz braceleftbar braceright asciitildenonbreakingspace exclamdowncentsterlingcurrencyyen brokenbarsectiondieresis copyright ordfeminine guillemotleft logicalnotuni00AD registered overscoredegree plusminus twosuperior threesuperioracutemu paragraphperiodcenteredcedilla onesuperior ordmasculineguillemotright onequarteronehalf threequarters questiondownAgraveAacute AcircumflexAtilde AdieresisAringAECcedillaEgraveEacute Ecircumflex Edieresis Igrave.alt Iacute.altIcircumflex.alt Idieresis.altEthNtildeOgraveOacute OcircumflexOtilde OdieresismultiplyOslashUgraveUacute Ucircumflex UdieresisYacuteThorn germandblsagraveaacute acircumflexatilde adieresisaringaeccedillaegraveeacute ecircumflex edieresisigraveiacute icircumflex idieresisethntildeograveoacute ocircumflexotilde odieresisdivideoslashugraveuacute ucircumflex udieresisyacutethorn ydieresisAmacronamacronAbreveabreveAogonekaogonekCacutecacute Ccircumflex ccircumflexCdotcdotCcaronccaronDcarondcaronDcroatdcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGbrevegbreveGdotgdot Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbar Itilde.altitilde Imacron.altimacron Ibreve.altibreve Iogonek.altiogonekIdotaccent.altdotlessiIJ.altij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotLslashlslashNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautOEoeRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexScedillascedillaScaronscaron Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflex YdieresisZacutezacute Zdotaccent zdotaccentZcaronzcaronlongsflorin Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccent circumflexcaronmacronbreve dotaccentringogonektilde hungarumlauttonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos.alt Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIota.altKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9Iotadieresis.altUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronpirhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonos afii10023 afii10051 afii10052 afii10053 afii10054 afii10055.alt afii10056.alt afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109 afii10110 afii10193 afii10050 afii10098WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveendashemdash afii00208 underscoredbl quoteleft quoterightquotesinglbase quotereversed quotedblleft quotedblright quotedblbasedagger daggerdblbulletellipsis perthousandminutesecond guilsinglleftguilsinglright exclamdblfraction nsuperiorfranc afii08941pesetaEuro afii61248 afii61289 afii61352 trademarkOmega estimated oneeighth threeeighths fiveeighths seveneighths partialdiffDeltaproduct summationminusradicalinfinityintegral approxequalnotequal lessequal greaterequallozengeuniFB01uniFB02 cyrillicbrevedotlessjcaroncommaaccent commaaccentcommaaccentrotate zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni1F4Duni02F3 dasiaoxiauniFB03uniFB04OhornohornUhornuhornuni0300uni0301uni0303hookdotbelowuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BF uni04C0.altuni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CE uni04CF.altuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7 uni1EC8.altuni1EC9 uni1ECA.altuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABuni030Fcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCcyrillicbighookLCone.pnumzero.osone.ostwo.osthree.osfour.osfive.ossix.osseven.oseight.osnine.osffuni2120Tcedillatcedillag.altgcircumflex.alt gbreve.altgdot.altgcommaaccent.altIIgraveIacute Icircumflex IdieresisItildeImacronIbreveIogonek IdotaccentIJ IotatonosIota Iotadieresis afii10055 afii10056uni04C0uni04CFuni1EC8uni1ECA   46latnMOL ROM  nlatnMOL (ROM B      ligaligaligalnumlnumlnumloclloclonumonumonumpnumpnumpnumsalt saltsaltss01"ss01*ss012ss02:ss02@ss02Fss03Lss03Rss03Xtnum^tnumftnumn    &.6>FNV^Pz2HJJ.,ZgwEG      !$%IJ6 "(^IO]ILI5O4LI^V0R *H C0?1 0 +0a +7S0Q0, +7<<<Obsolete>>>0!0 +ϗmR]0z0b8%a&Z0  *H 0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0 070615000000Z 120614235959Z0\1 0 UUS10U VeriSign, Inc.1402U+VeriSign Time Stamping Services Signer - G200  *H 0ĵR`)J[/Kk5TX56^bMRQ4q{f*j 7٘tvJcEG.k NK+XJ,XB-uލǎlLgrIž`<cxi{-004+(0&0$+0http://ocsp.verisign.com0 U003U,0*0(&$"http://crl.verisign.com/tss-ca.crl0U% 0 +0U0U0010 UTSA1-20  *H PK$ $- 7 ,Za񑑳V@뒾89u6t:O7ʕBǠWdB5N3M'L8MxSݤ^ ⥾`߭(ǥKd[98"3/!?DA e$HDT\y>]r},CS}=*:Om ]^SWp`+nx'4[^I2300-GߍRFCmH 10  *H 01 0 UZA10U Western Cape10U Durbanville10 U Thawte10U Thawte Certification10UThawte Timestamping CA0 031204000000Z 131203235959Z0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0"0  *H 0 ʲ }uNgadڻ30X~k6xw~o< hlʽR-H=]_/kLR`@~ ?Ǵ߇_zj1.G 1s W-x43h/Š*Ë!fXWou<&]'x1"ijGC_^|}bM "Vͮv M٠h;004+(0&0$+0http://ocsp.verisign.com0U00AU:0806420http://crl.verisign.com/ThawteTimestampingCA.crl0U% 0 +0U0$U0010U TSA2048-1-530  *H JkXD1y+LͰXn)^ʓR G'/8ɓN"b?7!Op18UN$ҩ'NzaA*^ݻ+>W~ +;R8'?J00eeR&.Y)"\0  *H 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 090521000000Z 190520235959Z01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0"0  *H 0 g`IoV|f^ q-!ќPL"5; .Z|=;%X{ ξ'tag'MjaXy'M4+G Df$fO8TrfujIh8y 0,`Hת809:|@T/ܨR>+!\ P4.M^%Ԍn|)]1ZՌgX5+!`x^{`W ]A cT`C!00U00pU i0g0e `HE0V0(+https://www.verisign.com/cps0*+0https://www.verisign.com/rpa0U0m+ a0_][0Y0W0U image/gif0!00+kπjH,{.0%#http://logo.verisign.com/vslogo.gif0U%0++04+(0&0$+0http://ocsp.verisign.com01U*0(0&$" http://crl.verisign.com/pca3.crl0)U"0 010UClass3CA2048-1-550Uk&pȡ?-50  *H ݔAaix0Ɛ<~B$s/DrPU nQj71ܥ-OM2NgUejzd8xEv1z`³]fvYI8VAwX00fgymPSo0  *H 01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0 100729000000Z 120808235959Z01 0 UUS10U Massachusetts10 UWoburn10U Monotype Imaging Inc.1>0<U 5Digital ID Class 3 - Microsoft Software Validation v210U Type Operations10UMonotype Imaging Inc.00  *H 0Di|U 25L3^ L*8ט@I "SOCʋVnH9c;$5}rGWyˊJ@p-5cįפ {uePd"}KXEMYLM00 U00U0DU=0;09753http://csc3-2009-2-crl.verisign.com/CSC3-2009-2.crl0DU =0;09 `HE0*0(+https://www.verisign.com/rpa0U% 0 +0u+i0g0$+0http://ocsp.verisign.com0?+03http://csc3-2009-2-aia.verisign.com/CSC3-2009-2.cer0U#0k&pȡ?-50 `HB0 +700  *H N"gA~™cjrb<8=_G_[KI  VD 5< D`E*oL;4gpZ9\Zl5|eKmIp=b۴A~}n"w6MZ S1+(RzkwD ]%,͊0>KyʦN $ 񺐶\<'MDBkC.$.=ƫНݿD%J-+@0{ *H  1l0h0g0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA8%a&Z0 +]0 *H  1  *H 0 *H  1 110505165510Z0# *H  1ϗ~fQig}0  *H ],X:l`ήZ4[͌ۡTy?11'%', to6L葬H"!}_FdB^3:M   & 0 2 9 < D p t  !!!! !"!&!.!["""""""+"H"`"d%aIvhcb]gD Xz}} Bvt n%"iOS0L\pr`<&'()*+,-./0123456789:;<=>?@AIJ$%TUVWXY\]^_`abcdefhijklmnopqrstuvhijkFopqrstu45]^@G[ZYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! , `E% Fa#E#aH-, EhD-,E#F` a F`&#HH-,E#F#a ` &a a&#HH-,E#F`@a f`&#HH-,E#F#a@` &a@a&#HH-, <<-, E# D# ZQX# D#Y QX# MD#Y &QX# D#Y!!-, EhD ` EFvhE`D-, C#Ce -, C#C -,(#p(>(#p(E: -, E%EadPQXED!!Y-,I#D-, EC`D-,CCe -, i@a ,b`+ d#da\XaY-,E+)#D)z-,Ee,#DE+#D-,KRXED!!Y-,KQXED!!Y-,%# `#-,%# a#-,%-,CRX!!!!!F#F`F# F`ab# # pE` PXaFY`h:Y-, E%FRKQ[X%F ha%%?#!8!Y-, E%FPX%F ha%%?#!8!Y-,CC -,!! d#d@b-,!QX d#d b@/+Y`-,!QX d#dUb/+Y`-, d#d@b`#!-,KSX%Id#Ei@ab aj#D#!# 9/Y-,KSX %Idi &%Id#ab aj#D&#D#D& 9# 9//Y-,E#E`#E`#E`#vhb -,H+-, ETX@D E@aD!!Y-,E0/E#Ea``iD-,KQX/#p#B!!Y-,KQX %EiSXD!!Y!!Y-,EC`c`iD-,/ED-,E# E`D-,E#E`D-,K#QX34 34YDD-,CX&EXdf`d `f X!@YaY#XeY)#D#)!!!!!Y-,CTXKS#KQZX8!!Y!!!!Y-,CX%Ed `f X!@Ya#XeY)#D%% XY%% F%#B<%%%% F%`#B< XY%%)) EeD%%)%% XY%%CH%%%%`CH!Y!!!!!!!-,% F%#B%%EH!!!!-,% %%CH!!!-,E# E P X#e#Y#h @PX!@Y#XeY`D-,KS#KQZX E`D!!Y-,KTX E`D!!Y-,KS#KQZX8!!Y-,!KTX8!!Y-,CTXF+!!!!Y-,CTXG+!!!Y-,CTXH+!!!!Y-,CTXI+!!!Y-, #KSKQZX#8!!Y-,%ISX @8!Y-,F#F`#Fa#  Fab@@pE`h:-, #Id#SX<!Y-,KRX}zY-,KKTB-,B#Q@SZX TXC`BY$QX @TXC`B$TX C`BKKRXC`BY@TXC`BY@cTXC`BY@cTXC`BY&QX@cTX@C`BY@cTXC`BYYYYYYCTX@ @@ @  CTX@   CRX@ @@ @Y@U@cUZX  YYYBBBBB-,Eh#KQX# E d@PX|Yh`YD-,%%#>#> #eB #B#?#? #eB#B-,CPCT[X!# Y-,Y+-,-@ TNdSF<RFdPF3OF!H U UHU?MJLIKFr&4U%3$UJF?IF<3UU3U?HFrGFk3U3UU3UOU3UoTS++KRK P[%S@QZUZ[XYBK2SX YKdSXBYss++^stu++++++st+++++++++++++st++++++++^Nu?JVZQ^RX^RLV\TdJEb%0SA`%k:$BM6[  D ^ / |  ' X {  0 M a ~  ` %k3U"Y*Z;yUg\ Xv I )Nr m~ ,=N_q#4EVh +=N&6GX ->O`r  + < w !!!&!r!!!!!!!!!"" "1"B"S"c"t"""#####3#D#U#a#m#~########$$$0$w$$$$%%!%2%>%I%Z%k%w%%%%%%%& &&!&2&B&N&Z&&&&&&&'''b''''''((h((() ))')8)I)Y)j){))))))))*!*u********+ ++*+6+G+W+h+x+++++++,&,q,--"-3-D-T-_-j----..2.T...///!/3/E/W/h/z/////////060>0F0j0r0z0000111!1v1~122'292I2Y2i2z223Q3|34)4t455(50555666[667!7X778+8s8888999*9x999999:L::::;;";^;f;n;;;<=>J>>??W???@K@@@AoAAABB@BzBBBBBBBC+C3C~CD DtDE EKEEF7FHFFFGG GG'GGGGH HPHqHHHHHHHIII/IEIMIZItIIIIJJ@JpJJJKKKKKKKL"L^LM2MMNENNNO&O=OTOkOOOPPDPVPvPPQaQQQRR#R/RSRxRRRRS6SvSSTBTTTTTTTTTTTTTTUUV VVVW&W7WHWTW`WmWWWWX>XXYYY'Y0YVYmY~YYYZZYZZ[T[[\\e\]]Z]^#^_]_e_m_``K`}````a0aboc$cddHddde e-ePf$ffgKggh=hhiiJiijPj\jhjjk kPkkl l:lnllmmQmn$nnnnoNoVo}oop"pWppq&qlqrrGrrsIst#t+twT2,B2+Cy=8AH5E ?3210#!#ǒ=Pȑ=ORJ3@  ?3?39/333339/3333310!7!3!3!!!!#!#!7!!!w7ZmVv/ZXkxP::PrO==O!!(/>@"%,(/  MY" ))MY  //99//3+33+3910#7&&'53.546773&'6654&'ݻ5R3O:AHnnV/ӧ)P)#nm|a2y`m1Jdӗ  ^"'5LcC?N= x'/kko%N>}f)  SY/3+310!5!3!!#3oeoedldp/107#67"PJO|\h\R-P GY/+107!RZZR QY?+1074632#"R2,B2*D78AH5E; ??10#;n/J3@ KY KY?+?+10#"&463 "3264&3R؆YׅTׄ}zwhXPbR  ??310!#67'3i7*C4Z\$2N'-@ KYLY?+?+910!!7>54&#"'632!ƬQ6֭WhǮ]pIn7(-@LY && KY& KY ?+?+9/+910#"&'532654&##732654&#"'6632Դu`Aղun}1Trb) eV`rzKCKD !@KY ??9/3+3310!#!73!!7#/P`PPqv OP.B?uss`q{[KX3/@MYLY KY?+?+9/+33102!"&'532654&#"'!!6FTA񪌅nBpbo̱(kZnj)1`V(-@ !KY KYKY?+?+9/+910$32&#"36632#"&26654&#"I{;VTIDsxޒup[Qp, Z^bɶu~?owr@ LY?+3?103!7!ZV`nbB$0#@+ KY %KY?+?+9102#"&5467&&54632654&"6654&᣾ɂxtיdX2ڿ|StͪLNttiNHdIhy[J>|ms#&-@ LYKY MY?+?+9/+910#"'53 ##"&546632%"32>54&#rHWiڙ㢺wޒpZ}Sm,Zҳu~AnvufV @ QY QY?+?+104632#"4632#"3+B2*D3,A3)D9@H7D8AH7CV@  QY ?+/10%#674632#"#IIO|Z3+B2*D`[\9@H7D /33105n!Jgq/@ SYSY/++105!5!yuddXbb= /33105!mq^g)Jbs%)@$$QY$  PY?+3?+9/9107667>54&#"'66324632#"jhvr;s'UeU_32,B1+DjIT{Kl|eV1:w=__`8AG6E}H9FA@!A6:FY.6 A FYAA.6.)GY.6"GY6?+/+9/3+39/+910#"&5##"&546632326654&&#"!27#"$5$!2"3267&pqbq6Zp~zT'EBVW6˨XqfQIe-NBZߥnYaf4ŌQGQyRZR9?vՄ\e!@ IY?3?9/+310!#3#&'%u6CiQ'EDd#?f!-@IYIYIY?+?+9/+910!2#!!2654&#!!2654&#{ɴ}7֜Vٴz+w{u@ IY IY ?+?+10"327#"$32&&˵όhޱ-7mp3^1"  DZ"f @ IYIY?+?+10#!! 2$5!#61!Q$o_˽jfs &@ IYIY IY?+?+9/+10!!!!!!!=)6uNs^^f` @ IYIY?+?9/+103#!!!!g6:^_=&@IY IY IY?+?+9/+10!# $32&&#"327!Xeq^&nXʲԛuVI$ &(^. |/f\ @ IY ?3?39/+10!#!#3!3'dg6fd1w @ JY JY?+3?+310!!77'7!\  ?  AA   IY"?+?10"&'732730P 9P15i#\-f @   ?3?3910!##373og6fE-yZfNIY?+?1033!f6fm`mw@   ?33?3310%3#7####3ݖeO3:`5JqNDffb ?33?3310!###33673-V2_6P 3^n{ @ IY IY?+?+10#"$32%"32$54&{Dҩ;*vfy @ IY IY?+?9/+10!##!23265!#yɁg6;N {#@IYIY?+?+9910#"$32%"32$54&{ JDҩl-L*vfy (@ IY IY?+?39/+9910#! #%3265!#Pg6/ϲoy8y\ % ) @ # JY IY?+?+9910#"&'532654.'&&546632&&#"XW"GoLwvԃcW BObw;~d")m\=WFB*Lvvc#+^(.gBOf|@ IY?+3?10!#!7!!f!PHX^^s@  IY?+?310# 473!267s:HgV./Svp}Y_  ??3310%673#33I54&&#"/;PR-TΆaYJ4fL|ȀdPvf|WO}IL"'@ GYFY?+?+??9910"&'##33663 "32654&q7PG_]}c[Ff|Ȁbvk{ {ODfP@  FYGY?+?+10"&54632&#"3267ݮɓkkovGyGtQ+Z/ޯ!\9f'@ FY GY ?+?+??99102363### 462>54&#"1 cR-[YH{k|ȀPB]vb}T~f}P &@FYFYGY?+?+9/+10"&54632!#327"3 4&խŽr!21WĵLzi,6I^ECWq'@FY HY GY?+?3+3?+10"'53267#?6632&#"3#065/X\##I]W<`s#!ZjCPk}QZLT*7EH@(*GY*55HY!  ( ;FY5 5 ((BFY(.FY?+?+99//+9+3?+10#"'#"&54%&547&&54663232654&''326654&#"L#mx?PX?RyZ5NGOkpEN+}ujXIpe]J?O p:m` !P))/ p\b*Q{O$XojebU[ -3ptJ\hsVL @ FY ?3??+910!654&#"#336632W[pŇ$fbL`V,Ny|\@PZ#eOq}vFp^L ??2103#34632#"&b`5,&9,#?7BH9B' @  GY?+?210"'5326734632#"&>3/BR] `#,&9,#\g~ B7BH9B'L @    ?3??9103##3a}&)jP`J`Fb+/L ??103#3^N^H^P+%@ ! 'FY?3+3?33?9910!654#"#33663236632#654&#"Ǔj#dbP!PojrMvudVL0m}%%?qr{s7\Nx8MUL P@ FY  ?3??+910!654&#"#33632W[pŇ$fbR%\@PZ#?xFp^bT @ FYFY?+?+102#"&546"!2654&ŏ|vuTٿ̿NVۤ-T!&@ GY FY?+???+9910"'##336632"32651 cPR-[|\WH{k|~H+ uP}?'b+3P"'@ FYGY?+?+??99102373### 462>54&#"m7P_b@]}b\Eg|Ȁ[Ptmvd}IHDR@   GY?+??9102&#"#33>E6/B^ dbPIdqR]?^S.1P& @ FY FY?+?+9910#"'532654&&'&&54632&#"αJEEbhšK9#t"WLr_-'Kk.2sj*@;8P^#X@jU7BG)?Q\q?'@@HY FY ?+?+3310!327#"&547#?3~DTeEcla77?QcAVmhI_Cm+?@  FY?+??3910326673#7##"&547}_[nÅ!ibP샇?Fj4JW|w76675&&547654&Lu7cd}X `T5JylKE6 $HPf`)J_ MSNamvuV&TOR~iA7L=(,2Vh3=@ RYRY/+/+3310"56323267#"'&&^1v8l}=lf~]6k@ozu>e=;^n,::C`qHP @ " QY ?+?9/103##"54632>w2,B2+C}8AH7D(@ MY KY   ??99//+33+10#7&&546773&#"327#B]-$Z&teknwvץ:'Z/ޱ<\:-@ MY KYLY?+?+9/3+3102'&#"!!!!7667#7366o'6l{Ih92V]#9L)NT2RY^T R^3u(D@$   RY&RY/++9////////221047'76327'#"''7&732654&&#"J?i}vi=NN=hw~f=JXuuIKrvk@NN>jy\>LP>btsKN@@#MY/  MY  ??39/3+3_^]+333103!!!!#!7!7!7!3H u '=;i@+)d1LT!TL7B@ ??99//103#3#Bdddd f/<'@*07! FY !'FY!?+?+910467&&546632&#"#"'532654&'&&6654&Ӌ@O\t~~|\p]1z`v/JU|q\w1qgvs e1mBJyD:P6]M;[=4K_?x@VL5c'ib>X4AbW9OC01\Hl  /32104632#"%4632#"D)$6*"7)$6*"7V1:@0:?1:@0:s%5?@& GYGY     "2GY"*GY"?+?+99//_^]]++10"327#"&54632&4$32#"$732$54$#"Urhiܻwl$c^^]0.ѳΫD+X-4S-^ZƲѲ30+&@  TY TY?+?2+99102373#7##"&54267654&#"7U#BH`P^BH9^:9gv}qlm3H:Uߠ={L $@    //333310779@:?1'm1'}SY/+10#!5d dM(Pu%5R@. HYFY  "2GY"*GY"?+?+99//_^]]3+9/+91032654#####324$32#"$732$54$#"p]fnOFxӨeӏZ^\0.ѳΫ]YPz whp|^YͲѲ30\u IY/+10!7!s5a; @ RY RY?+3/+104632#"&732654&#"{zyzI[\[ZxxzzYYZm @  SY SY /+/+3310!5!3!!#5!oeoeoubjbpddRJ@ NYNY ?+3?+10!76654&#"'632!\)[MC_c)lIh5v|JPvQ;LL>Z6Z7jfm9'-@NY %% NY% NY !?+?+9/+910#"&'532654##732654&#"'632ajBON[;).|?cxTVfKDdc(mdvU~hHMFZ(iZOcPDED@VqD!  /106673#DB-3VC3JB6H? @  FY?+???399107326673#7##"&'##3aWnƒ$hcNUl!?aReRZA9+F`!@@IY?+9/9310####"&563!de@QF3qo3}R /29/310#"'53254'73ŗ. *ƗnPN^mOsa JP   ?2?9/103#>7'PTv "4u'9;=9)I;' @ TYTY?++102#"&5466"326654&ixPernSVFl7#"54632fnvr;w&UfUa13,A2*DQT{Kj}dV19q=`^_/8AH8Cs&$C1R&+5=s&$vXR&+5s&$K1R&+5V&$RPR&+5&$j+R !&+55&$P@?]]q554@ IYIY IY  IY?+3?99//+++310!!!#!!!!!!#{)nDsuNr X ^^&&z+fss&(C}R &+5fss&(vJR&+5fss&(KNR&+5fs&(jBR &+55s&,CER &+5>s&,vYR&+5s&,K8R&+5&,j6R &+55Z -@IY IY IY?+?+9/3+310#!#73! 2$5!#!!1!Q$΁z}o_`˽j`fb&1RR&+5{s&2CR&+5{s&2vR%&+5{s&2KR#&+5{&2RR&&+5{&2jR .&+55Dd   /3/399107''FJMDLDDLEICCIC",.@!&' ) IY)IY?+?+9910#"''7&5$327"&4&'32${hׅBqEۅF-7ܝ\+#:k#kp@y53nwƢi4qU*dss&8CR&+5ss&8vR&+5ss&8KR&+5s&8jR &&+55s&<vR&+5f? @ IY IY ??99//++10!##3323 65!#?Gg6f9D</@3,& 6FY #GYGY?+?+?+910"'53267!2#"'532654&'&&546676654&#"I.5>OX1PEYzkED;`Tմ[->?NRJ*Obe=n_ !Zege{qKSLa:3K&?_Am$.|Kl6:iE9\UGF\7FPf7!&DC+#&+5f7!&Dv+&+5f7#&DK)&+5f7&DR,&+5f7&Dj 4&+55f7h&DP %&+55fP,<FD@% @!FY@@ =66FY&- -GY ?3+3?3+3??9/+910"&'#7##"&54632373632!#3267%2>54&#""3 654&{'M) ^qx|jx ;B#p~'EBPC}W(b\{qUw;0Mxieqd{o3-*^% ZT=v̺GSfP&Fzyf}!&HC"&+5f!&Hv*&+5f!&HK(&+5f&Hj 3&+55L!&C&+5L!&v &+5L!&K &+5L&j &+55fL#.8@ (GY GY?+?39/+9/9910&'7%!"&5463234''26654&&#"6h; b3 'WY~k(VH'=vkF[|`T54&#"4Kl+c+R-[YH{k|ȀP*YTTvb}T~fs&(MmR&+5f5&HM$&+5fs&(NPR&+5f&HN$&+5fs&(O5&+5f}&HO)&+5fbs&(QLf}P&HQ!fss&(LDR&+5f!&HL-&+5=s&*KR%&+5L!&JKM&+5=&*NR!&+5L&JNI&+5=!&*OR&&+5L&JON&+5;=&*9!L!&J:9J&+5f\s&+KR&+5L &KK)#&+5f1@ IY IY    ?3?399//+33+33103##!##733!3!!dglN[&,RUR&+5B&R&+5&,MYR&+5L5&M&+5&,N(R&+5L&N&+5b&,Qb&LQ!&,OR&+5L? ??103#3b`?:&,-FI&LMs&-KR&+5q!&7K&+5f;&.9}L;&N9-L? @    ?3?39103##3a}&)jP``AFb+/?fNs&/v[R&+5L4&OvO &+5f;N&/9w;&O9f&/8 ?5LS&O8??5fN&/OfxEF&OOu'N %@  IY?+?99//9103'73%!dq'Ǯf+gm PNw5 L` = @  ??99//9107#'73^)^%^DhH)cHfbs&1vR&+5L;!&QvV"&+5f;b&19L; P&Q9Vfbs&1LR&+5L !&QL%&+5&Q}?5fb%@   IY"?+??3399//10"&'73267##33673%\ :Oq}#2_6P 3^)\n\ĶL P"#@FYGY?+?+??910"'53267654&#"#33632A//AR[W[pŇ$fbR%#\fb\@PZ#?xFp{&2MR&+5b5&RM&+5{&2NR&+5b&RN&+5{s&2S'R /&+55bg!&RS .&+55/"4@ IYIYIY  IY IY?+?+??9/+++10!!#"$32!!!!!27&#"fi*LׂnuNrD0nO+^^  zbT#09;@ 4FY44 1$ $FY **FY?3+3?3+39/+9910"&'#"&546326632!#327"!2654&"3 4& A䏸Fr |vu21Y̿Nzi&;iEu%+vY]j' !<A<6GA<8EB-:WC?fU5Zpic#7s1@9DD9;BBX3JG6f7&D&PvL-@#BB/B?B_BoBBBB B%%%%%%/]55/]5s&vR&+5f!&vP&+5s&vR6&+5-1!&v1&+5%; &69;1P&V9! /3210#&'#566731F[776D&@c+<9s#8:@:! /321036673#&&'1HZ775D*?_*!=9s#7>J95/10!!5X /3210#"&55733267xitEHVUgxre\DF=MF  /104632#"F+'9-#;V8AH:A1h @  / ?  /3]210#"&546324&#"326sX]nwZXmNC6 #&+555$f%f`IY?+?103#!!g6^(fs(=f\+{&@IYIYIY?+?+9/+10!7%#"$32%"32$54&?Dҩaav;*v,f. ?3?910#3#&'Cw>\e3TJΌmw0fb1s &@IY IY IY ?+?+9/+10!!!!!7r@)D/^^^^{2f\@ IY?+?310!#!#!'d g6Vfy3q /@ IY IY?+33?+339/310#77!!'7!rHPX{T^^7<q#.@#  IY IY  ??99//++9999107.54$773$54&'#11k3)d'3E#gȭ{ȂɻE|왮y};!@JY ??339/3+310###"&547333332673 `g`Og7= g 5dei89fwAi{$!@IY  IY ?3+333?+10"!7!.54$32!!7$4&oܜ\7ck ZTT3= y  mi鏁˩n9^^}J~^9&,j6R &+55&<jR &+55fm&~T;&+5;p&T2&+5L &T"&+5pz&T&+5%&U{ &&+555fmP!1*@+FY""GY?3+3?+?991023673327#"&547## 462>54&&#"q45R$R"I L'7~tV }_i1']#.mQBV#of[`uJ"!@# HY?+33?9104#!7!#6654&'&&ut`Z.]ofW*FYuZZIwhSSUrO-)>N5@VS|92I-;L P"@   FY?+???9310654&#"#33632W[pŇ$fbR%\@PZ#?xFpr{=+ "&@ GY  FYFY?+?+9/+10%2! !654&"&54663 שOH {xf9rvK8qBPp7EXSiPpy? FY?+?10%27#"&5473Z7LTAdkbDTsbS{4g=L?R!"0@ " FYHY?+?+?9939/10#'&&#"'632327#"&'&'1Lag> QX'A3Jw{n%* $'1NI /k+ibR~?< NV`慠H?wy?  ?3?210363#ybF!@bDd?ȧ=;`35@ (22FY22(#*$'('HY(?+33?9/+9910#"#654&'.54675&&5467##7!#"33Hjz\.LFx>G}xQ1vzɸsWmZ!򏽳Nfzg2+=U===0@-=QuV'k/SSkeuubTRZ?"@ HYHY?+?+33?10%27#"&547!##77!#b+/+=HV-bu&= R V??[?QK.#/T"@  FYFY?+?+?9102#"&'#"32654&ŐYM`c_U/\~xT8FBVN0fJP@ #FY?+?910&#"#6654&'&&54632mnlu0fv]yKYKkn/^}X.4hSAx:=I)@ƪH+h?@  HY FY?+?+310#"&54$3!#"326654&'֚#-줙w^%y(QFɄSNHR?@  HYFY?+?+310%27#"&547!77!!=[o*clD@DVngR|_?Qk9AJ%?@ FY?+?310"&5473323㢴%iff |gi!W.;T%%@GY" FY?2+3?+??10&&5476632#4&#"66˿њ?tbaaWRfǻE@䴪敚-цpx- -)#J!/@ FY GY?+?+??99991023327#"'#.#"'66?J*7kE @;/'5;9w^A ,#&(CJ+Oj<dNRC6U7T  @  FY ?3+3??3?10$3#&&5473P ff^fcfbvBy. ϯ`:]#aBD?)"@( FY%?2+3?39/910"&547332673324'3#"&'Rf^\V}#H`BTN\x̆X{]|LZ3TZu(Ǘ8b^Ty&j #&+55%&j &&+55b&RT$&+5%&T&+5D&T3&+5fs&(jBR &+55o"+@IYIYIY?+?+3?9/+10"'532677654&#!#!7!!!2;FE.y} wӤf!REj1 bxZ@EmdX^^KIf`s&avTR&+5&@IYIY IY?+?+9/+10"!!327#"$32&EZ͌g求-qm^Ui3^1 DZ@% 6,&,j6R &+55-$,@IYIYIY IY ?+?+?9/++10#!!#"'53266!32%32654&#!(re60-9Nmc=ݕX<]`X7uYf)@ IY  IY?+??39/3+310#!!#3!332%32654&#\g6fhޓ1wwWq#@IY  IY ?+3?39/+10!654&#!#!7!!! TwӤf!REj1L f{uCshX^^)S:fs&vR&+55J&6R&+5f\ @  " IY ?3+??3103!3!#!d!fXLdNIVJd$fD &@ IY IYIY?+?+9/+10#!!!32%32654&#6wޕ^ӳYf%f`a\ $@" IY  IY?+33?+?310%#!#36!!TbiP9QeiORݰ^>dMkfs(@  ?33?33910333###X}g3{RfE@>+&-@IY $$JY$ IY ?+?+9/+910#"'53265!#7326654&#"'632۶Ӳh|6إ*gOuj`Zir|wLfb   ?33?221033#7#fO ndx#e<J9f|fbJ&6 R&+5f @  ?3?3910!##33՗g6f')#@IY IY?+?+?10#"'53266!#(re60-9Nmcye!X<]`X7JXmw0f\+{2f\nfy3&75@  IY ?3?+9910"'532673663]?C_oui L!ot-po%u)=qsy};f\ @ "  IY?+3??31033#!3!dߨbhO6d>d@ IY ??39/+910!#"&54733273۽iffri٠dm[@dt8\^ZJf @ IY?+3?331033!3!3f6dX#dZ#dXXJf@ " IY?+33??3310%#!3!3!3biP6dX#dZ#d^>dXXs &@ IY IYIY?+?+9/+10#!!7!32%32654&#s!ݕX^uYf "@ IY IY?+??39/+10#!332%32654&##36hޕf5fuY/f @ IY IY?+?9/+10#!332%32654&#6hޕuYN&@IY IYIY?+?+9/+10%2!7!74&#"'6632#"'5m91f̀rEΑHPE`H@^&HKm\f$*@ IY  IYIY?+?+??9/+10#"47!#3!6$32%"32$54&}g6f( ѩ?*`@1w/sm &@ IY  IY ?+?39/+910#&&54$!!##"33L}ixLf䤔{(wJ{߷f7PDbT*$@"FYFY?+?9/+910476$73632#"&26654&#"bލ]LK ?{7ۖܔst[}mei .C V 9)/ƻЕꔊt#/hP(-@""FY""FYGY?+?+9/+9102#"&54$32654!"32654&hue̒q'pP}ww\^Uչ=I|kȂzXgN\P(#@"%FYFY?+?+910>32327#"&54667>54&#"ydY)};nkBlGn3b[:U* uloE8N`CW]IZ+}R}e<;DN3KK'!f)(-@ #FY GYGY?+?+9/+910#"&54632365#"'66322#"fB5}%'4D¹;FtsϵzȮVK 'R(E\+ f}PH{P;=@ 8FY88: /4/GY4(#(GY#?3+3?3+3??9/3+3103>32&#"327# 47####"'732654&#"563 33^̃M:9Fqqv}5

32`&$\xhGVn`%J`]KT|wQ[OYZLW-?@     ?33?33339/10!#&&'#3663,CZeIu L d? 7|Jm? @ GY   ?3?39/+10!3#!#dqhefnod?!?bTRL PQTSfPFH^PP'?\b"-@"GY FY ?3+3?+33??10##&&54$732654&'skZi‘c^RŏzrB'r̠¹( ?[m+?$!@ $"FY?3+3??3910326673327#&&57##"&547}_[nÅ!ibT(dePC6Tr?Fg7JWhBYM_ SN3qr|w8059)0dlXKUTfX!%*T# JT#*@ GYFYFY?+?+??9/+102#"&547!#3!6"32654&H𡶷od`d3zs}pT6;?! Vڦ2?&.@$$HY$$HY FY?+?+?9/+910"#"'53267667&&54663!#"!3RSiL83AR>! 32"32654&5Yٳ jwZTn`  Ka]I*PikAOzsx߆wTơLOXZMzƋLKweeJ?$2@FYGYGY?+??399//++910763 #"&547!#3!3"32654&s8uaTod`didN6qL Ğb?! xKzszhbL H!&v &+5'&\6&+5m+?(@ FY?+???39/9103#326673#7##"&547 ZZX;_[nÅ!ibP샇VjFj4JW|w???322333?3210##"&54632'"3254&#"&54632"32654&#"&54632'"32654&jodopxgmyoOQRHHdopxgmNSRHTLHPdooxgmxoOQQHTLIJМ0EttMmlyМ0JstmlМ0Ettpi V{ /331079?1'%{ /33107'7^9=@{1P'^2'1 ??10#k>J3@  @ TY?+?2910654#"#336632HVTYw?/@LY LY LY?+?99//3+3+10!!!!!!##7 $;5?g@'^^^1^&T@/ !"!MY ""?"O" ""MYKYLY?+3?+9/3+39/_^]3+3102'&#"!!!!!!76677#737#73766o'6l{+h/c1V_"1-)NT2RRdY^T \RRϻ=o ,F@$**),',MY,, LY LY!KY!?+?+?9/+9/+339/10!##323265!##3267#"547#?3g6)S4A.;E4N`77N R}g=BIVNgCP&L@)MY " MY""LY"LY?+?+9/3+39/_^]3+310"!!!!327#"55#7367#7332&ߺR4 Xs_^y5fmRbwR9^7RetR ZRN'3@+1! ???32?3210#"&546632&#"3272#"&54664&#"326jHqY]ROHCgQUJw{Nau|ROGFf7eyJuz~nlP'R%vpiwnhQTVXsm&)@$     /3/399//9929910%273#"&556746324&#"66ZNh^j\}stƽXQGIDH咭+T&Vӆ|\ij`s1MND (1@  &  ?333?39/]39/33310!##337!2#"&5464&#"326fJ)+`5{\A(zZbv3UJlZHl?sJVV~raYgdc @ ?3333233210##5!###33#7#V XR}}VNN}ah^/{vH /3/29/310"&546632!3267&&#"1RQHbٓ7Xz#5Fi)|7@u9Z'@&{  ?555S'@F&u  ?555S'@5&=  ?555=P'@' ?  ?555-'@ ! ?3?39/9310#"&546327&#"56632267&#"-𰚮U9-*9q_um}GȰ5i#b @  IY?+?3103!7!C *g!FJBFZe2@ IY?+?310!#!f?TLV @ IY IY?+?+331055!!!VxtwF_E^E^/ SY/+105!dd%//9/3310##533bn^X{ #/*@**SY $$SY/2+3/3+3991026632#"&'#"&546"32654&!"3267&&[A?^~^?BZPs77sPXhiOWjjWJs=e?:^o!'9}apG=;^n,::C`qHo#/@RY RY    //99//3+33+310'!5!!5!!!!L{^ I}:%RFR1'RR/ @ SY /3/+105 5!n!Jgqdd= @ SY /33/+1055!!mq^g)Jbddw-  //33103# w1=1w!m'L5I/'O7Ij/3210#"&5473327 RUeta&$-DG?  GY?+?10"'532673>3/BR] `#\g~   /106673#$h` :0.6'6;  /106673#"g` =/V,=(9  ! /10#56673 "g`?/,=&;s3 @ NY NY!?+?+10#"&54632"32654&dpoxgmNSQHTLIН0Jstpi5J %@NY  ??9/3+33310##7!733#671R1yV}=$ f/LA&"~Z7(@NY NY!?+?39/9+9102#"'532654&#"'!!6p}~SfotVRNZ!yP@`tu1]BjMWN5&-@ NYNYNY!?+?+9/+910&#"3632#"&546322654&#"3B|#U]pN^nt|وT]zHE:i=QZ`whZ\" ӔlE[8_MUgJ@ NY?+3?10!7!d JPAm;#0#@* $NY NY !?+?+9102#"&5467&&54632654&">54&bwav?Lj~s<2hsUJZoRQ[2@SG+JfYOx1(dGpqbb-/[8f+#fSAL_ORgT #'+/37;?CGS[kt|@N-luuk\}}VKvkZQ\t\84 0%3&1HT;GFBIHCHEVW/2A1R~X8*P:/5K6DpJ;?HI>@IH!&7L&+5 D)2?<@&7&HY077,FY,,=FY,!FY?+?+9/+9/3+310#"&5476654&#"76323267#"&54632333654&#"uz:D%;668K3/+dZޘmRop`sszgBZM:LskDWe೹}Rpe|=*@΁@ IY?+??91066632&#"#3tf<);i]liwd9 X i!s?--@##  HY *FY?2+3?+339/10"&547!77!##"&'4'!32673326|tVr^ QRt#;a6QF]ZW?QEv^T䈜c&Pbmwu&0v}T&+5H^!&Pvq5&+5&$[f7P&D[%'\2m @ H @ H /+3+210#"&546324&#"326mta`mm`atYE76E?<7E\lj\]jnY9DD9:CCZ  ?3210673#'467#"&i;<9t7<2&*,!U1`V#]3 #1:^&Luw&O$%@  IY IY?+?+9910#"$326673"32$54&{DӏBfhi 5-ҩ;*lm)qbyc=?[Iq˃L7s1@IY IY @IY?+99//+3+310#!!7!3!!32%32654&#s9DhDdLݕ^-^YH'%8@ FY HY GY ?+?3+39/+910!!763 #"&547#7373"32654&Z8ubTd4d^M6r?Q^ ĞiQ vMzsygcf)%1@IY!IY! IY?+?+??9/3+310"!!327#"47!#3!6$32&GZ ͋tg6f07-om^"r 3^1 `X1w.DZ@JRP$1@ FY  FYGY?+?+??9/3+310"&547!#3!632&#"!!3267qd`d4ȇkkn1EyH{J3?+Z/T6E!\9- #@  JY ?33?9/+3310!###3##!'&'^Vm_E`}LTX^g#$+JN$Yd? !@HY   ?3?339/+310#####!'bRm^s}cH#4??b1^f-@ JY   ?3?339/3+33310!###!#3!3##!'&'^VlAg6fF`}LX7zf#$++wJN%\YL?,@  HY ?3?3?9/3+3310#####!#3!!'bRm^s}c1m^^jF+H#4??b1^`"0@JY  ""IY?+33?339/33+310#>77!#.####"!=FlhmA i4j^bbw]=v<ZVK3xm2-m+D?0@HY  HY?+33?339/33+310#>77!#&&'#!b9kg  ^b{F6c3{v_wqs[-eoif8}EE Dzu7f+'XQ}qf`%(9@ IY&   ( (IY ?+33?3?9/33+3310!667!#3!7!#.####"!)O6g6fmA i4j^bbw]=Um#ZVK3xm2-m+DJ?"%9@ GY#   % %HY ?+33?3?9/33+3310!667!#3!7!#&&'##"! #C0ud`^@  ^azF5b3{w^w Bdo?T?>}EE Dxw7f+Zy}q\NZ@3A32&#"37632&##"&54667>hz_O6Xp^!^>K@DC#"&%c5uڧQDKMH^NBpOd!`Zir|C4L32&#"7`g{Ye[j8EMd*\BJvrEƒTZiX=qJ)v _ ^=L@DC"#!&bJ]qu\gVB;^ `/ `TE\="soaY\{kN^".PI @E^H' MYu{6@ IY]m?  IY IY?+?+9/_^]]+10#"$322!"!74&{kFF)33,E)A8%sbT 4@FY?O FYFY?+?+9/_^]+102#"&546267!"!654&ŏ (F-Tٿ̿N8442H@  JY?+??310%66>32&#"#3Wv<_rK++MnKXdu/~t7T hJhP@  HY ?3?+?10337>32&#"#hel?5SeD0,<^;q?!L,}o9 N cHs&vfR !&+55h!&v  &+55 &2\dT'\R{0K@##/) /O IY&))IY H?3++3?+33_^]999910#"&'&54$76632%"'6632665%{޺ 9#&9 ©, 7#&; /R 4"&: N''-+&#%&-/)S )"$++zW?b-\@8!,% +;K FY#%$ 4 D     %FY ?+3_^]]3?+3_^]]39999102#"&'&&54676"&'6326654&'#3y}ՍE"3}C"2qf@JqbLN)($ȚH(&է9C'%;;Ik#72H[}@ PYL>443JY4@: H4B@Y YY Y Y;B;JYB@ HB YL 0 % %IY --IY?3+3?3+399++_^]_^]++910%2654&#"'63 #"'#"&532&#"3267#"&'&&#"#6632376654&'&&54632\˙Z{w;].-wO͒b|9Ъ d9Za]QU05<Kv?*O/>Q c_0f\KR+pW +8+#38H#u!TDEI+HV@6"&2NR(=7^d("Jq> 2  7m`-CVnKGT9/T@ HT6/.HY/@( H/=@=6HY=@ H=G+""GY ((GY?3+3?3+399+++++910%2654&#"'63 #"'#"&54632&#"3267#"&'&&#"#6632376654'.54632JUULR+mbobpc̃eO7CCPx>p%'l 7n[*O/>Q c_/g\LL0pW (:%+#38Hss/R9i55l>T6($R,=8^e(#Jq= 3   77EK@'=A=AE HE@;?B**IY0&&IY ?3+3?3+39/922+99//10"'63 #"&'#"&532&#"!2677332654&#'##'##'7;].-wOl܌p)jƪ d9Za]Qz#5m)tX{s P N -m!TDEbÌd\WiHV@gY6љ'puuuusj$1@  $ H$! ?223?339922+99//1033363###'##'##'7bLTEb\ @b>c=]r P M -?[Iq˃L7tttt@ IY IY ?+?+?10"327#&5$32&˵ٽ6}ffhޱ-mp # DZ@fP@ FY GY?+?+?10%27#"&54632&#"XLbdʗkkosF$T+Z/Ⲛ'^@   //910%'%7%7%1'H'%F)B);@D5%ŤBuH  /2310#"&5463!6632R"%::*+"(yV$,3++""Wu /332102676632#654#"##74yd:uBXi]i,ccr?#!LC V$9Q\  /9104632&&0&P%+wjc,9>' 9%B"n{ /9105654'.5432{jcw+ P&0KkB%9  >9) (6DR_m`@0(!%6/,3_YV\mfcjD=:ARKHO %3j\AOOA\j3%  //9//////2222222210&&#"#632&&#"#6632&&#"#6632!&&#"#6632&&#"#6632!&&#"#6632&&#"#632!&&#"#6632o //10#677&''6673&&'7%'67'&'7%'766&&'57 F$a5sGA݁R Ia4!&b'ZEx+REC{L%ExbCWBO݁#BO݁ Ia5uGA܂24bE<Y?DnXFcDnXb'X< F$a5fbJ"(@ IY  "" ?2222??3+?10333##7##"&5473327f)6 nݤrС60e} RUe>d`Jng("-DGm+-/@-%+  FY HY"??+?+?3922103266733##7##"&547#"&5473327}_[nÅ!ibפuϕ섆  RUf?Fj8JSAo|wEk6{D=͆_ww H^ )h3LH'?.@ GYHYFY?+?+?9/+910"'532654&#"#!!632fLXbzfO@mbmR9Lp`%c0?Qz _(@ " IY?+?33?339103333####X}g3{biP^RfE@>+}>d{P=@@" $ FY($$ & ="2 GY- 9GY?3+3?3+3???9/3+310# 47####"'732654&#"563 333>32&#"327#R  m`m΂K<8Gtnv~4d')#H?"@   "HY?+???391033###3ZX{fdQEyqbbn?'Cm%?f/@/  ?3?399//9]10#37733##g6f6V!EsoCV8H?6@   @ H ?3?399//+]91033##'#37V+-"1D0VDfqbbn[H9<?f7@! JY o ?3?39/]3+3910!###73733#73og-f/]ERRVyZL4@  HY  /   ?3??9/]3+39103###7373!!a}&)jP`,`+yjFb+/NN !@  IY ?+?3?9103##!7!3՘f!#''X^Rw? !@   HY?+?3?9107!3##Ro=yqbQ %f\%@IY " IY?+???39/+10!!#3!33#×g6fdߨbhO1w>dJm?%@ GY " FY ?+???39/+10!33##!#dqheײgdTnod?!?m?f $@ IY   IY ?+?3?9/+10!#!#3!!dg6fX1wJ? $@GY  HY ?+?3?9/+10!#!#3!!!fnod`dqh?!Qf=0@ IY IYIY?+?+?39/+910!#!#!632#"'532654&#"'d g6D=͆_wwٿ>EV\ )h3L F? 0@GY  GY  FY ?+?+?39/+910632#"'532654&#"#!#hdDCp`hJXbzf?Rmhd?) _%c0?m.<N@+%/#6, IY ,6IY,, , ,,IY#IY?+?+9/_^]++999910327#"&'#"$32&#"327&&546326654&#"mht?kG4dHsP92@0"  FY!1,HY1?+?3+3??3?99104&#"#654#"#33663236632327#&&54666VL0mfj#dbP!PojrMvuRT!edP=DZXMU}%%?qr{s7\g8aM_YF6,x<q?   ??3910%663#3h >ff]edmfCy$M!v)@  JY  ??39/3+39103!!#!7!73 u !RiX d1\-RmR<?%@ HY ?2+3??3931033336633###-dm >fX]V?!vCyRfy}"@  IY"??+??3910%###33biP^`jw^>dZr1w;"@  HY"??+??3910%###33ffdRTwydux@PCm!+2+H'@ "IY IY?+3?+3??10!7!!!33#!qPH"eߨbiPX^^X>dT?(/@' "&'&HY'FY?3+3?+3??910!326673327#&&57##"&547!7!b_[m„$ibT(ddOA8Nuc;JWhBYM_ RK8mv|wd?)@ FY "FY?+??39/+910##"&5473327733##6?:dE Ya0bײfeTTsxuJf XJWZ?mz<@ IY??39/+9999/9/_^]10%#"&5473333673#Aiffri OWPdeC5@dt8\^xDJmB?6@ FY ??39/+9/9/99910336773#667##"&547PE W_BV@)bf22-7V5:?XJW3  Z饶!{rJf dF@IY ?3?9/+910632#654&#"#Óhggshߟe6Z>fo=^]ZH?@ FY  ?3?9/+910!654&#"#336632E Za/bg12/Nt@AVJXZ?on|r*f&04@"" &IY*&&'IYIY?+?+9/3+39/10!2!#3267#"47"&54733"3 $54&mE1 j|~pXcdeK;|8G(0`1%.U8_PF36:[Y䲷u{dJP-4@(( "-"FY-- FY GY?+?+9/3+39/10"3 4&632!#327#"&547"&54733D21Y5r!Xc`hFTXzi,6I^E:5_PF37:^)3=@$$) )IY-))"*IYIY?+3?+?9/3+39/10!2!#3267#&547"&54733"3 $54&mE1 j|vgHhKXcdeK;|8G(0`/%T+U8_PF36:[Y䲷u{dJP'0=@""' 'FY+''"(FYGY?+?+?9/3+39/310632!#327#&&547"&54733"3 4&J5r!?eDXc`h21YRzi,6I^Aaѯ:5_PF37:^FT,J&6fR&+5{&6L?&+5f+@IY IY ?+??39/+9910632#"'532654&#"#33(*·_wwalg6f)h3?{)H?)@HY FY?+??39/+910#"'532654&#"#33eNVeze=8hbbn=V׼%b/ ? $@"IYIY IY??++?+?10!#"'53266!3##N(re60-9NmcyݤsѠX<]`X7>dH$@"FYHY GY ??++?+?10&#"#"'532667>323##L&$\xhGVn`%J`]KT|wQ[פuϦOYZLWAof\"@ IY  IY?+??39/+10"'532!#3!3r,@ >{g6fdH-i" F1wJm?"@ GY   FY?+??39/+10"'53267!#3!3fLXb.pod`dqhe+y%c0?!`f\%@IY " IY?+???39/+10!#3!33##Zg6fdߤsѡ1w>dJm?%@ GY  "FY?+???39/+10%##!#3!33tϦnod`dqheT=o?!)@IY"IY?+??39/+910#"&54733273##3۽iffri٠d˦Hh^m[@dt8\^ZJ?)@FY " FY ?+??39/+91032773##3767##"&547PE Ya0bJb\13:?XJWZ|xuJf mw$@ "IY?+??3?3310%33##7####3ݖsѠO3:`5>dqNDf-?$@   "HY?+??3?3310#&&'#36633##u,CZeIu٣uϞ L d? 7|Ao,VJ&$6{R&+5f7&D6B%&+5&$j+R !&+55f7&Dj 4&+55fPfsJ&(6R&+5f&H6$&+5^ "&@ IY IYIY?+?+9/+10#"&54$!3654&#"566322#  vsbKbeE瀞2MYa/':vy=TP &@ GY GYFY?+?+9/+102#"&54$!3654&#"56267# –rGC 11WPŽzi%=J^FET^ &jR 5&+55=T&j 3&+55&jR $&+55{&j N&+55&jR 9&+55&j> <&+55 9&@IYIY IY?+?+9/+10#"&'5326654&##7!7!dd҃dhH)n#,uj^kX1^X\'?&@FYFY FY?+?+9/+10#"'532665!#7!7!Ӆx6KkKϮ@h#/p7P=XOfb&MR&+5m+5&XM%&+5fb&jR  &+55m+&Xj +&+55{&2jR .&+55b&Rj -&+55{~bT{&~jR 2&+55b&j 1&+55N&jR .&+55 '&j< 3&+555&M\R&+5'5&\M&+55&jDR '&+55'&\jr *&+555s&ShR (&+55'!&\S +&+55&j=R (&+55&j ,&+55f` @"IYIY?+?+?103!!3#f6biP^>dH#? @"HY FY?+?+?10%##!!mgdTmT?m?Qff&jR *&+55!&j 4&+55H`7@JYIYIY IY "?+?+?+9/3+310!!!3#"'53277##73`O}8QI0 !T^RWSXgR#?7@ HY HY FYGY"?+?+?+9/3+3103#73!!!!3#"'53277HjhmVZ5RH0 !TPQdPRWSXgy}'@IY IY"?+?+??39910%3#"'53277##33J7QH1" Sw`jw^WSXgZr1;'@ FYGY"?+?+??39910#333#"'53277#wydux@ٕ5RH0 !Tp!+2/WSXgy})@  JY ?3?39/3+39910##!7!33!\k9jw-3ZRriR;)@ HY  ?3?39/3+39910#!7!33!!#wyduxeb!R2R\o @ IYIY?+?9/+104$!33!"&# !3\ g IhJfG\1(1@ IY $ $IY ?3+3?9/+9/910#"&'#"&54$!33327# 326671n ɖm{g qZ2mv\ZP렯c[(}$Ug BwKf-.@(FY  GY ?3+3?+?999/1032673# #! 46323632>54&#"h\t{ G\I%1 cYH{k|ȀfhZ"vbB]F}T~26@'',IY, JY,#IY,?+?+9/+9/9104&##7326654&#"'63232673#"&&547h|6إqYslkq#ĖXH `Zir|wL*&??Ug|z 塨DzJ*{P+6@$$)GY) FY) GY)?+?+9/+9/910%74&##732654&#"'663232673#"&7bsZhX=qJ)SVypw!H\J&w[U\woN^".P2$tqxZ|&0@IY$"" JY$IY$?+?+?9/+9104&##7326654&#"'6323##6h|6إ$chP@`Zir|wL*6r>d%h/P&0@! GY "FYFY?+?+?9/+910%3##7654&##732654&#"'6632}feT/TZhX=qJ)SVy T?mA$k_\woN^".P2$tq(@&'@#IY #IY#?+?3+39/10%32673#"&547!#"'53266!m[slkq#Ėg(re60-9Nmc`Q_|z 塨tB<]`X7sH,'@((FY(  GY ?3+3?+9/10%32673#"&547&#"#"'532667>32pw!H\J&}&$\xfIVn`#J`]KSzzQ[Z|GkJOYZLYq{f,@IYIY?+??39/+9/10!#3!332673#"&546Zg6fdm[slkq#Ė1wIQ_|z 塨t/aJ)?,@GYGY?+??39/+9/10!#3!332673#"&547od`dqhepw!H\J&?!i`JZ}Gk=&@IY IY IY?+?+9/+10!!"$32&&#"32667!T0eq^&nXʲėvw-  &(^. |sbT0@FY  FY FY?+?+9/_^]+10!#"&54$32'&#"3267!f3ߕPk)Ax||(Eݽ2*:T#?ힵó%@ IY IY ?+?+39/10%32673#"&547!7!!n[rlkq#ĖPHR^|z 塨rB^^o{T?%@HY GY?+?+39/10!7!!32673#"&547}qx G\I&QQdDZ|Hjh'-@&IY JYIY?+?+9/+9104632&#"33#"3267#"&54675&PdS5垕\uuVڼ+1>Vo}`$4c/"¬ E;mP!)@IY IY IY IY"?+??++?+10#"'53266!3#"'53277#(re60-9Nmcyݍ7QH1" S!X<]`X7WSXgXH()@&FY&FYGY GY"?+??++?+10%3#"'53277#&#"#"'532667>326QI0 !T&$\xhGVn`%J`]KT|wQ[TWSXgOYZLW&$gf7P&Dg&$fR&+5f7&Df&&+5&$wR &+55f&Dw 0&+55&$xR '&+55f7}&Dx :&+55%&$yR &+55f&Dy 0&+55i&$zR &+55f&Dz 0&+55s&$'K+Rg&+5f7#&D&Kg)&+5&${R &+55f7&D{ %&+55&$|R &+55f7&D| %&+55V&$}R &+55f7&D} %&+55i&$~R &+55fi&D~ %&+55#&$'N3Rg&+5f7&D&Ng%&+5fs&(gf}P&Hgfs&(fR&+5f&Hf%&+5fs&(RXR&+5f&HR+&+5f&(wR &+55f&Hw /&+55fs&(xR $&+55f}&Hx 9&+55f%&(yR &+55fl&Hy /&+55fi&(zR &+55fT&Hz /&+55fss&('KFRg&+5f!&H&Kg(&+5&,f R&+5L&f&+5&,gw&Lg<{&2g|bT&Rg{&2fR &+5b&Rf&+5&2wyR *&+55b&Rw )&+55{&2xuR 4&+55b}&Rx 3&+55{%&2yuR *&+55bx&Ry )&+55{i&2zuR *&+55b`&Rz )&+55{s&2'KRgx#&+5b!&R&Kg"&+5s&_vR.&+5b!&`v+&+5s&_CR&&+5b!&`C$&+5&_fR(&+5b&`f&&+5&_RR/&+5b&`R#&+5&_gxb&`gs&8g$m+?&Xgs&8fmR&+5m+&Xf&+5s&avR&&+5mw!&bv*&+5s&aCR&+5mw!&bC"&+5&afR &+5mw&bf%&+5&aRR'&+5mw&bR"&+5&ag$mw&bg&<g2'?&\gt&<fR &+5'&\f/&+5&<R R&+5'&\R"&+5&B?! /3210#&&'53#&&'53J/}1sKI/}/t/</<@@ H H  /32++106673#&'#%6673#?1M_9$cZ%2m76B'9+>7ih8%w+9mm} !@ @ H H/3++210&&'536673#&'#97{rU$u?1M_9$cZ%"t.;o'9+>7ih83@@ H@ H  /32_]+299//+3106673#&'##7654#"5632?1M_9$cZ%?W1--'9+>7ih8l!)X L8 :(%@%"@ H  /32+]32106673#&'#"&'&&#"#663232673?1M_9$cZ%*K)#>(.=LkU2M;2-;Ne'9+>7ih8k"!4Cel$':Ane!7@ @ H /32+10#"&55733267'6673#zitEHVUg*o#.>Awse\DF=M1 t32q"!#@ @ H /32+10#"&55733267'&&'53zitEHVUg>wsZ)wse\DF=M&t++{#!# 0@ H@ H@ H /32++2+9/310#"&557332677#7654#"5632zitEHVUg`UC["2? wse\DF=M8N+^ Q: < )!@&#@ H /32+222210#"&55733267'"&'&&#"#663232673zitEHVUg *L(#>(.=LkU2M;2-;Newse\DF=M{"!4Cel$':Anesb /210254'3#"'7;v T+mh2 dPsKfzE B^ /210%#"'53277B8RH0 !T1^WSXg?T /210%#"'53277?5RH0 !T/TWSXgx&hd @ MY &MY?+?+10#"&54632%"32654&웳uq{iJ݉ګ'/Z  ??310!#67'3/h4(Y3ZG#?{NZd@ LY&LY?+?+910!!7>54&#"'6632!ˊz8th;TqIkjHcyuEXhNHQ~V_df(-@LY && KY&& KY %?+?+9/+910#"&'532654&##732654&#"'6632dԴu`Aղun}1Tr1b) eV`rzKCKZ !@KY $??9/3+3310%!#!73!!7#P`OPnwh;(8Lyra RV Q/@MYLY KY%?+?+9/+33102!"&'532654&#"'!!6ּTA񪌅nBpb ̱(kZnj)1`lO@ $LY?+3?10!7! ZV`nW7`&-@ LYKY& MY%?+?+9/+910#"'53 ##"&546632%"32>54&rHWiڙ㢺wޒpZ}Sm,Zҳu~Anvu;8@3GY.#FY*8 HY' ?33+33?3+3?3+310"'53267#?6632&#"!76632&#"3##"'53267!065/X\##I]W<`s###I]W=as#"z065/X\#!ZjCPk}Pm{QZZjZ)+$5#@3'-%1*+.+?3?322223310#"'532654&'.54632&&#"##33#7#zoQ]a[\?mQJ_Yk!d)EG7_`L!R}}V]nR#C859+!3?:OhL ;2.6#&6Hah^/y&7z'7?&WzF7P-.@ 'FYGYFY?+?+?+?9910"&'53267##"&5463237326654&#"fH<>H*FH{1;P1UH{k|Ȁe'g'0Ek2xOF7!&K5&+5F7&N1&+5F7&O76&+5F7!&:j2&+5f ??1033f6bJf s&CR&+5fDs&v_R &+5fs&K$R &+5f&jR &+55fF&R@R&+5f&M6R&+5f&NR&+5b&Q/fB!&OqR &+5f&-m'T?5ff&jR &+55ff&jR &+55fff&fR&+50&gZ2I6$$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs) $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q  q q q           ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q   q   q    q q  q  !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) -&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq7$&q&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq$q$ q$&$*$- $2$4$7q$9$:$<$$$$$$$$$$$$$$$$$$$$$$q$&q$6$8$:$G$$$$$q$ q$_$I$K$M$O$Q$S$U$W$Y$[$]$_$o$q$s$q%%%$%7%9%:%;%<%=%%%%%%%%%%%$%&%6%8%:%;%=%?%C%%%%%%% %X%%%!%#%%%'%)%+%-%/%1%3%o%q%s%&&&*&2&4&&&&&&&&&&&&&&&&&&&&G&_&I&K&M&O&Q&S&U&W&Y&[&]&_'''$'7'9':';'<'='''''''''''$'&'6'8':';'='?'C''''''' 'X'''!'#'%''')'+'-'/'1'3'o'q's'(-{)))"))$))))))))))C)) )X)))!)#)%)')))+)-)/)1)3.&.*.2.4....................G._.I.K.M.O.Q.S.U.W.Y.[.]._/\/ \/&/*/2/4/7/8/9/:/</////////////////////////$/&/*/,/./0/2/4/6/8/:/G/////\/ \/_/a/I/K/M/O/Q/S/U/W/Y/[/]/_/a/c/e/g/i/k/m/o/q/s/222$27292:2;2<2=22222222222$2&26282:2;2=2?2C2222222 2X222!2#2%2'2)2+2-2/21232o2q2s2333$3;3=3333333333;3=3?3C33 3X333!3#3%3'3)3+3-3/3133444$47494:4;4<4=44444444444$4&46484:4;4=4?4C4444444 4X444!4#4%4'4)4+4-4/41434o4q4s47777")7$q7&7*727477)7D\7Fq7Gq7Hq7Jq7P7Q7Rq7S7Tq7U7V7X7Y7Z7[7\7]7q7q7q7q7q7q77777777q7\7\7\7\7\7\7q7q7q7q7q7q7q7q7q7q7q777777q7\7q7\7q7\77q77q77q77q7q7q7q7q7q7q7q77q77q77q77q7777 77q77q77q77q7777!7$)7&)7+7-7/717375777<7>7@7Cq7D\7F\7G7Hq7J7777777 7W7Xq7Y\7_7`q7b7q7\7q7 \7!q7"\7#q7%q7&\7'q7(\7)q7*\7+q7,\7-q7.\7/q70\71q72\73q74\76q78q7:q7<@<C<D<F<G<H<J<< <W<X<Y<_<`<b<<<< <!<"<#<%<&<'<(<)<*<+<,<-<.</<0<1<2<3<4<6<8<:<<<@<B<D<I<J<K<L<M<N<O<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<^<_<`<b<d<f<h<j<l<n=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_>-DD DD EE EYEZE[E\E]EE7E<E>E@EEEE EpF)F )F)F )HH HYHZH[H\H]HH7H<H>H@HHHH HpI{I {I{I {KK KK NFNGNHNRNTNNNNNNNNNNNNNNNNNNNNNNNNNNNNHN`N6N8N:N<N@NBNDNJNLNNNRNTNVNXNZN\N^N`PP PP QQ QQ RR RYRZR[R\R]RR7R<R>R@RRRR RpSS SYSZS[S\S]SS7S<S>S@SSSS SpURU RUDUFUGUHUJURUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDUFUHURU RUYU`UU U"U&U(U*U,U.U0U2U4U6U8U:U<U@UBUDUJULUNURUTUVUXUZU\U^U`W)W )W)W )YRY RYYY")YRYY RY ZRZ RZZZ")ZRZZ RZ [F[G[H[R[T[[[[[[[[[[[[[[[[[[[[[[[[[[[[H[`[6[8[:[<[@[B[D[J[L[N[R[T[V[X[Z[\[^[`\R\ R\\\")\R\\ R\ ^-q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq-{&*24G_IKMOQSUWY[]_-{-{-{-{$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjln$;=;=?C X!#%')+-/13             YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p   YZ[\]7<>@ pR R")R R  YZ[\]7<>@ pR R")R R q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  &*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_$79:;<=$&68:;=?C X!#%')+-/13oqsR R "@E=K=N=O=`={R R$79:;<=$&68:;=?C X!#%')+-/13oqs-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p  &*24G_IKMOQSUWY[]_FGHRTH`68:<@BDJLNRTVXZ\^`FGHRTH`68:<@BDJLNRTVXZ\^`\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqsR R "@E=K=N=O=`=R R\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs  $79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs-{R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`$$$$")$$q$&$*$2$4$7)$D\$Fq$Gq$Hq$Jq$P$Q$Rq$S$Tq$U$V$X$Y$Z$[$\$]$q$q$q$q$q$q$$$$$$$$q$\$\$\$\$\$\$q$q$q$q$q$q$q$q$q$q$q$$$$$$q$\$q$\$q$\$$q$$q$$q$$q$q$q$q$q$q$q$q$$q$$q$$q$$q$$$$ $$q$$q$$q$$q$$$$!$$)$&)$+$-$/$1$3$5$7$<$>$@$Cq$D\$F\$G$Hq$J$$$$$$$ $W$Xq$Y\$_$`q$b$q$\$q$ \$!q$"\$#q$%q$&\$'q$(\$)q$*\$+q$,\$-q$.\$/q$0\$1q$2\$3q$4\$6q$8q$:q$&@&Cq&D\&F\&G&Hq&J&&&&&&& &W&Xq&Y\&_&`q&b&q&\&q& \&!q&"\&#q&%q&&\&'q&(\&)q&*\&+q&,\&-q&.\&/q&0\&1q&2\&3q&4\&6q&8q&:q&(@(Cq(D\(F\(G(Hq(J((((((( (W(Xq(Y\(_(`q(b(q(\(q( \(!q("\(#q(%q(&\('q((\()q(*\(+q(,\(-q(.\(/q(0\(1q(2\(3q(4\(6q(8q(:q(8@8C8D8F8G8H8J88 8W8X8Y8_8`8b8888 8!8"8#8%8&8'8(8)8*8+8,8-8.8/808182838486888:8<8@8B8D8I8J8K8L8M8N8O8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8b8d8f8h8j8l8n9R9 R999")9R99 R9 :::"):$:&:*:2:4:D:F:G:H:J:P:Q:R:S:T:U:V:X:]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::!:+:-:/:1:3:5:<:>:@:C:D:F:G:H:J:: :W:X:Y:_:`:b:::: :!:":#:%:&:':(:):*:+:,:-:.:/:0:1:2:3:4:6:8:::<:@:B:D:I:J:K:L:M:N:O:Q:R:S:T:U:V:W:X:Y:Z:[:\:]:^:_:`:b:d:f:h:j:l:n;&;*;2;4;;;;;;;;;;;;;;;;;;;;G;_;I;K;M;O;Q;S;U;W;Y;[;];_=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_?&?*?2?4????????????????????G?_?I?K?M?O?Q?S?U?W?Y?[?]?_CqC qC&C*C- C2C4C7qC9C:C<CCCCCCCCCCCCCCCCCCCCC$qC&qC6C8C:CGCCCCCqC qC_CICKCMCOCQCSCUCWCYC[C]C_CoCqCsCqDD DD E-{GGG$G7G9G:G;G<G=GGGGGGGGGGG$G&G6G8G:G;G=G?GCGGGGGGG GXGGG!G#G%G'G)G+G-G/G1G3GoGqGsGVqV qVfVmVqqVrVsVuVxVqV qVT[[[V[_[b[d[i[p[q[r[t[u[x[[[ [T\\\V\_\b\f\i\m\s\v\y\z\{\|\}\~\\\\\\\\\\\\\\\\\\\\ \!]q]r]x]T^^ ^^ _q_ q_f_m_qq_r_s_u_x_q_ q_T```V`_`b`i`t`` aaaaV\a_\ab\afai\amasavayqaza{a|a}a~qaaaaaaaaaqaaqaqaaqaaaaaqaaaaaaa a!aSbqb qbfbmbqqbrbsbubxbqb qbTdfdmdsfffVf_fbfdfifpfqfrftfufxfff fThfhmhshhiqi qifimiqqirisiuixiqi qiTmmmVm_mbmdmimpmqmrmtmumxmmm mToooVo_obodoiotooo qqqqV\q_\qb\qfqi\qmqsqvqyqqzq{q|q}q~qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq q!qSrrrVr_rbrfrirmrsrvryrzr{r|r}r~rrrrrrrrrrrrrrrrrrrr r!sssVs_sbsdsispsqsrstsxsss sTtftmtsttuuuVu_ubufuiumuu vqvrvxvTxxxVx_xbxfxixmxsxvxyxzx{x|x}x~xxxxxxxxxxxxxxxxxxxx x!y){{ {{ || |||| ~) y~     y~ y~         y~       n| q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqql~    n|   n|   n| l|~  qff jlrqs~ffqqq q  q q qqq qn|q qq  r|  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq)l|~    l|~   rsz|  rsv  l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqqqff jlrqs~ffqqq q  q  rsz l|~  ))  n|   n|  rsz|  rsz|   ) js      j  )j       js   s  j        m  m         js    m  m  j   sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R 7$&q7$&q7$&q$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q                        q  q  q                             ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q    q    q    q q  q   !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) & * 2 4 7q 8 9 : <                         $q &q * , . 0 2 4 6 8 : G f m qq r s u x  q  q   q  \ q        T _ a l |\ ~        q    q    q  \  \    \     \        q  I K M O Q S U W Y [ ] _ a c e g i k m o q s q!q!r!x!TSSSS TTTVT_TbTfTiTmTsTvTyTzT{T|T}T~TTTTTTTTTTTTTTTTTTTT T!XqX qX&X*X- X2X4X7qX9X:X<XXXXXXXXXXXXXXXXXXXXX$qX&qX6X8X:XGXXXXXqX qX_XIXKXMXOXQXSXUXWXYX[X]X_XoXqXsXqYY YY ZZZVZ_ZbZdZiZpZqZrZtZuZxZZZ ZT`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`RbIfbWfbYfbZfb[fb\fbfb%fb'fb7fbfbfb4fb5fb]fb^fbpfbfbfjj jj llllllllllllllllllllll lrlslzl|lllllllllllllllllllllllllllll llllllmmmmmmm msmmmnn nnnnnnnnn n|nnnnnnnnnnnnnnn nnnoo ooooooooo omooooooooooooooooooooooooooopppppplp~ppppppppppppppppp p ppprqr qrrrqrrrrrrrqr qrnr|rrrrrrrrqrrrrrrrrrrrrrrrrrrr qrrqrrrsqs qssssssssssssqs qsjsms}sssssssssssssssssssssssssssss s ssssstqt qtttqtttttttqt qtnt|ttttttttqttttttttttttttttttt qttqtttuqu quuuuuuuuuuuuqu qujumu}uuuuuuuuuuuuuuuuuuuuuuuuuuuuu u uuuuuv vx xzzzz zzzzz z|q|q||||||||q| q|r|s|||||| | ||||}} }}}}}}}}} }}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~ ~r~s~z~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~  qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  s s s rsz|    rsz|    rsz|  sl~  )    |   m rsv    )))))) jklqrsuwy}~)))))    ) js   f |   l{=}~j    )l{=}~j  l|~  j  l|~  j  l|~  j  )  )))))) jklqrsuwy}~)))))    ) js  \ \fH\ \|qqH HHq qq qmqq   l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )) jklqrsuwy}~))     s)) jklqrsuwy}~))     sl{=}~j  )  )    |         l|~  j   f m| )  )  )  q qqq qn|q qq  q qqq qn|q qq       rsz|    rsz|   l|~  j    )   rsz|    rsz|    rsz|    rsz|   qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )))))) jklqrsuwy}~)))))    ) js  l{=}~j  l|~  j          q             r v |       q                                                                           q             r v |       q                                      )   q rv|q    q rv|q    r    r|   )  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq     !q! q!&!*!- !2!4!7q!9!:!<!!!!!!!!!!!!!!!!!!!!!$q!&q!6!8!:!G!!!!!q! q!_!I!K!M!O!Q!S!U!W!Y![!]!_!o!q!s!q"" "" #q# q#&#*#- #2#4#7q#9#:#<#####################$q#&q#6#8#:#G#####q# q#_#I#K#M#O#Q#S#U#W#Y#[#]#_#o#q#s#q$$ $$ %q% q%&%*%- %2%4%7q%9%:%<%%%%%%%%%%%%%%%%%%%%%$q%&q%6%8%:%G%%%%%q% q%_%I%K%M%O%Q%S%U%W%Y%[%]%_%o%q%s%q&& && 'q' q'&'*'- '2'4'7q'9':'<'''''''''''''''''''''$q'&q'6'8':'G'''''q' q'_'I'K'M'O'Q'S'U'W'Y'[']'_'o'q's'q(( (( )q) q)&)*)- )2)4)7q)9):)<)))))))))))))))))))))$q)&q)6)8):)G)))))q) q)_)I)K)M)O)Q)S)U)W)Y)[)])_)o)q)s)q** ** +q+ q+&+*+- +2+4+7q+9+:+<+++++++++++++++++++++$q+&q+6+8+:+G+++++q+ q+_+I+K+M+O+Q+S+U+W+Y+[+]+_+o+q+s+q,, ,, -q- q-&-*-- -2-4-7q-9-:-<---------------------$q-&q-6-8-:-G-----q- q-_-I-K-M-O-Q-S-U-W-Y-[-]-_-o-q-s-q.. .. /q/ q/&/*/- /2/4/7q/9/:/</////////////////////$q/&q/6/8/:/G/////q/ q/_/I/K/M/O/Q/S/U/W/Y/[/]/_/o/q/s/q00 00 1q1 q1&1*1- 121417q191:1<111111111111111111111$q1&q16181:1G11111q1 q1_1I1K1M1O1Q1S1U1W1Y1[1]1_1o1q1s1q22 22 3q3 q3&3*3- 323437q393:3<333333333333333333333$q3&q36383:3G33333q3 q3_3I3K3M3O3Q3S3U3W3Y3[3]3_3o3q3s3q44 44 5-{66 6Y6Z6[6\6]6676<6>6@6666 6p7-{88 8Y8Z8[8\8]8878<8>8@8888 8p9-{:: :Y:Z:[:\:]::7:<:>:@:::: :p;-{<< <Y<Z<[<\<]<<7<<<><@<<<< <p=-{>> >Y>Z>[>\>]>>7><>>>@>>>> >p?-{@@ @Y@Z@[@\@]@@7@<@>@@@@@@ @pA-{BB BYBZB[B\B]BB7B<B>B@BBBB BpC-{DD DYDZD[D\D]DD7D<D>D@DDDD DpIII$I7I9I:I;I<I=IIIIIIIIIII$I&I6I8I:I;I=I?ICIIIIIII IXIII!I#I%I'I)I+I-I/I1I3IoIqIsIJJ JYJZJ[J\J]JJ7J<J>J@JJJJ JpKKK$K7K9K:K;K<K=KKKKKKKKKKK$K&K6K8K:K;K=K?KCKKKKKKK KXKKK!K#K%K'K)K+K-K/K1K3KoKqKsKLL LYLZL[L\L]LL7L<L>L@LLLL LpMMM$M7M9M:M;M<M=MMMMMMMMMMM$M&M6M8M:M;M=M?MCMMMMMMM MXMMM!M#M%M'M)M+M-M/M1M3MoMqMsMOOO$O7O9O:O;O<O=OOOOOOOOOOO$O&O6O8O:O;O=O?OCOOOOOOO OXOOO!O#O%O'O)O+O-O/O1O3OoOqOsOQQQ$Q7Q9Q:Q;Q<Q=QQQQQQQQQQQ$Q&Q6Q8Q:Q;Q=Q?QCQQQQQQQ QXQQQ!Q#Q%Q'Q)Q+Q-Q/Q1Q3QoQqQsQSSS$S7S9S:S;S<S=SSSSSSSSSSS$S&S6S8S:S;S=S?SCSSSSSSS SXSSS!S#S%S'S)S+S-S/S1S3SoSqSsSUUU$U7U9U:U;U<U=UUUUUUUUUUU$U&U6U8U:U;U=U?UCUUUUUUU UXUUU!U#U%U'U)U+U-U/U1U3UoUqUsUXIRXWRXYfXZfX[fX\fXfX%RX'RX7fXfXfX4RX5RX]RX^RXpfXRXRZIRZWRZYfZZfZ[fZ\fZfZ%RZ'RZ7fZfZfZ4RZ5RZ]RZ^RZpfZRZR\IR\WR\Yf\Zf\[f\\f\f\%R\'R\7f\f\f\4R\5R\]R\^R\pf\R\R^IR^WR^Yf^Zf^[f^\f^f^%R^'R^7f^f^f^4R^5R^]R^^R^pf^R^R`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`Raaa$aaaaaaaaaaCaa aXaaa!a#a%a'a)a+a-a/a1a3fIffWffYffZff[ff\ffff%ff'ff7ffffff4ff5ff]ff^ffpfffffhIfhWfhYfhZfh[fh\fhfh%fh'fh7fhfhfh4fh5fh]fh^fhpfhfhfjIfjWfjYfjZfj[fj\fjfj%fj'fj7fjfjfj4fj5fj]fj^fjpfjfjflIflWflYflZfl[fl\flfl%fl'fl7flflfl4fl5fl]fl^flpflflfnIfnWfnYfnZfn[fn\fnfn%fn'fn7fnfnfn4fn5fn]fn^fnpfnfnfooo")o$o&o*o2o4oDoFoGoHoJoPoQoRoSoToUoVoXo]oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooo!o+o-o/o1o3o5o<o>o@oCoDoFoGoHoJoo oWoXoYo_o`oboooo o!o"o#o%o&o'o(o)o*o+o,o-o.o/o0o1o2o3o4o6o8o:o<o@oBoDoIoJoKoLoMoNoOoQoRoSoToUoVoWoXoYoZo[o\o]o^o_o`obodofohojolonpRp Rppp")pRpp Rp qqq")q$q&q*q2q4qDqFqGqHqJqPqQqRqSqTqUqVqXq]qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqq!q+q-q/q1q3q5q<q>q@qCqDqFqGqHqJqq qWqXqYq_q`qbqqqq q!q"q#q%q&q'q(q)q*q+q,q-q.q/q0q1q2q3q4q6q8q:q<q@qBqDqIqJqKqLqMqNqOqQqRqSqTqUqVqWqXqYqZq[q\q]q^q_q`qbqdqfqhqjqlqnrRr Rrrr")rRrr Rr sss")s$s&s*s2s4sDsFsGsHsJsPsQsRsSsTsUsVsXs]ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss!s+s-s/s1s3s5s<s>s@sCsDsFsGsHsJss sWsXsYs_s`sbssss s!s"s#s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s6s8s:s<s@sBsDsIsJsKsLsMsNsOsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sbsdsfshsjslsntRt Rttt")tRtt Rt { {{ {")$q&*247)D\FqGqHqJqPQRqSTqUVXYZ[\]qqqqqqq\\\\\\qqqqqqqqqqqq\q\q\qqqqqqqqqqqqqqq qqqq!$)&)+-/1357<>@CqD\F\GHqJ WXqY\_`qbq\q \!q"\#q%q&\'q(\)q*\+q,\-q.\/q0\1q2\3q4\6q8q:q?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.notdefnullnonmarkingreturnspaceexclamquotedbl numbersigndollarpercent ampersand quotesingle parenleft parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon semicolonlessequalgreaterquestionatABCDEFGHI.altJKLMNOPQRSTUVWXYZ bracketleft backslash bracketright asciicircum underscoregraveabcdefghijklmnopqrstuvwxyz braceleftbar braceright asciitildenonbreakingspace exclamdowncentsterlingcurrencyyen brokenbarsectiondieresis copyright ordfeminine guillemotleft logicalnotuni00AD registered overscoredegree plusminus twosuperior threesuperioracutemu paragraphperiodcenteredcedilla onesuperior ordmasculineguillemotright onequarteronehalf threequarters questiondownAgraveAacute AcircumflexAtilde AdieresisAringAECcedillaEgraveEacute Ecircumflex Edieresis Igrave.alt Iacute.altIcircumflex.alt Idieresis.altEthNtildeOgraveOacute OcircumflexOtilde OdieresismultiplyOslashUgraveUacute Ucircumflex UdieresisYacuteThorn germandblsagraveaacute acircumflexatilde adieresisaringaeccedillaegraveeacute ecircumflex edieresisigraveiacute icircumflex idieresisethntildeograveoacute ocircumflexotilde odieresisdivideoslashugraveuacute ucircumflex udieresisyacutethorn ydieresisAmacronamacronAbreveabreveAogonekaogonekCacutecacute Ccircumflex ccircumflexCdotcdotCcaronccaronDcarondcaronDcroatdcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGbrevegbreveGdotgdot Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbar Itilde.altitilde Imacron.altimacron Ibreve.altibreve Iogonek.altiogonekIdotaccent.altdotlessiIJ.altij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotLslashlslashNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautOEoeRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexScedillascedillaScaronscaron Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflex YdieresisZacutezacute Zdotaccent zdotaccentZcaronzcaronlongsflorin Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccent circumflexcaronmacronbreve dotaccentringogonektilde hungarumlauttonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos.alt Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIota.altKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9Iotadieresis.altUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronpirhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonos afii10023 afii10051 afii10052 afii10053 afii10054 afii10055.alt afii10056.alt afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109 afii10110 afii10193 afii10050 afii10098WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveendashemdash afii00208 underscoredbl quoteleft quoterightquotesinglbase quotereversed quotedblleft quotedblright quotedblbasedagger daggerdblbulletellipsis perthousandminutesecond guilsinglleftguilsinglright exclamdblfraction nsuperiorfranc afii08941pesetaEuro afii61248 afii61289 afii61352 trademarkOmega estimated oneeighth threeeighths fiveeighths seveneighths partialdiffDeltaproduct summationminusradicalinfinityintegral approxequalnotequal lessequal greaterequallozengeuniFB01uniFB02 cyrillicbrevedotlessjcaroncommaaccent commaaccentcommaaccentrotate zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni1F4Duni02F3 dasiaoxiauniFB03uniFB04OhornohornUhornuhornuni0300uni0301uni0303hookdotbelowuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BF uni04C0.altuni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CE uni04CF.altuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7 uni1EC8.altuni1EC9 uni1ECA.altuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABuni030Fcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCcyrillicbighookLCone.pnumzero.osone.ostwo.osthree.osfour.osfive.ossix.osseven.oseight.osnine.osffuni2120Tcedillatcedillag.altgcircumflex.alt gbreve.altgdot.altgcommaaccent.altIIgraveIacute Icircumflex IdieresisItildeImacronIbreveIogonek IdotaccentIJ IotatonosIota Iotadieresis afii10055 afii10056uni04C0uni04CFuni1EC8uni1ECA   46latnMOL ROM  nlatnMOL (ROM B      ligaligaligalnumlnumlnumloclloclonumonumonumpnumpnumpnumsalt saltsaltss01"ss01*ss012ss02:ss02@ss02Fss03Lss03Rss03Xtnum^tnumftnumn    &.6>FNV^Pz2HJJ.,ZgwEG      !$%IJ6 "(^IO]ILI5O4LI^V0R *H C0?1 0 +0a +7S0Q0, +7<<<Obsolete>>>0!0 + έX[;&*렂]0z0b8%a&Z0  *H 0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0 070615000000Z 120614235959Z0\1 0 UUS10U VeriSign, Inc.1402U+VeriSign Time Stamping Services Signer - G200  *H 0ĵR`)J[/Kk5TX56^bMRQ4q{f*j 7٘tvJcEG.k NK+XJ,XB-uލǎlLgrIž`<cxi{-004+(0&0$+0http://ocsp.verisign.com0 U003U,0*0(&$"http://crl.verisign.com/tss-ca.crl0U% 0 +0U0U0010 UTSA1-20  *H PK$ $- 7 ,Za񑑳V@뒾89u6t:O7ʕBǠWdB5N3M'L8MxSݤ^ ⥾`߭(ǥKd[98"3/!?DA e$HDT\y>]r},CS}=*:Om ]^SWp`+nx'4[^I2300-GߍRFCmH 10  *H 01 0 UZA10U Western Cape10U Durbanville10 U Thawte10U Thawte Certification10UThawte Timestamping CA0 031204000000Z 131203235959Z0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0"0  *H 0 ʲ }uNgadڻ30X~k6xw~o< hlʽR-H=]_/kLR`@~ ?Ǵ߇_zj1.G 1s W-x43h/Š*Ë!fXWou<&]'x1"ijGC_^|}bM "Vͮv M٠h;004+(0&0$+0http://ocsp.verisign.com0U00AU:0806420http://crl.verisign.com/ThawteTimestampingCA.crl0U% 0 +0U0$U0010U TSA2048-1-530  *H JkXD1y+LͰXn)^ʓR G'/8ɓN"b?7!Op18UN$ҩ'NzaA*^ݻ+>W~ +;R8'?J00eeR&.Y)"\0  *H 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 090521000000Z 190520235959Z01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0"0  *H 0 g`IoV|f^ q-!ќPL"5; .Z|=;%X{ ξ'tag'MjaXy'M4+G Df$fO8TrfujIh8y 0,`Hת809:|@T/ܨR>+!\ P4.M^%Ԍn|)]1ZՌgX5+!`x^{`W ]A cT`C!00U00pU i0g0e `HE0V0(+https://www.verisign.com/cps0*+0https://www.verisign.com/rpa0U0m+ a0_][0Y0W0U image/gif0!00+kπjH,{.0%#http://logo.verisign.com/vslogo.gif0U%0++04+(0&0$+0http://ocsp.verisign.com01U*0(0&$" http://crl.verisign.com/pca3.crl0)U"0 010UClass3CA2048-1-550Uk&pȡ?-50  *H ݔAaix0Ɛ<~B$s/DrPU nQj71ܥ-OM2NgUejzd8xEv1z`³]fvYI8VAwX00fgymPSo0  *H 01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0 100729000000Z 120808235959Z01 0 UUS10U Massachusetts10 UWoburn10U Monotype Imaging Inc.1>0<U 5Digital ID Class 3 - Microsoft Software Validation v210U Type Operations10UMonotype Imaging Inc.00  *H 0Di|U 25L3^ L*8ט@I "SOCʋVnH9c;$5}rGWyˊJ@p-5cįפ {uePd"}KXEMYLM00 U00U0DU=0;09753http://csc3-2009-2-crl.verisign.com/CSC3-2009-2.crl0DU =0;09 `HE0*0(+https://www.verisign.com/rpa0U% 0 +0u+i0g0$+0http://ocsp.verisign.com0?+03http://csc3-2009-2-aia.verisign.com/CSC3-2009-2.cer0U#0k&pȡ?-50 `HB0 +700  *H N"gA~™cjrb<8=_G_[KI  VD 5< D`E*oL;4gpZ9\Zl5|eKmIp=b۴A~}n"w6MZ S1+(RzkwD ]%,͊0>KyʦN $ 񺐶\<'M'Yhް= nWAmzv("住K6,`'\K?n}鯕^FրcԣhDʝi͞zQn 3SB0|0{ *H  1l0h0g0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA8%a&Z0 +]0 *H  1  *H 0 *H  1 110505165510Z0# *H  1~-X `Ҏۅd0  *H CNENj㦈z C| rSRPfE᫒׋Ajz d55e+KX՟h`cmap)/hcvt Mfpgm~agasp#7lglyft8K%/headv<6hhea st$hmtx5<kernT+ ~U@6loca)4VmaxpC  names xpostCl@&+prepC !__< 51LL b  { V/\33f @ [(1ASC@ X H #5+3hq^R^=jVh?T!fd^+u^hj!!?hwho1y/ }s!}T#`'9;};}djmh{R3V1s^ss}sb'3qssDj91'R=hHh#?{h!{5dFRhTdmh1!=q!%LBP=K=.=o3 }ssss<T</;};};};};};}{s^s^s^s^s^s^^s}s}s}s}sqssssshss^s^s^ }s }s }s }ss/ss}ss}ss}ss}ss}s}b'}b'}b'}b'*T5TT #`3%''Y''/s;}s;}s;}sb}qDD`Ddjjdjjdjjdjjmmmh9{{RRRRRRs^^;}sdjj  -%o%!}/)'sR;}T9mH;}Jm{bj^mBP<{sZs qZss%FVqs3sss^/s s/ss)}djT<#`o/)wsJ9;} }mbjBD% =f3s^wm)}sD'ss)q1'-))9q%}smsj'7mh9h9h9{RRRJ\\?\={{F d%oRoP y'mbD?)w'5%BPf=G= =G=jf' Lhd%w bhhhoq';)93#Vy!TT\ 9qs^Ru3uu=}s%RS ;s}sfZm ^!# ?^m=}s  }}s}Bs}ws^}sju)))%/7/m#3=JDJ\D/#)/;}s }sm){{V')=F3=F3Td9;Ts^s^^s}suyfuyfJDJ;}s=}s=}s =97m)7/mR'1's1+s;NjPN/PN }s-)oZs^s^s^s-s^s^s^s^s^s^s^s^s}ss}ss}ss}ss]}Js}ss}ss}sT{T;}s;}s;}s;}a;}s;}s;}s=}s=}s=}s=}s=}s%R%R%R%R%R{{{sqqhyyyh1-4s-)^u^hjmZ\mqqqqq;;;;;;;;;V;^; 0HI~'2a7 # O_?M   " & 0 3 : < D p y  !!!! !"!&!.!^"""""""+"H"`"e% IJ(3b7 #P`>M   & 0 2 9 < D p t  !!!! !"!&!.!["""""""+"H"`"d%aIvhcb]gD Xz}} Bvt n%"iOS0L\pr`<&'()*+,-./0123456789:;<=>?@AIJ$%TUVWXY\]^_`abcdefhijklmnopqrstuvhijkFopqrstu45]^@G[ZYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! , `E% Fa#E#aH-, EhD-,E#F` a F`&#HH-,E#F#a ` &a a&#HH-,E#F`@a f`&#HH-,E#F#a@` &a@a&#HH-, <<-, E# D# ZQX# D#Y QX# MD#Y &QX# D#Y!!-, EhD ` EFvhE`D-, C#Ce -, C#C -,(#p(>(#p(E: -, E%EadPQXED!!Y-,I#D-, EC`D-,CCe -, i@a ,b`+ d#da\XaY-,E+)#D)z-,Ee,#DE+#D-,KRXED!!Y-,KQXED!!Y-,%# `#-,%# a#-,%-,CRX!!!!!F#F`F# F`ab# # pE` PXaFY`h:Y-, E%FRKQ[X%F ha%%?#!8!Y-, E%FPX%F ha%%?#!8!Y-,CC -,!! d#d@b-,!QX d#d b@/+Y`-,!QX d#dUb/+Y`-, d#d@b`#!-,KSX%Id#Ei@ab aj#D#!# 9/Y-,KSX %Idi &%Id#ab aj#D&#D#D& 9# 9//Y-,E#E`#E`#E`#vhb -,H+-, ETX@D E@aD!!Y-,E0/E#Ea``iD-,KQX/#p#B!!Y-,KQX %EiSXD!!Y!!Y-,EC`c`iD-,/ED-,E# E`D-,E#E`D-,K#QX34 34YDD-,CX&EXdf`d `f X!@YaY#XeY)#D#)!!!!!Y-,CTXKS#KQZX8!!Y!!!!Y-,CX%Ed `f X!@Ya#XeY)#D%% XY%% F%#B<%%%% F%`#B< XY%%)) EeD%%)%% XY%%CH%%%%`CH!Y!!!!!!!-,% F%#B%%EH!!!!-,% %%CH!!!-,E# E P X#e#Y#h @PX!@Y#XeY`D-,KS#KQZX E`D!!Y-,KTX E`D!!Y-,KS#KQZX8!!Y-,!KTX8!!Y-,CTXF+!!!!Y-,CTXG+!!!Y-,CTXH+!!!!Y-,CTXI+!!!Y-, #KSKQZX#8!!Y-,%ISX @8!Y-,F#F`#Fa#  Fab@@pE`h:-, #Id#SX<!Y-,KRX}zY-,KKTB-,B#Q@SZX TXC`BY$QX @TXC`B$TX C`BKKRXC`BY@TXC`BY@cTXC`BY@cTXC`BY&QX@cTX@C`BY@cTXC`BYYYYYYCTX@ @@ @  CTX@   CRX@ @@ @Y@U@cUZX  YYYBBBBB-,Eh#KQX# E d@PX|Yh`YD-,%%#>#> #eB #B#?#? #eB#B-,CPCT[X!# Y-,Y+-,-@ !H U UHU?MK&LK3KF%&4U%3$UJI3IF%3UU3U?GFF#3"U3U3UU3UOU3UoTS++KRK P[%S@QZUZ[XYBK2SX YKdSXBYss++^stu+++++t+st+++++++++++++st+++^NuHQw{jA_t[F4DdA  U  9 l  V , y $ K 6Or$yT(f'O(hGKSGcEl{+7HYj|*;L]n  * ; L ^ o !!(!8!H!X!i!z"""!"1"A"R"c"t"""###/#?#O#`#$ $$,$<$M$]$$$$$%%%%0%@%Q%a%r%%%%%%&:&K&[&l&|&&&&&&&&' ''*';'G'W'h'y'("(3(D(U(f(w(((((((()) ))L)])n)y))))))*-*>*N*Z*e*v***+'+8+H+Y+i+{++,i,z,,,,,,,,----.->-I-T-e-u-...%.6.F.W.g.y........///+/;/L/]/n/~//0w11'181I1Y1d1o111122T2{2233N3_3g3x33333333444"4*4244444455525:5q5y5556<666666677k788g899L999:,:4:_::;;\;;<%<]<==_=====> >>o>>>>>>?S???@@7@?@@@@@A,AAABBVcVVVW2WbWX,X>XPX}XXXXYY!Y@YuYYZMZnZ['['['['['['['['['['['['['['\q\\\]l]^ ^^-^9^E^W^^^^_@__`1`:`C`L`z`````aNaab;bbc?ccd,ddeiefg0g8g@ggh/hghyhii iijk;kl:l}lmm3m`mmnooop1ppqCq{qrrUrrsssPssttXttuu]uuvvsvwBwwwxx4xPbtӋ -BVbnÌՌ /AVj{͍ލ&8J\nɎَ (4@L]nҏ #4EVfrj‘2{͒;DNޔ nzqǖؖ .?J[gyΗ /2/3/3/310!!7!!IhyJh+@   OY ??+9/933310#3432#"&Fi3x:?@94D#FB@G?@  ?32993310#!#?(i)+)h)3@U     !  ! NY NYO O   /3?399//]]33+3333+339939939939223910!!#!#!5!!5!3!3!!!BTTRPD+RR1TT/BRRTLLT  &-f@5'%* ! ./%  MY$*LY*+MY*//99//92+33+33+3933333333310#5"&'53&&546753&'4&'6 ̷pCSYͥ˧4JYZocf#%/AE; N2_{eHY,{L\)]h- !-1E@$ ("".( 023 + + +010%?3?3??99//33933331032#"#"&5463232654&#"#"&54632#JSSJʙJTTPPTTJ˙Փ+TR۫ Jq 5Q@0#*+.+-#& 673 IY3'-0/&** / JY ?+?9/99?+93333106654&#"27%467.546326673#'#"&HWegVYoKo\,U=$į8CD+vE}XKSMa`DYfAuf_bj9k]y>cݲj\??9310#?(i)R! @   '??99331073#&R1 ή26=  @    '??993310#654'3 1:1V0@    ?29333910%'%7++uo^j^Foh) (@  PY/]3+3933310!!#!5!3dfV?m /9910%#67^b5}A drh2\T?q/399105!T٘ @  OY ?+931074632#"&=9:AB93CjCEECAF???9910#ߦ!Jf- (@  KY KY?+?+993310#"3232#"-ᖤr~r~';;% $@    ??9/9993310!#47'3ˢ4Xt.r+d%+@ KYLY?+?+93310!!5>54&#"'632!%?p8~[dXSu+8% =1*"% BC55FY;GY "***GY*(?GY(.GY?+?+?+99//99++993333310#"'332!"&5467&&5467&&5463232654&##"3254#"1,1+jJZ²t*9@EUkVEnq~Ztu~Hi#qG8U-+dP59UlKHDJA,>85GF4@  GY@FY?+?+393310%267# #5773!!,Ri*F`>^u  OPE{cj9H4@   FY ??+?393993331032653#'##"&5Lz 3tH9@QVH @   ??399910!3363`P u̲`HvD5M0#H,@    ?3?339933339910!&'##3366733663/4(ծjo 1ɴ8#;ѯ_HcPK95uu$'H "@  ?3?39991033##! ʼ1\DH$@  FY ?2?+991033663#"'53277O S)FLJ7DI=H_3|  RmH +@ GYGY?+?+93310!!5!5!!mV]qV=,@  '??933333310%&&54ᘡ463uq~xtض f\/hY\`2' '{@ ??93103#H,@ '??933333310&54'52"5665467 vz~;otnq?''a[Yhљ\f)rxhP)T$@ PYPY/+/+9910"56323267#"&'&&R56dDqYBb/66fH~HKZC6m&@9n! ^+@  OY "??+9/9333103##"&54632i3y<@      ??99//333393333310%#5&5%53&#"327iK11m6 >!3;?DH@&   NY LYKY?+?+9/3+393333102&#"!!!!5655#5346={}ZAJTM|d,/<{' @ "()%/33/399331047'76327'#"''7&732654&#"J^hf_JJ\fd\Jttrtzk\II\qvg\GI\k|pqrqV@.        ??399//]9223333933333103!!!!#!5!5!5!3H{`=ä<e {$@ ??99//9333103#3# {1=C@&2*8 #>?;6-! !'GY! GY ?+?+99333310467&&54632&&#"#"'532654&&'.7654&'VNJT^a5bLtt{RJڀNR0lsB1DU)V%(oUy'';@54&#"'632!YR!P?4bEBYJhVaL6DE&2XopP!9#9@" $%]mL ! !?3?39/]]]39310#"'53254##532654&#"'6632sRDt{uwgcPCBp8E?^Pg/8{DkOD=D+#Z-6w!    /99106673#0o ,@o>AA4DH5@  FY  ??+??399333331032653#'##"'##3V oX }@\T4q`'@ /3?39/93310####"&563!`rs>T-P3LZ @   OY/+93104632#"&>8:AB93CBEEBAF?%$@ /29/393310#"'532654&'733--;OQOmXn7aj j(6+5s'LJ @  ?2?9/9933103#47'R6CC[Z-_`B %@  ?3]2993310#"&5463232654&#"[hi\\ig\ozzzz{vvPu #@   /3/393310'7'7uuXuuuX iG_^EiiG_^EiK'&{< ?55.'?&{tN?5!&u'<m +?553wT^(A@"##)* && OY& IY#?+?+9/_^]9333103267#"&54>76655#"&54632NKay=zPb;ƾ#@Y6eAy;>B73F3zTjKM8dq&0`FiYR/Xt]+EB@G@s&$CR&+5s&$vR&+5s&$K#R&+5/&$RR&+5%&$j7R $&+55&$P9N@,   IYIY IY  IY?+??99//+++33933310!!!#!!!!!!#DTv/)}&&zs&(CR &+5s&(v?R&+5s&(KR&+5%&(jR !&+55<Vs&,CR &+5Tss&,vaR&+5s&,KR&+5<o%&,jR !&+55/H W@2 IY?  JY JY?+?+9/_^]3+39333310!!#53! !#!!3 Hw{Q|{b@ ?/&1RR&+5}s&2CyR&+5}s&2v R!&+5}s&2KR&&+5}/&2RR!&+5}%&2jR -&+55  @    /993310'7`^`e^dacc_c``e}#N@,  $%! !IY IY?+?9+99933910!"''7&!27'32&#"exl`Dѝaxjn`s'ejndOme^PLR2*Is&8CFR&+5s&8vR&+5s&8K}R &+5%&8jR '&+55{s&<v1R&+5y 6@  JY JY ??99//++99333310!##33 32654&##yḪʾꏤ0A@")*# *12*..&FY.*FY?+??+9/9333310#"'53254&'&&54676654&# #4632X8GNf³k?HSn`EGK@sFC! *93_eE'/KkFR{T?j59Z5PUL^!&DC&&+5^!&Dv+.&+5^!&DK3&+5^&DR.&+5^&Dj :&+55^&DP (&+55^s\)4;a@3*$08090 <=-'-FY11GY8$'"'5FY?3+3?39/993+3+39333399310467754&#"'66326632!!267# '#"&732655"!4&^tw4Jb)5nC:[TVe}QņkXy /D{T)5W_X`ku#'&!j_Ycm2s\&FzFs!&HC&+5s!&HvN$&+5s!&HK)&+5s&Hj 0&+55c!&CQ&+52!&v  &+5U!&K&+5&j &+55qb!&J@+!  '( FY  $FY?+?39/99+933310#"54327&''7&'774&# 326bd9I\^EfLϘ3 yֿl>1uIKkwr蓪D&QR&+5sb!&RC&+5sb!&RvV"&+5sb!&RK'&+5sb&RR"&+5sb&Rj .&+55h)3@  PY/+3/33/39333105!4632#"&4632#"&h;64:;34=;64:;34=<=?:9@?<=?:9@?sb#K@)  $%! FY !FY?+?9+999339910#"''7&327&#"4'326bpTr^ tTua5Kr3/Gq%EuN +LwLf5Ԥd}39!&XC&+59!&Xvq&+59!&XK#&+59&Xj! *&+55!&\v&+5u">@ $#   FY FY?+?+99??993333106632#"'##3%"3 4&XBjz H/YOӡ"M?5.4Z)&\j +&+55&$M?R&+5^b&DM(&+57&$N+R&+5^&DN%&+5B&$Q^BZ&DQ}s&&vR &+5s!&FvD &+5}s&&KR%&+5s!&FK%&+5}1&&OR &+5s&FOP &+5}s&&LR"&+5s!&FL"&+5Xs&'LXR&+5s&G8 #?5/Hs'd@7%()GY/    "FY FY?+?+99?9/_^]3+3?933333310%##"323&55!5!533##%26554&#" sw @&,SI%w#&(MR&+5sb&HM &+57&(NR &+5s&HN&+5&(Oo5&+5s&HOT$&+5B&(Qssa\&HQfs&(LR&+5s!&HL&&+5}=s&*KR*&+5'1!&JKP&+5}=7&*NR&+5'1&JNB&+5}=1&*OdR%&+5'1&JOK&+5};=&*9''1!&J:DF&+5s&+KR&+5D&KK%&+5T@,   IY JY ?3?399//33+33+9333333331053!533##!##55!ɪȪuP1DY@2   FY GY   /    ?3?9///]3+3+3933333310!4&#"##5353!!36632z? 1tT8O[\/&,RR&+5x&R &+5*&,MR&+52b&M&+57&,NR &+58&N&+5TBV&,Qh5B&LQTV1&,OPR&+5VH@ ??9310!#3VHT&,-l&LM`es&-KR&+5O!&7K&+5;&.9;&N9+F /@   ?3?399333103##3/b FqyFqs&/vcR&+5,&Ov &+5;&/91Y;W&O9&/8 ?5&O8+?5&/Og&OOB8 =@!     IY?+?99//99333103'73%!iC)C;reFy<' 7@      ??99//9339333107#'73VHѦnF`^p?THqw ?s&1vR&+5D!&Qvy&+5;?&19;D\&Q9V?s&1LR&+5D!&QL &+5'Q?5?8@  IY"?+??3999333310"'53265##33&53b6GSijzoN=XD\8@ FYFY?+??9?+933310"'53254&#"#336632%V7<>z 4nnjyHRX}&2MR&+5sbb&RM&+5}7&2NR&+5sb&RN&+5}s&2SR +&+55sb!&RSZ ,&+55}S@.  !IY IY  IY IYIY?+?+?+?+9/+933310!!# !2!!!!!"327&f\\@fZ'MDpWWjh)!uqZ*1U@-%/%23+( (FY.FY .. ""FY?3+3?39/99++393399310 '#"326632!!26732654&#"%"!4&}>щ>:~'J^WX!G  tw1 ,wrpyiw#'' 9ؤs&5vyR&+5'!&Uv&+5;&59}`;'\&U9s&5LR!&+5'!&ULv&+5js&6vPR.&+5js!&Vv.&+5js&6KR3&+5js!&VK3&+5j&6z'js\&Vzjs&6LR0&+5js!&VL0&+5;Z&79;F&W9Zs&7LR&+5&W8b?5Z?@!   JY IY?+3?9/3+3933310!5!!!!#!51H16ʪ/^FL@)  GY GY @FY?+?9/3+3+39333310%27# 5#53#5773!!!!U< j*ȍF`>-u\PE/&8RoR&+59&XR&+5&8MR&+59b&XM&+57&8NR&+59&XN&+5&8PR &+559&XP# &+55s&8SR %&+559!&XSh (&+55B&8Q!BeH&XQLs&:KTR(&+5#!&ZK+&+5{s&<KR&+5!&\K$&+5{%&<jR &+55R?s&=vBR&+5Rm!&]v&+5R?1&=ODR&+5Rm&]O&+5R?s&=LR&+5Rm!&]L&+5 @  FY??+39310!#!2&#"Vg`d+WIaY%{z D@$  !" FY FYFY?+?+9/3+3933310"'53265#5754632&#"!!HE@F=_MޢUxfy! @    /329106673#%6673#$n%:ae1e%:`0E?0D:?0s   /99106673#5 m1dHRJL +@  !"   /399//393310673#'4632#"&%4632#"&A!y3P4&)17#&44&)17#&4C=4.4.21124.4.211 &$T ?5LZyu &(}T?5 '+T?5D ',T?5 &2DT?5 '< T ?53 &v?T#?5&U .&+555$%@IY??+99310!#{'m((R?=+}?@   IY IY IY?+?+9/+99339910!!%! ! 32#"u`D;bs3?nhep0,*.TV,. @   ?3?99910!#&'#3ӶW!GZ^q0?1H% 4@  IY  IY IY?+?+9/+910!!!!!5Ru#Hy}2 #@ IY?3?+993310!#!#! Ch3J\ 5@   IY IY?+?+3933310355!!'!J+\`To+Z7{<j"+P@)' +,- **JY"$$JY??99//3+3+339333333310332###5#"$54663332654&+"33۬F)-Cι:9˴EùԷ;m>@  IY ??339/3+393333310!##"&&5333332653##-ϰ-z!dƻ{P9@    !IY  IY?3+333?+93310"!5!&5! !!5654!lb:;bk5v^6`xN<o%&,jR !&+55{%&<jR &+55ss&~T4&+5Zs&T/&+5Ds&T;&+5s&T&+5q&U; 4&+555s\ *G@$ '"+,'(( FY FY$ ?3+3?+993?9333310%26554&# "323673327#"&'#Pѓy6 )T!.AQY ;wPԋ) )TT\8BtIr wQVVQ)L@('"*+#"FY## FY FY?+?+99//+?93333102#"&'#46"32654&##532654&ymO䞝]Vp\з3*&41%{ H!@ ??39/3910#4733>3@+?^)+k05`&r,OBGo[sұsJ5٠Z\%M@+# &'%%FY%% %% !FY FY ?+?+9/_^]+993310# 3267#"&54675&&54632&&#"!˔ɓTdnbkad?^O=Zb'/Kb) \!-*so 0@!"#FY?+33?9333105!#654&'&&54>7!;}}o˼;p(ߦbvI%m[k8=$rD\/@   FY  ???9?+99333104&#"#336632z3qHQYIsJ+ I@'FY  FY  FY?+?+9/_^]+99333310#"322!"!Jy   jvk13)H@ FY ?+?993103267#"&5NIW%ei2Hhe   FF!"3@$#FY FY ??+93?+3910#'.#"5632327#"&'&'#:2C1:9D?[yX6k*#!0=JST X7UF$ < 13 yLS`tDHwH@  ?2?9993103363#SHC>Qqo1I@'- (%2300GY00&)%&%FY&#??+39/+99333310#"#6654&'&&54675&5467##5!#"33V2_T6C5BsǞًsD3Pb=$nZAcG47="Ȱ' @u2 P_slsb\RH6@    FY FY?+??+3393310%27#"5!##57!#}&0+T#ݏL3uFJDŶH,@ FY FY ?+?+39310!3267#"&5!57P/b#o0הH }JDqH%@  FY?+?3993310"&332654&'3s覞"$ X֌sL\"A@#   #$FY  FY??3+3??+93333310$746324&#"66σYQhڈy|fIN #(Zu|u#l&'xrPN 9@!"! FYFY?+??+?9391023327#"&'#&&#"566N>,>T0R?--<;s;Ь&F+%1N+[pazJvhDcP =@ FY ??3+3?3?933333106654&'3#$3Z%?ix& " sH'=@ & ()& FY#?2+3?39/99339310"54733265332654'3#"'#7DD9xk^ij]kx7EA9˶D A(؏}7ɀֶ &j %&+55q&j9 +&+55sbs&RT!"&+5qs&T'&+5ss&T1&+5%&(j'R !&+55BF@& IYIYIY?+??+39/+933310"'5326554&#!#!5!!!2`67[ehC|pq^s&avZR&+5}8@ IYIY IY?+?+9/+93310"!!327# !2&B)  ɡyNG379m_XRj6TV,<o%&,jR !&+55`h-##G@& $%#IY IY JY JY?+?+?+9/+933310!!!#"'532>!3 32654&###9TPkE@2?0A+7DAz:LƷfHy>gM|TJ@&   IY  JY?+??39/3+3933333310!!!#3!33 32654&##T}y9NĹfPnM}B:@  IY IY  ?3?9/++3933310!2#4&#!#!5!! ٪}}}~qs&vR&+5^&6DR&+5  0@  IY"??3+?3933310!!#!3!3 />}$} =@   IY IYJY?+?+9/+933310!!!!3232654&##}T^Ltᆳ'YTx%aJ C@$    IY " IY?+33?3?+93333310#!#3!3!!Jq Ή}3Y(<@    ?33?33933333933310333###V9:R<<<J5(C@$# )*JY &&JY& JY ?+?+9/+993310!"'532654&##532654&#"'6632`gᢉnuTe`O.2k2JrKMR4@   ?2?3993399333310333#47##˟4 ˺J%5R^&6R&+5 -@  ?3?399393310!##33\y<:-@ IY JY??+?+93310!#!'"'53266!٪%=]~J;6;5O=]8!EWYq0+}2 nh3}&Z7*@    IY?+?3993910"'5326733673%oT]`nBǼ g-T+eA1/T5껪Ojs; 2@  IY"??+3?3933310%3#!3!3 漢}-@ IY ??39/+9933310!##"&5332673Ǫjߪa\5'Eyt7y 1@  IY?+3?33933310!!3!3!3yPXX;@  "  IY?+33?33?933331033!3!33#ɪGH} =@  IY IY JY?+?+9/+933310#!!5!3 32654&##G~  ?@  IY JY?+?39/+?9333310333 #%32654&###3ɪܑ{R 2@ IY JY?+?9/+9933310#!3! ! 4&#!# +l =:@ IY  IY IY?+?+9/+93310"'632!"'53 !5!&ӬH9Sc13LTl9"!G@&     IY IY  IY?+??9/+?+93333310! !#3!! 32#" dQ3VqoUP7No2**.3N =@   JY  JY  ?3?+9/9+933310#&&54$!!##"!3{㷾{b3ϞJb~^ZDwT!";@ $# FY FY??+9/9+39333107$736632#" !"w >k1Lu h2=&:"!T`bs?h7LHI@&   !FY FY  FY ?+?+9/+99333310#!! 4&#!! 4&#!!26){o1{}~5ko ~oHYQPCLDH@FY??+99310!#!DFH)hH C@$    GY " FY?+33?3?+93333310#!#36!3!#hV+ l{ G69s\HF<@        ?33?3393333393331033###3Ŷ67F++3D\"M@+  !#$"!"!FY"" "" FY FY ?+?+9/_^]+993310 54#"'632#"'532654!#57M~f;ɽ~t큷ɘ*L9%gGVc]bH 4@      ????999933333103#77#LQϛHI9\Hb &6=&+5 H -@    ?3?3993933103##3/' H+HH-@ FY GY??+?+93310!#!#"'532!`v6 s#^ {/F5@  ??3?399399333310%773##&'#3+)ӓ:5+]v:JKwFInbH 9@  FY/?   ?3?39/]+99333310!3#!#VfH5Hsb\RHH#@ FY?3?+993310!#!#!VHu\Ss\F)H$@ FY??+39310!#!5!jFH\qFL@'     FY FY??3+3?3+3?9333333310#&5473%66Fٰ{%$.&DT''H[H 2@    FY"??+3?3933310#!3!33ݦyF{HGG-H-@  FY  ??39/+993331032673##"&5B[iiqHp8CH;oH 1@   FY?+3?33933310%!3!3!3A妏HG F;@    FY "??+33?339333310%!33#!3!3榝N妏IyFI)H =@   FY FY FY?+?+9/+933310!2#!!5!4&#!! -9%L|9]SyH ?@   FY FY?+?39/+?9333310!2#!3#3! 54&#V+9#zHH\TLH 2@  FY FY?+?9/+9933310! #!3!2654&#VR@ˢH\][U9}\D@&   FY    FYFY?+?+9/_^]+93310"'53267!5!&&#"'663 Vv<[ )g/7P 9$6#3\Q@-     FY FY     FY?+??9/_^]+?+93333310#"'!#3!663232654&#"3ᦦ!% H5%H =@    FY FY ?3?+9/9+9333103#&&5463!#!!!!";ʵ zNrs&Hj 0&+55D'f@:%%()! FYGY/ !!FY?+??9///_^]3+3+3933333310"'53254&#"##5353!!36632/O4:7zo 1tɉRT8O[D!&v&+5s\D@& FY  FYFY?+?+9/_^]+93310"32&#"!!327yR91m) t#* 3;9js\VfL&j &+55fMBHL@) FY  FY GY FY?+?+?+9/+933331032!!!#"'532!4&##3 Ke(8 s#P}> {[UFJ@&    FY  FY?+??39/3+3933333310!2!!!#3!3 54&#N` F;F7\TD !&v3&+5 &\6&+5FF 2@   " FY?+3?3?933310!!3!3!#/JFI#@ IY??+9933103!#fk-:D'@ GY??+993310!#!3D9HALs&:CR&+5#!&ZCs&+5Ls&:vR#&+5#!&Zv&&+5L%&:jdR /&+55#&Zj 2&+55{s&<CR &+5!&\Ca&+5Rq/399105!R\٘Rq/399105!R\٘Rq1N@  /3/3333210!5!5!5!NRR1D ?9910'673% b8{B%Z yD ?9910#75b5zF dr?mF ?9910#&'7%B{-m^e@   ?32910'63!'6738z{; b8{B%saZ y@  ?32910#7!#675b5zF '`8}B dr[zd4] 8 @ H H H+++55{ C@!     ?.333?9/333933333310%#53%11L11`_{u@:          ??99//9922333333333393333333333333310%%#553%%9a11Z++Z11a+{+|^  /93104632#"&qlitsjkry~|{w&'%d ; $/;F[@0 0B6<+%%+<B GH33(? "99-D D D?3??99//3333?33393333331032#"#"&5!2%#32654&#"#"&5!232654&#"#"&5!2S]]S8iՔ+S][YY[]S78Q][YY[]Q뢛8TRJݫ? Ru@ //993310RVw!w'EGPu@ //993310'7uuX iG_^EiJ&y??3310#yJm!&@    ?2?399333104&#"#3363 LNPr[t` K!TGizXeTb#K@(  NYLY LY ??+99//+3+39333310!!##53!!!!4̦D +DH%p@@ "  &'NY  ! NY !!!?!O! !!LYKY?+?+99//_^]3+33+39333333102&#"!!!!!!5655#535#53546ɞb4@4ȹRu}PEӁGMR?&q@? $ '( NYNY/ ""LY"LY?+?+99//_^]3+33+3933333310 !!!!327#"#53'57#5332&OA%˪.'$ɥG5m9@-BA *,P$aV +E@$% *  *,-# '  ??99//33?3?39333310##"&546323254#"%"&54632&#"327Ք+ʦhX!QPbZNJ۱#g!e%w$=@#  %&#     /3/399//99333310%273#"&5556746324#"$}_``NruίRC>oզ#q&򊟡Jh{+VlK'+_@1  "+(,-% ((()JY(?3?3?+99//9933933333310!###33&53#"&5463232654&#"5!ǻL"Q][OO[\RVl:Grvusspp %O@'    ?229/33333333393333310##5!###33#7#q{Xw˴gjj/R//PvfH4@  ! /?/2/39/]93933310"&546632!3267&&#"y1RQHbٓ2Xz#5Fi)|5BuG'\&{@` ?555 ''@uu ?555G'&= @q ,?555j'F'@m?1 ?555f5(A@"&)* "GY FYFY?+?+9/9+933310#"&546327!"56632267&&#"5쭬a+>0/J_xPeee53]KZ,!%Ɛalv'm (@    IY??+999331073!!&'Ϧ!=(DhNfy!#@ IY?3?+993310!#!wX ZL 1@   IY IY?+?+933331055!!!Lw@Ck3lh)@ PY/+99105!h%@   //9/933310##5!3o!Tw- !-3@ +% ./" ( /333/3993393310#"&'#"&54632632267&&#""32654&-]AJ;=:᰻jb-/p@@(10'PY/ *@*$PY*@PY/ @ PY /]+_^]++_^]+993310"56323267#"&'&&"56323267#"&'&&P69lCpXM[-56eCoXI[195jEtRE_173dEvOTU@9n%!B9m%D5m "B7n !"h)F@&  PY  PY/3+3/_^]3+393310!5!!5!!!!!'}T-}m}97h)&+t ?55h)&!+t ?55o= @  //999933103# oHh{"&SYNX)h )9#6@! %$ !?3?39/]93933310632&#"36632#"&2654&#")J14S qU}DQcXVUpjr+;~c]cO[Z;Y|9J@  ??39310!5!^9VJt^39"-?@" &+ ./ )))) !#?2?39/]39993333102#"&5467&&54632654&''"654&d|IUJ95TVZT]QHFDKDQNvhLJqtEt..]Df~farT #'+/37;?CGS[kt|@A@=<10 TNXHvkp`zgED)(%$ ;g`87/k4,H# N  *BZQ\t\)AF>duulE=}VKkvk&2%1 BA>\=l 12k \lkkl\-, 9854! /333333333/3333333339///999999333322339333233933333333333333333333333310!#%5!#533!5353!5!!5!5!#3#35!#35!35!#35#3#3#"&546323254#"%32##32654&##32654#"'53253T/0momImmmm0oowoooomm~smp.,=.m^{B.$*/;J1%Z^4+V}i0oo/mmmmmmoo;mmJoooo/yhIaCS1BD5QYb" "+%J fVr_cT*.@ % +,(""//9///33910 54676654&#"63232654&#"TV,AgIOGRZ?>1HT;GFBIHCHEVW/2A1R~X8*P:/5K6DpJ;?HI>@IHW!&7L&+5D +-6f@9 4%.+-% 78GY!.!GY+... ..((1FY(FY?+?+99//_^]3+3+933333310! 47654&#"'6323 4'&$&546323%&#"Vw$ 6!S_X]wɠ*{]aN.AnX9{z/# v']]#:p?,iׁ_K{(@ JY?+??993106632&#"#39zM\:0((;V|e##7l08U/wH)L@'!!' *+ FY$FY?2+3?+339/99339310"&54!57!##"'#32655332654')LJuȹDD?Blu]lk]umoJD綶΄g}zqu&0vT&+5!&Pv-&+5&$[5^Z&D[&2\G ?55u5 @   /32993310#"&546324&#"3265}fexxee~nB33B<95@axubbuva9<<98==h@    /9310673#%47#"&F)w1Ny%]7CzN9v=H)5JD'I&ILm'I&IOm}d!<@ "#  IY IY?+?+999333310! ! >5332#"aCE2:h`uqjh Cfi'1+'1s"<@ #$  FY FY?+?+999333310#"&532>5332654&#"b| ى3:yfG%ӊ +Acn&{3@   IY?+?39999333310>53! 533265:F!ԪƸ>pnFD@"    FY??+?3939933333310326536653#'##"&5LzRJ  4oF;>y RUS!C !vRs@   /23339310#'6654&#"563 s i VNCI> &E׌"q2++)d ;}  /33104632#"&;;*(::(*;9669777s&(CR &+5Rs&ChR&+5s!&HC&+5b!&C&+51E@$"*'/ '23IY((,%%IY ?3+3?39/9+3933310"'632#"&'## 32&&#"327332<^-E~lSPk|F-]<ϻffΥ/)Pa-32.wSxP)L7LK0 (H(@   ??339?910#33663363#&'  .J - ۶}!3HI]5$,RZ\L@( IYIYJY?+?99//+3+393333310!3!!3 !!!32654&##?^1hڶdf+z'G@&    FYFY  FY ?+?39/++393333310!!! #!#5353! 54&#X?!1Hͦ\T! J@) !"IYIY IY?+??9/3+3?+933310"!!327# !#3!%2&&= ˜dq0նHd379pTP3N\0&\!Y@2   "# FY  FY    FY?+??9/_^]3+3?+93333310"'!#3!6$32&#"!!3267w ᦦ! Q62e =wbn H3 3%9m 4@   IY  ?33?9/9+39310####3#!'&'߲hg\LR8@VVJ?ϐdb yH 5@   FY  ?33?9/9+39310#####!&&'#Ѭqsͬ!+8" HH-lj\^F@%    IY    ?333?39/93+33933310####!#3!3#!&'"_ff>v #PPPnJH5V/ChHM@+    FY/? ?333??9/]93+33933310#####!#3!#!FΪqnѬߦ^h Y HH3s"_"K@( !$#!!IYJY"?33?9/33+3+99933310#.####"#>75!)Zvd2#DeY[cA /cve {H;o`&B'_o7şI9 H #N@*!"%$" "FYGY# ?33?9/33+33+99933310#.####"#>75!WoI1":TL KR8'0InW %Hi0PiqPWG @^P=iO2`i$'a@5!&#'%'"# )(#$&$&IY!IY'!!$?333??9/33+33+99933333310#.####"#67!#3!5!=]xe-Fi_^dB!78Rh {H;hc(D(_l7:P酙7H$'g@:!&#'%'"# )(#$&$&FY!FY'/!?!!!$?333??9/]33+33+99933333310#.####"#67!#3!5!1XoI0":VJ KT7&/%ͦ5!%Hi1NirPVF?\Px(H5bi?N5K@M!?FF ?7C<*-( LMIJYI941../. .*@CJY<**$JY* IY IY# IY "?+?++?+39/+9_^]92?+933310327632&#"#"&5467665!#532654&#"'67&''536632&#"WYaxxFGPDiii̵@ᢉjnV9u1{\\@20+,o0抆72'3}~  k7ErrBy4;sVq RG 7{NF@N)6 . >2@<) GHD>AGYAA/A A>&FY#FY3232FY!#& >>8FY> ",GY?+??3+9///+9++_^]+99333102&#"32772&&##"&5467$54&##53 54#"'67&'53663-)/g-z]m0KYVz}'T7\Nw7JX;|~\g{KXNp O>k9Gʔ*,1+'wpt}aZ"$7ub4nUmu} G@%IY  IY  IY?+?+9/_^]+99333310! ! 2!"!&`D;ba + nhepD sb\ I@'FY  FY  FY?+?+9/_^]+99333310#"&532267!"!&&b|  i %ӊ +MXH @JY ??9?+3910"#367>32&;N9RH# F;TnY*O87gVǏA=R@ GY ??9?+3910!336>32&#"jdR`%G[T-&/:Hdv 5z{4 T\Hs&vR !&+55=!&vd "&+55}  .D@& !.'/0%*JY%  IY IY?+?+?393?+93310! ! 32#"%33663#"'532677TC,#EoN S+ELJ7B^u#=ohfp1+)/Af,  gYs{\&R\u}-(Q@* & "" )*$"& &IY IY?33+33?33+339333333310#"'$%6326632654'#"'w|+|y -!ʽI6nʽnqs,oo)61,ll,s)0&V)1/'XV's-P@*  +%#  ./(%++FY  FY ?33+33?33+33933333310#"&'&54766326632665%#"&' @89= >98@ P} <5g| =35< }%%6-+8$& $8*+9&*"Jү`>* ,};ETU@.C7++&FKPH< 7 UV R@H:"@:@IY(:4IY.4?3+3?3+329/393310#".#"#54632326732#"'632!"&'# 32&&#"5654.5432Txf+/<}tp:pwN(X=7]ҥ<_+FyhLKnyF+^<x$\8Cy$+$43gn$,$B?9HN- (+Rb(0-+uUvR+h=H)5IDs*?N\@3((,"@E JB6 OP2:?--6LB @ FYFY% FY?3+3?39++323293310"'#"32&#"!273 4&#"'6632#".#"#5463235654.5432+^\Ϻ>w(9YGtm1{p>oC-nsGY9(w>QTxe+k}sp:qvNw$\8CAA#( 3^P*&3 x$*$fdo%+%ݡ>H(8JD^ @_@40$96>6) $AB-'-IY77!' @ H  @';3!3IY!?3+3?322+239/9+3933310#'##'##'5"'632!"&'## 32&&#"3267332P 21!1/!PC<]-F|tL Np~F-]<ҾA3fԥgggg+)Pc001/rUvP)&&7LJ1 ( *?@$$ +,( @ H  #??3322+239?910#'##'##'5#33663363#&R2112P'') # - ۶}!gggg%_HIo#Q,RZ\}-@  IY IY  ??+?+93310"!27## 4$32&H o9HG3tmVTNs\/@  FYFY?+?+?93310"32&#"3267#uO01h5P9+"3nju/@!    ?9910'%7%7%yB!C!v!DA9CBsdu=Css@   /332993310#"&5463!6632#*03)*6+/3-,6-2255).0138(@   /233991027632#54#"##5xQot}j+fyTb;:odf$+$y5@  /93104632&C8\$w8EL6(J@5@   /93105654.5432w$\8C@J(6LE) (6DR_m@I_(DZ"> R6mL0gno:HHAOED>LVcc\jf_Zm,,%3/"(6OLjm3663mjLO  /3/39////////333333333333333333910&&#"#632&&#"#6632&&#"#6632!&&#"#6632&&#"#6632!&&#"#6632&&#"#632!&&#"#6632o4@%% >:),25 ?@;+.6/'$3 //9910#67'66737&'&&'57667'67'&'7&&'7 F$a5; Ia4#GA݁hBO݁CCExEx+REC{Lj'ZC&#BO݁GA܂ Ia5; F$a5'XDnXY?DnXFcEf=? 'Q@*$%()IY$ IY !IY ?+?+99//3+3933333310473337! !3267# "&"!&=q"M)(eʍr݂nI62 3Z!(X@/  !&! )*!" FY%  "FYFY?+?+99//3+3??93333310&'$54733376632!3267#"!4&տj" ebD= E2/;g#i *AHTV,`&6T&+5 &6&+5B@% IYIY JY ??39/9++?+933310"#337 !"&'53254$^_ObR|Fz{<T1  !HB@%  FYGYFY??39/9++?+933310!#33#"'532654&#"T7n̅_.lGR\H<&9@IY JY IY"??+?+?+933310%3##!'"'53266!ٸŜ%=]~J;6;5O=]8}!EWYF9@ FY GY FY"??+?+?+933310%3##!#"'532!߰}^v:q"yd =@   IY IY?+??39/+9333310%!"&'53 !#3!3RzM{1#Pn bHG@'   FY    FY?+??39/_^]+9333310"'53265!#3!3ӄ]of}vd :=H5D@$    IY   IY"??+??39/+933333310%3##!#3!3Ş}PnFD@$    FY  FY "??+??39/+933333310!33##!#Vf}F7IyF=@    IY "IY?+??39/+9333310!##3#"&5332673Ǫjߪa5'Eyt7-H=@   FY  " FY ?+??39/+933331032673##3#"&5B[iiqHp8C aH;)H@%   IY" ?3?3??+9933933333310!##!333##47#PǞ /^J}F?@     FY "??3+??39939333310%7733###&'#3+)Ӱ}:5)-]vIy:JKwF-nTV,^&$69R&+5^ &D6%&+5%&$j=R $&+55^&Dj :&+55^s\^&(6R &+5s &H6 &+5uX=@  IY  IY IY?+?+9/+933310"5663 ! 5!27!s҆Ko/5L& qqF N f\;@    FY FYFY?+?+9/+9333102#"55!&&#"566267!b_Y Í\ i̻!)("uX%&jR /&+55f&j 1&+55%&jR '&+55&j '&+55J5%&jR >&+55D&j 8&+55J7@@#IYJY JY?+?9/++3933310! '532654&##5!5!$`jߌN? O.2ޙH@@# FYGY FY?+?9/++3933310#"'532654&##5!5!ꊷȡy8rʈFVr{R&MR&+5bb&M1&+5R%&jR %&+55b&j= #&+55}%&2jR -&+55sb&Rj .&+55}~sb\}%&~jR /&+55sb&j 0&+55=%&jR 0&+559}&j 0&+55&M/R&+5b&\M&+5%&j;R ,&+55&\j +&+55s&SR *&+55!&\S )&+55%&jjR )&+55-&j (&+55 -@   IY "IY?+??+93310!!3##?k}}BF -@   FY "FY?+??+93310!!3##Fy %&jR -&+55y&j ,&+55/u&uBH&uu&;X'u4H&[;@"     IY  ?3?39/993+3910!33!!##!3wklp<wpTbED}'H;@"     GY  ?3?39/993+3910!33!!##!u! hʼfw\/ D7 4@ IYJY??+9/+99333104$!33! $#"33$ ƪc ¶pJ|s7Gw#F@$ ##$%IY JY?2+3?99//9+93339310"&54$!3332653#"&'#"!265N*"dyϸv3q)!p{nRZwps".Q@), &&/0 *FY##FY ?3+3?+9/99?933339310%2653#"&'##"323&&53!26554&# vkȽ+Kj? mw9[qq[)  /MUp#NN*K@(("" +,JY  %%IY% JY?+?+99//+9933310#532654&#"'663232653#"&'&&՚ggT]bl|wpҽl7ErHPħ3іy)ȖP\%K@( $$ &'!FYFYFY?+?+99//+9933310%23# &&##53 54#"'6632Bݦo!KM9Uhc{ w 9McX$"($9zjN#J@(#! #$%JY##IY#!" JY?+??+9/+99333104&##532654&#"'66323##ᤇiiTaìk:BrJNħ}PZJ@(  FYFY" FY?+??+9/+99333104!#53 54&#"'6323##˖u9w=˿~p-ǍRPFJ9 %fy!#:@## $%IY  JY ?3+3?+9/93310!#"'53266!32653#"&5 H+LSdE@2?1@,8J7ospqͼDf>hωyy))F:@FYGY ?3+3?+9/93310323#"&5!#"'532!hwզ^v:q"q ;=d ^C@#  IY IY ?+??399//+9333331032653#"&5!#3!3nspqȿ'٪yy)3PnHM@*  FY   FY?+??399//_^]+93333310!3323#"&55!#VPjwզH5= 9sH}:@IY IY IY?+?+9/+93310!! 4$32&&# 3 !f4UxSBZW V`T1'&.s\:@ FY FY FY?+?+9/+93310!! !2&#"3265!C!ԯ;ũ?C'+PJߠ9@  IYIY?+3?+9/933105!!323#"&5&+5&${R &+55^&D{ -&+55&$|R &+55^&D| -&+55X&$}R !&+55^&D} 7&+55^&$~R '&+55^ &D~ =&+55I&$'N-dg&+5^&D&Ngy%&+5&(gs\&Hg&(fR&+5s&Hf&+5/&(RR&+5s&HR$&+5o&(wR &+55s\&Hw !&+55]&(xR &+55J&Hx !&+559J&(yR &+55s&Hy !&+55b&(zR *&+55s&Hz 9&+55s&('gKR%&+5s!&H'gK4&+5TV&,fR&+5{&fs&+5TV&,gf&Lgb}&2gsb\&Rg}&2fR&+5sb&Rf&+5}&2w}R &+55su&Rw &+55}&2x}R &+55ab&Rx &+55}J&2y{R &+55sb&Ry &+55}b&2zyR 6&+55sb&Rz 7&+55}s&2'gKR1&+5sb!&R'gK2&+5}ds&_v+R+&+5s!&`vm+&+5}ds&_CR#&+5s!&`C$&+5}d&_fR&&+5s&`f'&+5}d/&_RR+&+5s&`R#&+5}d&_g{s&`g&8gJ9H&Xg&8fTR&+59&Xf&+5{s&avR%&+5!&bvy&&+5{s&aCZR&+5!&bC&+5{&af`R &+5&bf"&+5{/&aRR%&+5&bR&+5{&agL&bg{&<gH&\g{&<fR &+5&\fj&+5{/&<RR&+5&\R&+5s&B! @   /32339910#&&'53#&&'53`4%c1`8%c1*?=D,?=Dq (@   /399//9339910#&'#57673'673#^pcra^5p4BPI6Sx`K[eA<{M^[pn` *@   /399//9339910#&'#57673%#&'53^arji^5p4B_xT4KAe`F<{M^^plaq{ 4@!   /3299//93339310#&'#57673#'6654&#"5632^pcra^5p4BP 9?9+.7K[eA<{M^{gQ &%Ph%:@ '"  " "/9///3339339910".#"#663232673#&'#57673-%GC?(*[ eK%IC>(* Z c^^arji^5p4B5%12jq$11hsAe`F<{M^y$@ @ /32339910673# 332673^P1Vw`>f LjbVi her]H9A@xy$@ @ /32339910#&'53 332673^wV4K5f LjbVi ]rlaH9A@xy.@  /239/2339310#'6654&#"5632 3326731R 9B9,%$>f LjbVi yd)Z %%NH9A@xh $0@" & @ !/2339/3329910".#"#663232673 332673-%GC?(*[ dL%IC>(* Z cf LjbVi 3$02hq$11grH9A@x1Bm@   /293104'3#"'5326ߋ{fcA2 6%3gx[gl 0uq @  /299310%#"'5325q8<)=^d0uq @  /299310%#"'5325q8<)=^d%4Cxss (@  KY &MY?+?+993310#"3232654&#"/55-7^ &@   ??99//993310!#47'37C>Z1C0pr#)s,@ KY&LY?+3?+9310!!5>54&#"'632!Rq,wX\Zڂ/whSAWg=Jms^t'G@&" ()KY %%KY%& KY %?+?+9/+9933310!"&'53 !#532654&#"'6632t[_`{^ȓ~`mTZ#,/1) kz4FpGQf^ B@!  MY $??9/933+393333310%##!533!47#f٨2 )D9s}D\V\_:@KYLY KY%?+?+9/+933102#"'53265!"'!!6- Fe^V7%s&O-327Iu/^+_@LY$??+9310!5!^h)j%t%A@"" &'MY KY&MY%?+?+9/9+933310!"'532##"&5432"326654&&%htDPf 7rЕx[XR)3SW0JFif'II\"3Z@.,00.*&&( (.54+1$-/-)/##( ())?3/32/3993339933333310#"'53254&&'&&54632&#"##33#7#H|Jjw6UxQn}\"dS7@7Cq7D\7F\7G7Hq7J7777777 7W7Xq7Y\7_7`q7b7q7\7q7 \7!q7"\7#q7%q7&\7'q7(\7)q7*\7+q7,\7-q7.\7/q70\71q72\73q74\76q78q7:q7<@<C<D<F<G<H<J<< <W<X<Y<_<`<b<<<< <!<"<#<%<&<'<(<)<*<+<,<-<.</<0<1<2<3<4<6<8<:<<<@<B<D<I<J<K<L<M<N<O<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<^<_<`<b<d<f<h<j<l<n=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_>-DD DD EE EYEZE[E\E]EE7E<E>E@EEEE EpF)F )F)F )HH HYHZH[H\H]HH7H<H>H@HHHH HpI{I {I{I {KK KK NFNGNHNRNTNNNNNNNNNNNNNNNNNNNNNNNNNNNNHN`N6N8N:N<N@NBNDNJNLNNNRNTNVNXNZN\N^N`PP PP QQ QQ RR RYRZR[R\R]RR7R<R>R@RRRR RpSS SYSZS[S\S]SS7S<S>S@SSSS SpURU RUDUFUGUHUJURUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDUFUHURU RUYU`UU U"U&U(U*U,U.U0U2U4U6U8U:U<U@UBUDUJULUNURUTUVUXUZU\U^U`W)W )W)W )YRY RYYY")YRYY RY ZRZ RZZZ")ZRZZ RZ [F[G[H[R[T[[[[[[[[[[[[[[[[[[[[[[[[[[[[H[`[6[8[:[<[@[B[D[J[L[N[R[T[V[X[Z[\[^[`\R\ R\\\")\R\\ R\ ^-q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsqq q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq-{&*24G_IKMOQSUWY[]_-{-{-{-{$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13$C X!#%')+-/13")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjln$;=;=?C X!#%')+-/13             YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p YZ[\]7<>@ p   YZ[\]7<>@ pR R")R R  YZ[\]7<>@ pR R")R R q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  &*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_&*24G_IKMOQSUWY[]_$79:;<=$&68:;=?C X!#%')+-/13oqsR R "@E=K=N=O=`={R R$79:;<=$&68:;=?C X!#%')+-/13oqs-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p-{ YZ[\]7<>@ p  &*24G_IKMOQSUWY[]_FGHRTH`68:<@BDJLNRTVXZ\^`FGHRTH`68:<@BDJLNRTVXZ\^`\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqsR R "@E=K=N=O=`=R R\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs\ \&*24789:<$&*,.02468:G\ \_aIKMOQSUWY[]_acegikmoqs  $79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs$79:;<=$&68:;=?C X!#%')+-/13oqs-{R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`R RDFGHJRTDFHR RY` "&(*,.02468:<@BDJLNRTVXZ\^`$$$$")$$q$&$*$2$4$7)$D\$Fq$Gq$Hq$Jq$P$Q$Rq$S$Tq$U$V$X$Y$Z$[$\$]$q$q$q$q$q$q$$$$$$$$q$\$\$\$\$\$\$q$q$q$q$q$q$q$q$q$q$q$$$$$$q$\$q$\$q$\$$q$$q$$q$$q$q$q$q$q$q$q$q$$q$$q$$q$$q$$$$ $$q$$q$$q$$q$$$$!$$)$&)$+$-$/$1$3$5$7$<$>$@$Cq$D\$F\$G$Hq$J$$$$$$$ $W$Xq$Y\$_$`q$b$q$\$q$ \$!q$"\$#q$%q$&\$'q$(\$)q$*\$+q$,\$-q$.\$/q$0\$1q$2\$3q$4\$6q$8q$:q$&@&Cq&D\&F\&G&Hq&J&&&&&&& &W&Xq&Y\&_&`q&b&q&\&q& \&!q&"\&#q&%q&&\&'q&(\&)q&*\&+q&,\&-q&.\&/q&0\&1q&2\&3q&4\&6q&8q&:q&(@(Cq(D\(F\(G(Hq(J((((((( (W(Xq(Y\(_(`q(b(q(\(q( \(!q("\(#q(%q(&\('q((\()q(*\(+q(,\(-q(.\(/q(0\(1q(2\(3q(4\(6q(8q(:q(8@8C8D8F8G8H8J88 8W8X8Y8_8`8b8888 8!8"8#8%8&8'8(8)8*8+8,8-8.8/808182838486888:8<8@8B8D8I8J8K8L8M8N8O8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8b8d8f8h8j8l8n9R9 R999")9R99 R9 :::"):$:&:*:2:4:D:F:G:H:J:P:Q:R:S:T:U:V:X:]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::!:+:-:/:1:3:5:<:>:@:C:D:F:G:H:J:: :W:X:Y:_:`:b:::: :!:":#:%:&:':(:):*:+:,:-:.:/:0:1:2:3:4:6:8:::<:@:B:D:I:J:K:L:M:N:O:Q:R:S:T:U:V:W:X:Y:Z:[:\:]:^:_:`:b:d:f:h:j:l:n;&;*;2;4;;;;;;;;;;;;;;;;;;;;G;_;I;K;M;O;Q;S;U;W;Y;[;];_=&=*=2=4====================G=_=I=K=M=O=Q=S=U=W=Y=[=]=_?&?*?2?4????????????????????G?_?I?K?M?O?Q?S?U?W?Y?[?]?_CqC qC&C*C- C2C4C7qC9C:C<CCCCCCCCCCCCCCCCCCCCC$qC&qC6C8C:CGCCCCCqC qC_CICKCMCOCQCSCUCWCYC[C]C_CoCqCsCqDD DD E-{GGG$G7G9G:G;G<G=GGGGGGGGGGG$G&G6G8G:G;G=G?GCGGGGGGG GXGGG!G#G%G'G)G+G-G/G1G3GoGqGsGVqV qVfVmVqqVrVsVuVxVqV qVT[[[V[_[b[d[i[p[q[r[t[u[x[[[ [T\\\V\_\b\f\i\m\s\v\y\z\{\|\}\~\\\\\\\\\\\\\\\\\\\\ \!]q]r]x]T^^ ^^ _q_ q_f_m_qq_r_s_u_x_q_ q_T```V`_`b`i`t`` aaaaV\a_\ab\afai\amasavayqaza{a|a}a~qaaaaaaaaaqaaqaqaaqaaaaaqaaaaaaa a!aSbqb qbfbmbqqbrbsbubxbqb qbTdfdmdsfffVf_fbfdfifpfqfrftfufxfff fThfhmhshhiqi qifimiqqirisiuixiqi qiTmmmVm_mbmdmimpmqmrmtmumxmmm mToooVo_obodoiotooo qqqqV\q_\qb\qfqi\qmqsqvqyqqzq{q|q}q~qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq q!qSrrrVr_rbrfrirmrsrvryrzr{r|r}r~rrrrrrrrrrrrrrrrrrrr r!sssVs_sbsdsispsqsrstsxsss sTtftmtsttuuuVu_ubufuiumuu vqvrvxvTxxxVx_xbxfxixmxsxvxyxzx{x|x}x~xxxxxxxxxxxxxxxxxxxx x!y){{ {{ || |||| ~) y~     y~ y~         y~       n| q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqql~    n|   n|   n| l|~  qff jlrqs~ffqqq q  q q qqq qn|q qq  r|  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq)l|~    l|~   rsz|  rsv  l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqqqff jlrqs~ffqqq q  q  rsz l|~  ))  n|   n|  rsz|  rsz|   ) js      j  )j       js   s  j        m  m         js    m  m  j   sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX !+-/135CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R ")$&*24DFGHJPQRSTUVX] !+-/135<>@CDFGHJ WXY_`b !"#%&'()*+,-./0123468:<@BDIJKLMNOQRSTUVWXYZ[\]^_`bdfhjlnR R")R R 7$&q7$&q7$&q$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)$q7)9):)<DFGHJPQRSTUVXqqqqqqqqq !$)&)+-/1356)8:CqDFHJVq_qbqiqyz{~qqqq)))WXqY`bjrqsq}qqqq q  q qqqq !q"#q%q&'q()q*+q,-q./q01q23q468:<@BDJLNRTVXZ\^`bdfhjlnoqs)&*247q89:<$q&q*,.02468:Gfmqqrsuxqqq\qT_al|\~qqq\\\\ qIKMOQSUWY[]_acegikmoqsq $q 7) 9) :) < D F G H J P Q R S T U V X q q q q q q                        q  q  q                             ! $) &) + - / 1 3 5 6) 8 : Cq D F H J Vq _q bq iq y z { ~              q    q  q       q ) ) )  W Xq Y ` b j rq sq }         q q  q  q         q    q    q    q q  q   !q " #q %q & 'q ( )q * +q , -q . /q 0 1q 2 3q 4 6 8 : < @ B D J L N R T V X Z \ ^ ` b d f h j l n o q s ) & * 2 4 7q 8 9 : <                         $q &q * , . 0 2 4 6 8 : G f m qq r s u x  q  q   q  \ q        T _ a l |\ ~        q    q    q  \  \    \     \        q  I K M O Q S U W Y [ ] _ a c e g i k m o q s q!q!r!x!TSSSS TTTVT_TbTfTiTmTsTvTyTzT{T|T}T~TTTTTTTTTTTTTTTTTTTT T!XqX qX&X*X- X2X4X7qX9X:X<XXXXXXXXXXXXXXXXXXXXX$qX&qX6X8X:XGXXXXXqX qX_XIXKXMXOXQXSXUXWXYX[X]X_XoXqXsXqYY YY ZZZVZ_ZbZdZiZpZqZrZtZuZxZZZ ZT`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`RbIfbWfbYfbZfb[fb\fbfb%fb'fb7fbfbfb4fb5fb]fb^fbpfbfbfjj jj llllllllllllllllllllll lrlslzl|lllllllllllllllllllllllllllll llllllmmmmmmm msmmmnn nnnnnnnnn n|nnnnnnnnnnnnnnn nnnoo ooooooooo omooooooooooooooooooooooooooopppppplp~ppppppppppppppppp p ppprqr qrrrqrrrrrrrqr qrnr|rrrrrrrrqrrrrrrrrrrrrrrrrrrr qrrqrrrsqs qssssssssssssqs qsjsms}sssssssssssssssssssssssssssss s ssssstqt qtttqtttttttqt qtnt|ttttttttqttttttttttttttttttt qttqtttuqu quuuuuuuuuuuuqu qujumu}uuuuuuuuuuuuuuuuuuuuuuuuuuuuu u uuuuuv vx xzzzz zzzzz z|q|q||||||||q| q|r|s|||||| | ||||}} }}}}}}}}} }}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~ ~r~s~z~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~  qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  s s s rsz|    rsz|    rsz|  sl~  )    |   m rsv    )))))) jklqrsuwy}~)))))    ) js   f |   l{=}~j    )l{=}~j  l|~  j  l|~  j  l|~  j  )  )))))) jklqrsuwy}~)))))    ) js  \ \fH\ \|qqH HHq qq qmqq   l~  q)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )) jklqrsuwy}~))     s)) jklqrsuwy}~))     sl{=}~j  )  )    |         l|~  j   f m| )  )  )  q qqq qn|q qq  q qqq qn|q qq       rsz|    rsz|   l|~  j    )   rsz|    rsz|    rsz|    rsz|   qff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sqff jlrqs~ffqqq q  q  sq)qqqqqq jqklmqrqsuwy}~qqqqqqq)qqqqqqqqq q q q qqq js  )))))) jklqrsuwy}~)))))    ) js  l{=}~j  l|~  j          q             r v |       q                                                                           q             r v |       q                                      )   q rv|q    q rv|q    r    r|   )  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq  q q&*- 247q9:<$q&q68:Gq q_IKMOQSUWY[]_oqsq     !q! q!&!*!- !2!4!7q!9!:!<!!!!!!!!!!!!!!!!!!!!!$q!&q!6!8!:!G!!!!!q! q!_!I!K!M!O!Q!S!U!W!Y![!]!_!o!q!s!q"" "" #q# q#&#*#- #2#4#7q#9#:#<#####################$q#&q#6#8#:#G#####q# q#_#I#K#M#O#Q#S#U#W#Y#[#]#_#o#q#s#q$$ $$ %q% q%&%*%- %2%4%7q%9%:%<%%%%%%%%%%%%%%%%%%%%%$q%&q%6%8%:%G%%%%%q% q%_%I%K%M%O%Q%S%U%W%Y%[%]%_%o%q%s%q&& && 'q' q'&'*'- '2'4'7q'9':'<'''''''''''''''''''''$q'&q'6'8':'G'''''q' q'_'I'K'M'O'Q'S'U'W'Y'[']'_'o'q's'q(( (( )q) q)&)*)- )2)4)7q)9):)<)))))))))))))))))))))$q)&q)6)8):)G)))))q) q)_)I)K)M)O)Q)S)U)W)Y)[)])_)o)q)s)q** ** +q+ q+&+*+- +2+4+7q+9+:+<+++++++++++++++++++++$q+&q+6+8+:+G+++++q+ q+_+I+K+M+O+Q+S+U+W+Y+[+]+_+o+q+s+q,, ,, -q- q-&-*-- -2-4-7q-9-:-<---------------------$q-&q-6-8-:-G-----q- q-_-I-K-M-O-Q-S-U-W-Y-[-]-_-o-q-s-q.. .. /q/ q/&/*/- /2/4/7q/9/:/</////////////////////$q/&q/6/8/:/G/////q/ q/_/I/K/M/O/Q/S/U/W/Y/[/]/_/o/q/s/q00 00 1q1 q1&1*1- 121417q191:1<111111111111111111111$q1&q16181:1G11111q1 q1_1I1K1M1O1Q1S1U1W1Y1[1]1_1o1q1s1q22 22 3q3 q3&3*3- 323437q393:3<333333333333333333333$q3&q36383:3G33333q3 q3_3I3K3M3O3Q3S3U3W3Y3[3]3_3o3q3s3q44 44 5-{66 6Y6Z6[6\6]6676<6>6@6666 6p7-{88 8Y8Z8[8\8]8878<8>8@8888 8p9-{:: :Y:Z:[:\:]::7:<:>:@:::: :p;-{<< <Y<Z<[<\<]<<7<<<><@<<<< <p=-{>> >Y>Z>[>\>]>>7><>>>@>>>> >p?-{@@ @Y@Z@[@\@]@@7@<@>@@@@@@ @pA-{BB BYBZB[B\B]BB7B<B>B@BBBB BpC-{DD DYDZD[D\D]DD7D<D>D@DDDD DpIII$I7I9I:I;I<I=IIIIIIIIIII$I&I6I8I:I;I=I?ICIIIIIII IXIII!I#I%I'I)I+I-I/I1I3IoIqIsIJJ JYJZJ[J\J]JJ7J<J>J@JJJJ JpKKK$K7K9K:K;K<K=KKKKKKKKKKK$K&K6K8K:K;K=K?KCKKKKKKK KXKKK!K#K%K'K)K+K-K/K1K3KoKqKsKLL LYLZL[L\L]LL7L<L>L@LLLL LpMMM$M7M9M:M;M<M=MMMMMMMMMMM$M&M6M8M:M;M=M?MCMMMMMMM MXMMM!M#M%M'M)M+M-M/M1M3MoMqMsMOOO$O7O9O:O;O<O=OOOOOOOOOOO$O&O6O8O:O;O=O?OCOOOOOOO OXOOO!O#O%O'O)O+O-O/O1O3OoOqOsOQQQ$Q7Q9Q:Q;Q<Q=QQQQQQQQQQQ$Q&Q6Q8Q:Q;Q=Q?QCQQQQQQQ QXQQQ!Q#Q%Q'Q)Q+Q-Q/Q1Q3QoQqQsQSSS$S7S9S:S;S<S=SSSSSSSSSSS$S&S6S8S:S;S=S?SCSSSSSSS SXSSS!S#S%S'S)S+S-S/S1S3SoSqSsSUUU$U7U9U:U;U<U=UUUUUUUUUUU$U&U6U8U:U;U=U?UCUUUUUUU UXUUU!U#U%U'U)U+U-U/U1U3UoUqUsUXIRXWRXYfXZfX[fX\fXfX%RX'RX7fXfXfX4RX5RX]RX^RXpfXRXRZIRZWRZYfZZfZ[fZ\fZfZ%RZ'RZ7fZfZfZ4RZ5RZ]RZ^RZpfZRZR\IR\WR\Yf\Zf\[f\\f\f\%R\'R\7f\f\f\4R\5R\]R\^R\pf\R\R^IR^WR^Yf^Zf^[f^\f^f^%R^'R^7f^f^f^4R^5R^]R^^R^pf^R^R`IR`WR`Yf`Zf`[f`\f`f`%R`'R`7f`f`f`4R`5R`]R`^R`pf`R`Raaa$aaaaaaaaaaCaa aXaaa!a#a%a'a)a+a-a/a1a3fIffWffYffZff[ff\ffff%ff'ff7ffffff4ff5ff]ff^ffpfffffhIfhWfhYfhZfh[fh\fhfh%fh'fh7fhfhfh4fh5fh]fh^fhpfhfhfjIfjWfjYfjZfj[fj\fjfj%fj'fj7fjfjfj4fj5fj]fj^fjpfjfjflIflWflYflZfl[fl\flfl%fl'fl7flflfl4fl5fl]fl^flpflflfnIfnWfnYfnZfn[fn\fnfn%fn'fn7fnfnfn4fn5fn]fn^fnpfnfnfooo")o$o&o*o2o4oDoFoGoHoJoPoQoRoSoToUoVoXo]oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooo!o+o-o/o1o3o5o<o>o@oCoDoFoGoHoJoo oWoXoYo_o`oboooo o!o"o#o%o&o'o(o)o*o+o,o-o.o/o0o1o2o3o4o6o8o:o<o@oBoDoIoJoKoLoMoNoOoQoRoSoToUoVoWoXoYoZo[o\o]o^o_o`obodofohojolonpRp Rppp")pRpp Rp qqq")q$q&q*q2q4qDqFqGqHqJqPqQqRqSqTqUqVqXq]qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqq!q+q-q/q1q3q5q<q>q@qCqDqFqGqHqJqq qWqXqYq_q`qbqqqq q!q"q#q%q&q'q(q)q*q+q,q-q.q/q0q1q2q3q4q6q8q:q<q@qBqDqIqJqKqLqMqNqOqQqRqSqTqUqVqWqXqYqZq[q\q]q^q_q`qbqdqfqhqjqlqnrRr Rrrr")rRrr Rr sss")s$s&s*s2s4sDsFsGsHsJsPsQsRsSsTsUsVsXs]ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss!s+s-s/s1s3s5s<s>s@sCsDsFsGsHsJss sWsXsYs_s`sbssss s!s"s#s%s&s's(s)s*s+s,s-s.s/s0s1s2s3s4s6s8s:s<s@sBsDsIsJsKsLsMsNsOsQsRsSsTsUsVsWsXsYsZs[s\s]s^s_s`sbsdsfshsjslsntRt Rttt")tRtt Rt { {{ {")$q&*247)D\FqGqHqJqPQRqSTqUVXYZ[\]qqqqqqq\\\\\\qqqqqqqqqqqq\q\q\qqqqqqqqqqqqqqq qqqq!$)&)+-/1357<>@CqD\F\GHqJ WXqY\_`qbq\q \!q"\#q%q&\'q(\)q*\+q,\-q.\/q0\1q2\3q4\6q8q:q9 9BI 9 gsR{  . .+*Y r   <  Q i y ( 8E \} \ T5Digitized data copyright 2010-2011, Google Corporation.Open SansRegularAscender - Open Sans Build 100Version 1.10OpenSansOpen Sans is a trademark of Google and may be registered in certain jurisdictions.Ascender Corporationhttp://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlLicensed under the Apache License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0Digitized data copyright 2010-2011, Google Corporation.Open SansRegularAscender - Open Sans Build 100Version 1.10OpenSansOpen Sans is a trademark of Google and may be registered in certain jurisdictions.Ascender Corporationhttp://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlLicensed under the Apache License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0ff      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.notdefnullnonmarkingreturnspaceexclamquotedbl numbersigndollarpercent ampersand quotesingle parenleft parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon semicolonlessequalgreaterquestionatABCDEFGHI.altJKLMNOPQRSTUVWXYZ bracketleft backslash bracketright asciicircum underscoregraveabcdefghijklmnopqrstuvwxyz braceleftbar braceright asciitildenonbreakingspace exclamdowncentsterlingcurrencyyen brokenbarsectiondieresis copyright ordfeminine guillemotleft logicalnotuni00AD registered overscoredegree plusminus twosuperior threesuperioracutemu paragraphperiodcenteredcedilla onesuperior ordmasculineguillemotright onequarteronehalf threequarters questiondownAgraveAacute AcircumflexAtilde AdieresisAringAECcedillaEgraveEacute Ecircumflex Edieresis Igrave.alt Iacute.altIcircumflex.alt Idieresis.altEthNtildeOgraveOacute OcircumflexOtilde OdieresismultiplyOslashUgraveUacute Ucircumflex UdieresisYacuteThorn germandblsagraveaacute acircumflexatilde adieresisaringaeccedillaegraveeacute ecircumflex edieresisigraveiacute icircumflex idieresisethntildeograveoacute ocircumflexotilde odieresisdivideoslashugraveuacute ucircumflex udieresisyacutethorn ydieresisAmacronamacronAbreveabreveAogonekaogonekCacutecacute Ccircumflex ccircumflexCdotcdotCcaronccaronDcarondcaronDcroatdcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGbrevegbreveGdotgdot Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbar Itilde.altitilde Imacron.altimacron Ibreve.altibreve Iogonek.altiogonekIdotaccent.altdotlessiIJ.altij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotLslashlslashNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautOEoeRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexScedillascedillaScaronscaron Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflex YdieresisZacutezacute Zdotaccent zdotaccentZcaronzcaronlongsflorin Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccent circumflexcaronmacronbreve dotaccentringogonektilde hungarumlauttonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos.alt Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIota.altKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9Iotadieresis.altUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronpirhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonos afii10023 afii10051 afii10052 afii10053 afii10054 afii10055.alt afii10056.alt afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109 afii10110 afii10193 afii10050 afii10098WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveendashemdash afii00208 underscoredbl quoteleft quoterightquotesinglbase quotereversed quotedblleft quotedblright quotedblbasedagger daggerdblbulletellipsis perthousandminutesecond guilsinglleftguilsinglright exclamdblfraction nsuperiorfranc afii08941pesetaEuro afii61248 afii61289 afii61352 trademarkOmega estimated oneeighth threeeighths fiveeighths seveneighths partialdiffDeltaproduct summationminusradicalinfinityintegral approxequalnotequal lessequal greaterequallozengeuniFB01uniFB02 cyrillicbrevedotlessjcaroncommaaccent commaaccentcommaaccentrotate zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni1F4Duni02F3 dasiaoxiauniFB03uniFB04OhornohornUhornuhornuni0300uni0301uni0303hookdotbelowuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BF uni04C0.altuni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CE uni04CF.altuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7 uni1EC8.altuni1EC9 uni1ECA.altuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABuni030Fcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCcyrillicbighookLCone.pnumzero.osone.ostwo.osthree.osfour.osfive.ossix.osseven.oseight.osnine.osffuni2120Tcedillatcedillag.altgcircumflex.alt gbreve.altgdot.altgcommaaccent.altIIgraveIacute Icircumflex IdieresisItildeImacronIbreveIogonek IdotaccentIJ IotatonosIota Iotadieresis afii10055 afii10056uni04C0uni04CFuni1EC8uni1ECA   46latnMOL ROM  nlatnMOL (ROM B      ligaligaligalnumlnumlnumloclloclonumonumonumpnumpnumpnumsalt saltsaltss01"ss01*ss012ss02:ss02@ss02Fss03Lss03Rss03Xtnum^tnumftnumn    &.6>FNV^Pz2HJJ.,ZgwEG      !$%IJ6 "(^IO]ILI5O4LI^V0R *H C0?1 0 +0a +7S0Q0, +7<<<Obsolete>>>0!0 +@mnTA6}]0z0b8%a&Z0  *H 0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0 070615000000Z 120614235959Z0\1 0 UUS10U VeriSign, Inc.1402U+VeriSign Time Stamping Services Signer - G200  *H 0ĵR`)J[/Kk5TX56^bMRQ4q{f*j 7٘tvJcEG.k NK+XJ,XB-uލǎlLgrIž`<cxi{-004+(0&0$+0http://ocsp.verisign.com0 U003U,0*0(&$"http://crl.verisign.com/tss-ca.crl0U% 0 +0U0U0010 UTSA1-20  *H PK$ $- 7 ,Za񑑳V@뒾89u6t:O7ʕBǠWdB5N3M'L8MxSݤ^ ⥾`߭(ǥKd[98"3/!?DA e$HDT\y>]r},CS}=*:Om ]^SWp`+nx'4[^I2300-GߍRFCmH 10  *H 01 0 UZA10U Western Cape10U Durbanville10 U Thawte10U Thawte Certification10UThawte Timestamping CA0 031204000000Z 131203235959Z0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0"0  *H 0 ʲ }uNgadڻ30X~k6xw~o< hlʽR-H=]_/kLR`@~ ?Ǵ߇_zj1.G 1s W-x43h/Š*Ë!fXWou<&]'x1"ijGC_^|}bM "Vͮv M٠h;004+(0&0$+0http://ocsp.verisign.com0U00AU:0806420http://crl.verisign.com/ThawteTimestampingCA.crl0U% 0 +0U0$U0010U TSA2048-1-530  *H JkXD1y+LͰXn)^ʓR G'/8ɓN"b?7!Op18UN$ҩ'NzaA*^ݻ+>W~ +;R8'?J00eeR&.Y)"\0  *H 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 090521000000Z 190520235959Z01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0"0  *H 0 g`IoV|f^ q-!ќPL"5; .Z|=;%X{ ξ'tag'MjaXy'M4+G Df$fO8TrfujIh8y 0,`Hת809:|@T/ܨR>+!\ P4.M^%Ԍn|)]1ZՌgX5+!`x^{`W ]A cT`C!00U00pU i0g0e `HE0V0(+https://www.verisign.com/cps0*+0https://www.verisign.com/rpa0U0m+ a0_][0Y0W0U image/gif0!00+kπjH,{.0%#http://logo.verisign.com/vslogo.gif0U%0++04+(0&0$+0http://ocsp.verisign.com01U*0(0&$" http://crl.verisign.com/pca3.crl0)U"0 010UClass3CA2048-1-550Uk&pȡ?-50  *H ݔAaix0Ɛ<~B$s/DrPU nQj71ܥ-OM2NgUejzd8xEv1z`³]fvYI8VAwX00fgymPSo0  *H 01 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)09100.U'VeriSign Class 3 Code Signing 2009-2 CA0 100729000000Z 120808235959Z01 0 UUS10U Massachusetts10 UWoburn10U Monotype Imaging Inc.1>0<U 5Digital ID Class 3 - Microsoft Software Validation v210U Type Operations10UMonotype Imaging Inc.00  *H 0Di|U 25L3^ L*8ט@I "SOCʋVnH9c;$5}rGWyˊJ@p-5cįפ {uePd"}KXEMYLM00 U00U0DU=0;09753http://csc3-2009-2-crl.verisign.com/CSC3-2009-2.crl0DU =0;09 `HE0*0(+https://www.verisign.com/rpa0U% 0 +0u+i0g0$+0http://ocsp.verisign.com0?+03http://csc3-2009-2-aia.verisign.com/CSC3-2009-2.cer0U#0k&pȡ?-50 `HB0 +700  *H N"gA~™cjrb<8=_G_[KI  VD 5< D`E*oL;4gpZ9\Zl5|eKmIp=b۴A~}n"w6MZ S1+(RzkwD ]%,͊0>KyʦN $ 񺐶\<'M0{ *H  1l0h0g0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA8%a&Z0 +]0 *H  1  *H 0 *H  1 110505165510Z0# *H  1T+ 'S8V0  *H wo"kEN@;'JV:j|{`N+Wg3+)쾼Y)$wILt=.o !9V8 chX)goconvey-1.6.1/web/client/resources/fonts/Orbitron/000077500000000000000000000000001266412531300223475ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/fonts/Orbitron/OFL.txt000077500000000000000000000106101266412531300235310ustar00rootroot00000000000000Copyright (c) 2009, Matt McInerney (matt@pixelspread.com), with Reserved Font Name Orbitron. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. goconvey-1.6.1/web/client/resources/fonts/Orbitron/Orbitron-Regular.ttf000077500000000000000000001150741266412531300262760ustar00rootroot00000000000000 DSIGFFTMX_b GDEF)$(GPOS =NGSUB]OS/2`cmapjQBgaspglyfjM 4HXhead%,6hhea|Pd$hmtx*kern0P/Rloca\<maxpAG name_O`W,8(postc0Tpreph4m3_< ##E F_EFD@(2'Bpyrs@ D M:t; "05;486;6 B9>9:5>949B9<363~;;?9D:@;68B:::>8S99 9 98@8<68t69763<6##,.&5363<6 46335)64E6.466364055/#.*6!6!35|!'6-!A8!D:D:D:D:D:D:_668::::$$@8<6<6<6<6<6"5<6<6<6<6&A944444453~3~3~3~316333335555**4^54630&536,)(-#666!6k/k6s>6#;. /1 166;6421=66;684d6:6,.;565=6832135636~6O63666668663646155!56"6.36< D@]~1Sax~    " & " _1R`x}    " & "sSG1-ީ   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`noqszebcgfdpiajm~ltkurwxyv|}{h$XZfFZ,f~ 6H\nZ|&2Rn~F| *H`x  : h  : T j  @ X  ( R j . \ n N~&p(L`t D "Lv*Z.xHHBDt.8J\v*BVl$XvD\tP*b  Z | ! !"!.!N!r!!!!!","`"""##(#<#d####$$,:3#53'3RRRRRy;D(#53#5RRЌ #3##7!#7#537#5373!73!7!yG5R65R6eG8Q98Q9LG+RRRR"C/9C#54&+32+#5#"&=3;5#"&=46;5332#326=4&%5#"3S3GG3R2GR2GG2R3GzWG22GrrG2F33GrrGR0#3C35%32+"&=46326=4&+"32+"&=46326=4&+"I^3GG3^3GGH_2GG2_3FFlekjG3T2GG2T3G~~G2U2GG2U2G5&3%'#!"&=463&=463!2#54&#!"53!267#" ?&2G6-9G2)E Se R OHM*3G2++5d3G=)7";D#5RЌ473#"&546;#"2GG2RRG23GS#83532654&+532#82HH2RSG3#2G;'.'7'753Z ) [Z* ZRfO/}  {{ ~/O1d 33##5#53RRRR6}R736R.$Rb(? ;Q!5zQRR6R7#5RRRR7jfh9!2#!"&546!"!2652GG23FF4 G3#2GG23GS_c.73#pSS0tb9(!2#!"3!!463!26=4&#!"#5462GG2^)F3RFG32GR3F3G5 3#!"&=33!26=4&#!5!26=4&#!"#5463!2(G23GS+;SG33F%52GG2R3GG3 3##5!53!NppR \Rs R\9%3!2#!"&=33!26=4&#!!!"2GG23FRWF32GG2S9&!2#!"&5463!!"54&#!3!262GG23FF3 F32GG23GSڭ\ !5!2#4& 2GR~SG3W9)9#!"&=47&=463!254&#!"3!2654&#!"3!26G23FF3(EFk()')2GG2)')(3G=O3 (!"&=463!2#!"&'!26=4&3!54&#!"3GG32GG2'@ X 1G23GG3"2G.$&6L73##56RRRRRRLRR3}L #53RR.$LRRb(? @%5%W@n(_a_;@%!5%!5@RRRR;>75-5;@__a2#!"#5463!26=4&#!#532GG2RG2RRG32G**3FR9(53234&#!"3!!"&5463!2!"&=46354&+"u_2Gq^3FF32Ge3FFG2X#RG23GG3jG3T2G~:  !2#!#46!4&#!"2FQQF . F2X2F; /#!!2'!"3!26=4&54&#!"3!26(F292Fx?6 %42FF28!"3!!"&5463!V2FF2V QF22F:  !2#!%4&#!"3!26:X2FF2 F2 2Fx : !!!!!1@oQRQ: !!!!#:1QQR8%#54&#!"3!26=#5!#!"&5463!2Q F2 2FF22FX R2FF22FF9 3#!#3!RRQQ?0?9339Q0%3#!"&=33!26QF2 2FQxX2FF2999 3 ###33h.iRR?9 33!9QQ8l 3# #3+oQQold0ty8 %3##3QoQo\t0t6!2#!"&546!2654&#!"2FF2 2FF2 F2 2FF22F 8 !2#!"'#54&#!"3!268X2FF2 Q F22F6d %3!"&5463!2!2654&#!"bJ2FF22F QQF22FF2  7!+#!"'#!2!26=4&#!"F2nk QX2F W2F F33#54&#!"3!2#!"&=33!26=4&#!"&=463!2Q 2FF2 2FQ 2FF22FXF22FF2F22FF!!#!QQ6%3#!"&533!26QF2 2FQxX2FF2X#%3#3p_`^__O0#| 3# #33$XGFVb0gB. 3 # # 3h/ih.h)hh3#3_Q]?3 5!!!53t0tQoQo633#36DDSR%5kjlh353#533C~S/R,6!!5(RR h#'q"P#4D2!"&=!54&#!55!3 3G*2G+VDG25G2ҀR6 2#!34&#!"3!26 2GG2*R\DG22G5R3D7!!"&5463!!"*2GG2,RRG2R2GRf 3!"&5463!!2654&#!"R+3GG3}\G2R2GR3D2!3!!"&5463!54&#!"3G*2GG2'DG2ҀRG2R2G5"3##46;RF3ER3FR)wD&#!5!26=!"&5463!2!2654&#!"wF3j}2GG2\3F+\k3GSkG2R2GG2R62#4&#!"#3 2GRRRDG2554333#4RRRRDRE 3#+53265aSSSG3RlC3GS6x 3 #'##33 lkRRDI4 3;#"&54Rbb2GwRG26D2#4&+"#4&+"#43FQSSDG2555D6D2#4&#!"# 2GRRDG255D3D!2#!"&546!"3!2654&\3GG32GG\DG22GG2R2GRR6D 2#!#4&#!"3!26 2GG2|R\DG22G*5RcD 463!#5!"&53!2654&#!"G3R}3GS\2GG2RR4D !!"#46FRGDR52G0D3#54&#!"3!2#!"&=33!26=4&#!"&=463!2S\3GG32GR\2GG2\3GYG2Y2GG2YG2Y2GG5#;#"&5333FRRG25D3#!"&533!2652RG32GR\D52GG25D3#3`_`DD #D 3# #33YGHXlD!DPQ.D 3#'#3klllD'*xB#!5!26=!"&533!2653xF3j}2GR\Rl3GSlG276D 5!!!56O Rp~Rp;#"&=.'57546;#"2G"/G2T#RG2`3GSC6J36RsC3757'54&+532+5326wTT2G".G2yEBSG3_2GRkb327#"&#"5632' "##*'#() G% C5#5#3RRRRSS(!m#3##5#"&546;533#"3mR3FF3RVRssG2\3G'#54&#!"!!!!535#535463!2S`tiiiG3/3GGRRRR3GG36h<#5##5#53|2GG2SG3_R CSSG32G]]3Fr`)<0R 3##5!53!53QppR y[R R]Zc !333#dljRo]s0W1 3##33)jppRi0Ws6 33#6Skpt/ 3#3#5! !okdpSl&/6  3#'!#!6pdlSS'/uE !#'!#3!E_i0j_^/pL4#5!"3!53#!"&5463!2QN C' 2FF2'Cl^q q^(>&'=='33#!5!26=4&#!"&533!QF2X 2FQ2FQF21#!26=4&#!5!2#!"3!!"&=46X2FF2 X2FFQF22FQF22F3D 2!"&5463!4&#!"3G*2GG2DG25G2R2Gy5D !2#5!#46!54&#!"|2GR6RG DG252G6E/#!!2'!"3!26=4&54&#!"3!26c(G2 3GzG7g:%4V2GEG2]]]VV3E!"3!!"&5463!,,2GG2RG2S2G6E !2#!%4&#!"3!2662GG2 gEG22GyS6EE !!!!!ECKERRRE6EE !!!!#6CKRERR3E%#54&#!"3!26=#5!#!"&5463!2S\G32GG2\3G`R2GG2S2GG6D 3#5!#3!DRRDRRDD6D336RD^D%3#!"&=33!26 RG22GRgy52GG2006#54&#!#3!26=R|RRD((((I6xD 3 #'##33 lkRRDD6D33!6RDR6 E %3# #3qRRnfrE6D %3##3=RohRo\D3D!2#!"&546!2654&#!"\3GG32GG2\DG22GG2R2GR6D !2#!"'#54&#!"3!2662GG2 R\DG22GI4D %3!"&5463!2!2654&#!"~c2GG2\3G*\RRG2R2GG2&R6D+#'##!2!26=4&#!"F3kiR3F+\˂2GDG1D3#54&#!"3!2#!"&=33!26=4&#!"&=463!2S\3GG32GR\2GG2\3GYG2Y2GG2YG2Y2GGoD!!#!YRDR5D%3#!"&533!262RG32GR\y52GG255D 3!"&533!2R*2GRDG25D%3#3`^aQD5D3"&53;2653;26533GRRRG255"D 3# #33XHHXdD-DQR6D!#54&#!"#547&=33!26=RRR\D((((((((.D 3#'#3llllD(D3#53$aS`D|3D#7"3!!"&=463!26=4&#!5!2#*2GG2\+3GG3YRG2Y2GYRG2Y2G6D 5!!!56O Rp~Rp"X$:$<%9%<'9'=(0(2)-)5)7 )[*:.$.+/9/:/Copyright (c) 2009, Matt McInerney OrbitronOrbitronRegularRegularFontForge 2.0 : Orbitron Regular : 7-12-2010FontForge 2.0 : Orbitron Regular : 7-12-2010Orbitron-LightOrbitron-Light1.0001.000Orbitron-RegularOrbitron-RegularMatt McInerneyMatt McInerneyMatt McInerneyMatt McInerneyhttp://theleagueofmoveabletype.comhttp://theleagueofmoveabletype.comhttp://pixelspread.comhttp://pixelspread.comCopyright (c) 2009, Matt McInerney <matt@pixelspread.com>, with Reserved Font Name Orbitron. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.Copyright (c) 2009, Matt McInerney , with Reserved Font Name Orbitron. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.http://scripts.sil.org/OFLhttp://scripts.sil.org/OFLOrbitronOrbitron2  !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*+,-./0123456789:;<=>?@EurouniE000 seven.altnine.alttwo.alt question.altfour.altW.alt2W.altV.altA.altA.alt2CRA.alt3C.altI.altJ.altK.altM.altN.altO.altQ.altR.altS.altV.alt2V.alt3W.alt3W.alt4X.altY.altZ.alta.alta.scb.scc.scd.sce.scf.scg.sch.sci.scj.sck.altk.scl.scm.scn.sco.scp.scq.scr.scs.sct.scu.scv.altv.scw.altw.scx.altx.scy.scz.altz.sc  (tlatnaalt&salt.smcp4ss01:ss02@ss03F (08@82R&&"&,-.012456;<=DEFGHIJKLNOPQRSTUVW[R &.4:@FL $9:CMXYZ\2"&,-.0124569:;<=CMXYZ\:C\ $9: $9: ,latnkern1lr|"8V\~ .<^dj"8jxX:<9<9=02-57 [:$+9:@@N@>@j@L@@@`@GN?S\;p:-@;\@@@@@ zS`m]5`^7``TNR~r  .>@@@Tu_3_^z8 uuvuu]u\ulE6rhbh2G@@@i0^`FJl@F{@@r@@@@c@EB G{P      S`]]]]"`````@`rrrrHTTTTTTa3^^^^u]]]]]rrrrJ J T T TS`3S`3S`3S`3m_" `]^]^]^]^` ` ` `!u3'@^u7v7v7v7v1 uuu`]`]`]TuTuTUNRlENRlENRlENRlE~6~6rrrrrrrrrrrr J>G>G>G${(_2v{u$L_`   T]  ]^9-` `]TMTUrrrNRlE~6@@@@@@@J%zum_5z8uuNRlE~6   J}>}>RdRdF@A@@...R$6..dHN@~He~7& AWak    " : D t !"""""+ Lh7& @V`j    9 D t !"""""+wSI._^JoiW7#tqpoYP!u߉߇߅p   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpkvjsgwl|cn:m}b3yflqhijzmkg, `f-, d P&ZE[X!#!X PPX!@Y 8PX!8YY Ead(PX! E 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B *! C +0%QX`PaRYX#Y! @SX+!@Y#PXeY-,#B#B#BCCQXC+C`BeY-,C E EcEb`D-,C E +#%` E#a d PX!0PX @YY#PXeY%#aDD-,EaD-,` CJPX #BY CJRX #BY- , b c#a C` ` #B#- , CUX CaB +YC%BC`B %B %B# %PXC%B #a*!#a #a*!C%B%a*!Y CG CG`b EcEb`#DC>C`B- ,ETX #B `a BB` +i+"Y- , +- , +-, +-, +-, +-, +-, +-, +-, +-, +-,+ETX #B `a BB` +i+"Y-,+-,+-,+-,+-,+-,+-,+-,+-,+- , +-!, `` C#`C%%QX# <`#e!!Y-",!+!*-#, G EcEb`#a8# UX G EcEb`#a8!Y-$,ETX#*0"Y-%,+ETX#*0"Y-&, 5`-',EcEb+EcEb+D>#8&*-(, < G EcEb`Ca8-),.<-*, < G EcEb`CaCc8-+,% . G#B%IG#G#ab#B**-,,%%G#G#aE+e.# <8--,%% .G#G#a #BE+ `PX @QX  &YBB# C #G#G#a#F`Cb` + a C`d#CadPXCaC`Y%ba# &#Fa8# CF% CG#G#a` Cb`# +#C`+%a%b&a %`d#%`dPX!#!Y# &#Fa8Y-., & .G#G#a#<8-/, #B F#G+#a8-0,%%G#G#aTX. <#!%%G#G#a %%G#G#a%%I%aEc#bcEb`#.# <8#!Y-1, C .G#G#a ` `fb# <8-2,# .F%FRX ,+*-5,,+# .F%FRX D ,h8RfZ6f"l2v$L,  F z !!6!f!"""# #6#R##$$@$%Z&b&&' ''0'B'T''''''(((*(<((((((()))))))********,&,8,J,\,n,,,,,-D-V-h-z----.X.j.|...//*/ >>.>>>>>>>????(?4?@?R?^?p????????@@ @2@D@T@f@x@@@@@@@AAA(A:ALAAAABBBB~CCDCnCCCDDD,D>DPDbDtDDDDDDDEEE(E:ELE^EpEEEFF@FFG&GPGGGGHHHHHIII$IVIJ(JlJJJK6DdU$+3!%!!D $hUD@@+@(M ?M @ +!!@.>0#@ M @ +!!!@@=@@000@F@C  V   U ? @+37##537#53!3!3#3#!#oZZuRRRRToZZZ@@@@ 19@6!0)(%$ >QO@11  +%654&''"5&'%%&&546353&''84\d@  Xiˀ)< cqаNr4h[eq@K+Gӈny V@QfXqN 4?K@H  WW W O  @65:85?6?,*"!   + ".54>2'2#"3".54>32'2#"qV*)UU)*V 8PV*(UaN|T8+V 8MhjIIjiw) 4Zb9MhjI1VzThv)!4[a9 HT@Q091>dO?P?O@ =<;:65(&HH % +6654&#"27'.'"&5%.54632>7!3".'!@_F:A?""zf{ ?. ,50>@M @ +!~@@00@@#@KPX@O?O@@WKOCY+".54>3"3@P[C) "A^[2I))I2@+[dɃjz㍥]??`T0@1T`>@@#HKPX@O?O@@WKOCY@ ##+52>54&4654.#52@2I))I2P[C) "A^@?`T0@1T`>+[dɃjz㍥]?jV@  ;] +'7%737W==Zb,ԄcZ@ +@(IUMA +5#53533#LLJK PX@dYM @@deM @Y@ +'265#!@E;(Cd ? @+!#5673?E{G$2@/=dO?M @$$#-+3>54&#"!5432!G6, c]7N)?5/@ KE%D5G%k6`k?@@SVCN0+>K PX@,\\WO?P@@.ddWO?P@Y@&$!  00 +"&55!2>54&#2654&#"!54632(HdH(wtTl2H(x}@V ? @  +!!!3#S@@4\5L@I(>dbWM ?P@+)'&%$#"  55 +"!32>45454.#"#!!632%@,#9)  (;%DdlWV7>d (3KO1 0)H1Y11 +=G00X<N@5\]stEp9w@ .>K PX@%\WO?O@@&dWO?O@Y@1/,*('%#99.+$2>544.#"".54>32!4&#"632nN) $0|D)\gG @deSmJlU&2h6`k?&'H'lb@nxF݀Kt~Ѧ]-$@!>M ? @+3!5!H'+{{@ !9?@<4(>WO?O@#"/-"9#9   +2>5#"2>54.""467&&546322C CdH((NrO))z\fVRQVe\'.WX<K PX@&\WO?P@@'dWO?P@Y@.,$"99 +274.""&5!32#".54>32zF)NnN) $0SmLlU&2hv\gG @d@j`66`k?&'H'lbnxF@.@+UIMA +!!@@@@8@5dUU @  +!'265#!@@E;(C@K PX@#\bWM @@$dbWM @Y@  +!!>54#"!54632?]oE0lT˶@&@cdK@Wv$Nj@g#L M >  d b  W  X  K O  CKIA?:8430.&$!NN +27&#" ! #"&'#"&&54>325!324.#"327tE/" Ntjs,X]`$9rjG-DjCBI t4tĊ{>:}^(3&3;tYeJDV ? @  +!!!!``@@ $4@1>WO ?O @$#"#!' +3 4.#326&##!2#@$I32!5.#"2>55!LqnEEnq}m7/H0>Y2 3UrR/1m@qyyp@J(95KP5-(?jeJ@hgF+,DjdB@@ҡT  &@#O ?O @  ! +3! !'32>5454.##鋍?Z8  '3D*@=7tKO @1:O.9 # @ .@+UM ?M @ +3!!!!!@@@ (@%UM ? @ +3!!!!@@``3|2=KPX@'dUO?O@@+dUO? ?O@Y@10/.-,&$ 33 +".5!2!5.#"32>55!5!#'`{rD }r: 2S9Nk9%7S6@^7 @KFxΆK%6?[X7!9mW@gkN?!2OzxM@@ &@#U ? @ +3!!!!!@@@ ? @ +3!@ ?O @ +152>5!#S]< Ut;_T@zt3 %@" > ? @ +3!!!@@@@@ ?N @+3!!@ &@# > ? @ +3!!!#bb\zz #@ > ? @ +33!#6TX`<'@$O?O@  +".54>3 $ 654& Nr44r5rgffRՍқNv՟SҢ  (@%WO ? @  #"( +32>54.##! ##@WoU%Kwb@7fO`wL`< %.@+">SO?O@)#+$ 654& "&'#".54>3 3gffm1+9r44ru0 ]RՍқNvt*5@0@->UO ? @"# +326&##! ##@@@"rn 2(@R)/@,>O?O@ )) +"'%3254.'&&54632&'&&#"S@4-Xiws\d@@9aQ1$EՈ%@"zg\f @M ? @+!!5!!?rr@ ?O@+".5!2>5!sH5aa5Hs>o{SpL22LpS{èo   @> ? @+!!!BD@@  &@# > ? @+!!!!! KA??A@@@@@ %@" > ? @ +3!!#><_@["@> ? @+!!!}@@>~ ,@)=M ?M @ +35!5!!>@@@'@$UIMA+!!!@@@ ? @ +!!@'@$UIMA+5!!5!@@@@>f]+!!@@@M @ +15!@g @ +!Tu5@">0=K PX@\O?O@KPX@ dO?O@@$dO? ?O@YY@/.)'%$ 55 +%266767"&54>76754&#"!6632#'3J,>"k?FTh 6JB9ʴ!"00H b .3/D%ҹt][a$)\ak[P ݵx(,A#u-KPX@>@>YKPX@ ?O?O@@! ?O? ?O@Y@ --  +%2>54&4.#""&'!!>325)7 0"jVcNx:$$EJ-AfB. -Es32!5."32>55!]R23Q]ʰ 5L4  4%"1,Y>dgSTfc>"$0HH'-TY:|7SM*&@7*!et=],KPX@%*>@%*>YKPX@ ?O?O@@! ?O? ?O@Y@)('&!,, +%27&#"".'&7>32!!5]cVj&4  4UE"0@Z7+KD)!:x(%3%GK3@d]2`f/BktYS6 1&#~t32!32>75335.#"]Q24SZR}S7 / (4   4&'5 @gkTTd^9+Wj_@ %OLE4>>/63M3LL(*OL58x`@ >K!PX@O ?M? @@WM? @Y@$&+3#5354>32&&#"3# %?iI>` >@*@1Qqi?%  QO`  !oKPX@DQY.>@DQY.>YKPX@)dWO? P @K$PX@3dWO?O? P @@0dW  TO?O@YY@%" cbXWOKJEA?"o%o !% + 4.#"2>54''26".5467&&54>7&54663267:3"#"#'*@"B./B!+8)%'7+->,; 0d ?? @#$+3!>32!4&#"u9HHRf!7NZv471xWB>K KK!PX@M ?? @@U? @Y@ +!!@@ >KPX@M ??P@K!PX@TM ?@@UT@YY@  +!"'5325!T,#u )@& > ?? @ +3!!!u@'Ak@vv@ ? @ +3!vuu3[@ 2%>KPX@O? @@?O? @Y@33('$" +3!6326632!454.#"!4544.#"u\V?o 3&  'N+  ^bQXSV %:&J** ] !$/ -QuuV@ >KPX@d? @@d?? @Y@ #$+3!>32!4&#"u9HHRf&:!A 471xWC= ]] +@O?O@+ &546 2>54."de6)  )6)  -"@%%%%@"--"@%%%%@"-u4@3>KPX@ d?P?@KPX@$d??P?@@$d?P?M@YY@4420#!  +%2>5'4.#"!>32#"'5)7  1 X;+C$AfB. -EsJ~@4>YKPX@ d?P?@KPX@$d??P?@@$d?P?M@YY@77650.#!  +%27.#"#".554>325!e[  1   59yNJsE-*ErK+KE'"4 (J9_4/LFCea5;JKvTWa;2%$uhKPX@ ><@ >YKPX@O? @@?O? @Y@ ##+3!6632&#"u'[&GGPbLq`OEE,0@->O?O@ ,, +"&'732654'%.54632.#"Ş#E{=C@+:<ѯS[;/@'=C@+=:@C=Y;3J\65`uH@&7@#C=<0"?Sf:6vh@ >K!PX@ ?M?P@@fM?P@Y@  +"&'#53!3#327ؗ*@:`@MH rrmKPX@ >@ >YKPX@d?@@d? ?@Y@  +"&5!32>7!!5,Tf1'(')&#H7RwXC (2 $!3T @>? @+!334? &@# >? @ +!333#㎆ꈌ숊4>rQ '@$ >? @ +3533!fTB >KPX@?P@@T@Y@ +52>5!67!#TL[.  5C θ3=6I+ieuG ,@)=M?M @ +35!5!!G@@@8[+>KPX@WO?O@@ WWKOCY@ 87+".546.#2>&54>3"3b( "& +k':)_a(>(@Jʒ ;2$ ! ;(I'Ok+ ""=7.ZZ)Œ88_1@ @@IMA +3@@<e>KPX@WO?O@@!WWKOCY@<<.-,+ +52>4545467&4.#523"@0$ a_ '0T &* )"7*>dbIMA8810&%!  +%5.554>753%4&'>5!#  $X~L-/M|UN 4!a '=4Z3kbK PX@'\UO?M  @@(dUO?M  @Y@&&$( +157#5354>32#4.#"!!!!:PsI6*!0?AS~hd?&дN5LS,#2P>+i"9@6" >< ;SO@#+264&#"'7&547'76 7' 'ee[\d}ZV??VZVa aVZW@@WZVaavvuZV`aVZV??VZWbdVZV??0=@: >V  U ?  @ +!#535#53!!3#3#ٙ1PϦ^))@&UM @ +33^yuyt`` I3@0D21$>O?O@86-+II +654.'".'732654&'%.5467.54632.#"`/A`&@R[<E{=C#3 #4.#"32>53h>Ȗh0Ls:[=+  $@nM)%  $#.nFnuЗXC-NLs^EW|{L/):@! +":%B$@,=+2!$E>.l_ (kK0PX@ &>@ &>YK PX@\WO @K PX@\WO@K PX@\WO @KPX@\WO@KPX@\WO @KPX@\WO@K0PX@dWO@@"dW ?O@YYYYYYY@ %$ ( (   +%2675"&54>76754#"#6632#5v$<_:%'Sn5KW LZOj9k,3/9'-nSDcF^-]vVo5D@@  $+%5 5@@@@EKPX@[IMA@gIMAY@ +5!5!@IMA +5!F!*6U@R1> dWWUO @+++6+65432.,*($"  +"$&54$32$ 654.#"32654&##3 ##h>Ȗh0Ls,!]D9BG}RnFnuЗXGaKMDZ{-@IMA +5!{ @SO@#+ &546 264&#"h%ee[\dγͲ$vvu;@8U UM @  +35!5#53533#@@@@#a=KPX@ \WIMA@!dWIMAY@ ##+5>54."#462!@)!  KX@@ 54&5$ $yyGj#2K PX@;\ \  Z\WWKPDKPX@=\  d  b\WWKPD@?d  d  bdWWKPDYY@ /. +"&532>54춮."#462 8HI7 gYZfz$ $G98H$ $yy[b^\y@g @ +!rr,@) >O ?M@"+32>7!!5!r1'(')$yc (2 $?J @W @ $+!"&5463!##~ٲll@@@IMA +!@@*@'>fKPDA+5232654.'53#@IDP,,/EZ2#98RA.'  .B)&;( @,@)>dIMA+#5673X@@Smc  5*@'WO@'%55   +"&54632'2>4554544.#"½!  #* .? -75* ,%?,%+3G))@@  $+%%%@@@@@EU _@\  >=  d  UV ?M   @  +3!533#%!#5673T?,X@@@SmBj#'/@ +>=KPX@2d\I W ?M   @KPX@3d \ W   U ?M   @@4d  d W   U ?M   @YY@(($$(/(/.-*)$'$'&%## +%5>54."#462!!#5673j)!  KX@H?X@ 54&5$ $yyGj#@SmG DI@ >=K PX@R \  \ Z  \  W  XV ? O ?M @KPX@T \  d  b  \  W  XV ? O ?M @@V  d  d  b  d  W  XV ? O ?M @YY@)A@@?;:8710('&%  +3!533#!"&532>54춮."#462 T? 8HI7 gYZf@z$ $G98H$ $yy[b^\yP1">K PX@%dZM?P @KPX@&dbM?P @@$dbUP @YY@"" +53 4>75332>53W݆8L' V3A!p*: ۷R_)VAU,S'eDed/~#@I/&$CP '+&$vP '+&$f '+&$l0 ̰'+x&$jPx x'+ A&$j '+@@@=>UUM ?M  @ +3!!!!!!!@@@@`)&&z '+@&(C  '+@&(v  '+@&(f` '+@x&(j x x'+&,CL '+L&,vL '+L&,f '+Lx&,jLx x'+" (6@3UO ?O @('&%$" ! +3#53! !'32>5454.##3#^^~?Z8  '3D*{T@=7tKO @1:O.9 # &1l` ̰'+`<&2C '+`<&2v '+`<&2f '+`<&2ln ̰'+`<x&2jx x'+@@ $+'7'77'@`d<+D@A! +> <;O?O@*(  +%2654''&#"'7&4>327#"'Ng1}P4Qf Z-4rnO*].5rhO Cm~қNwv՟Srr&8C '+rr&8v '+rr&8f '+rrx&8jx x'+&<v= '+H,@)WW ? @  $!$ +32654&##332##D-ME\*e%>KPX@WO?O @@#WO? ?O@Y@**#(+52>544>54.#"!4632Oe88P, "D41A! Żlo%UpV6_k@@8)I  d>YK PX@1\  \ WO? P @KPX@2\  d WO? P @K)PX@3d  d WO? P @@=d  d WO?O? P @YYY@ ca_^TRHF<:6421.,hh'+3>54&#"27&'"&54>754&#"!6632663232>54453#"'`u(,'>B) TW'8MQ*k0RMuZC6J2;˳_&X**>6M:V/ &S 6Og 3)Oi9-L*'c4P5ҹtAnOC+(ak:T>PHCU'@/% +%PNE5-#?$".=<02&Fz '+[^&HC '+[^&Hv '+[^&Hf] '+[^x&Hjx x'+&C@ '+@&v@ '+@&f '+@x&j@x x'+@8R@O/.10'&%$">O?O?O@,+*) 88  +%2>5&#"".54>324'5%&47@7N)Ku (E.jb<6TXZEE@HJ`\5i6`k?nIPQY*Dsue}NR@efJ Xo5$|ӥ^uu&Ql ̰'+]]&RC '+]]&Rv '+]]&Rf] '+]]&Rl ̰'+]]x&Rjx x'+o ?@<UUIMA   +!5!!@@o" /B@?'$/>&%<;O?O@ .,#!  " +&#"2>5'7&4>327#"'R) ) !LT(XikXRW\p^@ZI-"@%%-"@%%cbb3n}A(prr&XC2 '+rr&Xv2 '+rr&Xfr '+rrx&Xj2x x'+T&\v '+f+I@F*>O?O?M @++(&  +%2>54.#"!>32#"&'@)7 0"jVc$$EJ-AfB. +EuKNx:32!5.#"2>55!xqnEEnq}m7/H0>Y2 3UrR/1mxv@qyyp@J(95KP5-(?jeJ@hgF+,DjdB@@ҡT02x5K PX@-\bUO?O @@.dbUO?O @Y@0/)'55 +!".'&7>32!5."32>55!]]R23Q]ʰ 5L4  4%"1,Yxv>dgSTfc>"$0HH'-TY:|7SM*&@7*!et=`)&&g '+02&Fg] '+ &'g '+]6&G '+"` =KPX@.;>@.; >YKPX@*dU ?? P @@.dU ?? ? P @Y@:9876543210/*(== +%27&#"".5454>32!5!5!3#!5]cVj'  ('JsF, .BfB+KD)!:x(%3 #7,E,HT=XAJ4-KvT`daA01&#[$t55!5!#'{rD }r: 2S9Nk9%7S6@^7 @KxvFxΆK%6?[X7!9mW@gkN?!2OzxM@ x%sKPX@HU] 2 >@HU] 2 >YKPX@2  d U  WO? P @K$PX@<  d U  WO?O? P @@9  d U  W  TO?O@YY@#)&gf\[SONIEC&s)s%"  +! 4.#"2>54''26".5467&&54>7&54663267:3"#"#'r@"B./B!+8)%'7+->,; 0@W\ A* >YK PX@6Zf V   W O ?O@KPX@5ff V   W O ?O@K$PX@?ff V   WO ? O ?O@@<ff V   WSO ? O  @YYY@#85  edca[ZYXTR5v8v4 1  %+ 4.#"4&&>3"32>54'&''26".5467&&54>7&54663263"#"'#A@"B./B!2 )<&@E;R+8)%'7+->,; 0 >dU ??  @#$ +3#535!3#>32!4&#"9HHRf!7NZ471xWB>K m&,l, ̰'+a&l ̰'+3&,q '+'&q '+L&,h '+@&h '+&,k'+&Lk'+x)@&U ? @ +!!x@? @ +3!'-,'ML&-f '+p&ef '+'p. հ'+u'ppN հ'+ %@" >? @ +3!!!@vkJ@&/v  '+v:&Ov: '+@'p;/ հ'+vv&pQO հ'+&/ '+v&O '+X'&/y '+v9&Oy1q +@( > ?N @ +357!%! ZGGΔ , %@" > ? @  +357!7<<IF&1v '+uu&Qv5 '+'p1 հ'+uu'pPQ հ'+&1g '+uu&Qgu '+`<&2q '+]]&Rq '+`<&2h '+]]&Rh] '+`<&2m '+]&Rm0 '+@ "KPX@ !>@ ! >YKPX@"UO?O @@6UO?M ? M ?O @Y@  ""% +$ 65&&#" !25!!!!!!5wxwP@@@LRR5c@ ?b>K PX@)  \ UO?P @@*  d UO?P @Y@76a_]\USJIB@><6c7c) +!454.#"2>54.""&54632632!32>45!#"' *& e6)  )6)  DβΰPJQ}S7 / * ˴LL&*L+9 !7'D$!-"@%%%%@"--"@%%%%@"-+Wk^@ %OLE4.D"'쒒@&5v '+u&Uv '+@'p5 հ'+u&pPU հ'+@&5g '+U&Ug '+R&6vr '+EE&Vv '+R&6f '+EE&VfP '+R&6zr '+EE&Vz '+R&6g '+EE&VgP '+'z7'+6'zW '+&7g? '+6&W '+rr&8l ̰'+rr&Xl ̰'+rr&8q '+rr&Xq '+rr&8h '+rr&Xhr '+rr x&8j2 '+rrx&Xj '+rr&8m '+r&XmE '+rr&8k` '+rr&Xk '+  &:f '+&Zf '+&<f} '+T&\f* '+x&<j=x x'+>~&=v '+G&]v '+>~x ?@< =UM ?M @   +!5!5!!^@@xGx ?@< =UM?M @   +!5!5!! >@x>~&=g^ '+G&]g '+&t@>K!PX@SO ?M@@WSM@Y@  && +"'53265#5354>32&&#"3#>`<@* %@gI>` >@* $@h QO@Nod<#  QO`@Ood<"'8m' '+t'9m' '+]!'9G '+7'-7/'M7/v{'MO'-1'M1uv'MQ'=m't']m']!']G`` 'v* '+ 'vJ 'n5 $  '+u &n D '+'o$ '+Tu&opD '+ @ 'n (  '+ ^ &n H '+@'o`( '+[^&o`H '+9 'n1 ,  '+- 'n%  '+L'o, '+@&o '+`< 'ns 2  '+ ] &n R '+`<'o2 '+]]&o`R '+M@ 'nE 5  '+ &n U '+@&5o '+U&Uo '+rr 'n 8  '+r &n X '+rr&8o '+rr&Xor '+Rt'p6 ð'+EtE'p V ð'+'p7 հ'+6tv'p3W ð'+ E@ >KPX@?P@@T@Y@     +"'5325!T,#@ @>g @+!#@@ @>g @+33@ @T @    +"&53265311fZ[eȸ@@@IMA +!@@@!@WKOC+"&462264&"ꋋxDDxD茌 EvEDx )@&fKPD  +".546733263e/;O1<%& ^^,0O%2lr>f(JAKPX@TO @KPX@\TO @K!PX@\T ?O @K%PX@!\\TO @K&PX@"d\TO @@#ddTO @YYYYY@  +"&&#"#46323253e0e^)0si:13s,+CtVEu#@ M @ +!!3ZXΦ#@ M @ +3!!.XZ@ >KPX@[O @@gO @Y@ "+4632#4&"@11ȸfZ[e%%JK PX@dYM@@deM@Y@ +'265#!e@E;(C3"3*H2@E; ;UY7#>?4K!PX@ M@@IMAY@  +!~@@}5@2d R @ +4&54>3"3!4&54>3"3*H2@E;*H2@E; ;UY7#@CKPX@M@@IMAY@ +!!!@@=@@d &@#UM @ +!#5333#,Z"daK"PX@" UM? M  @@ U U M  @Y@ +!#53#5333#3#,^ S @KOC   +"&54632{|{S@@$+%5@@@@$+7%@@@@m@f] +3@@ 6@3>=IUMA  +3!533#T@?O@Ld  dW U   U O@;:53-,+*)(!%+".'#535#53>32##"3#3#32>53M^=DDDF;\^r^,)  %9&+>!;]4[cc]6Jx##2 ;"!0`R6fc $+#5!#!33##;hkgZ@;++@$+3!!!@@$$+5!$m$+3$+"'532654>32&&#">`<@* %@gI>` >@* $@h QONod<#  QO Ood<"."@ >K!PX@+O ? O ?M?  @@$K UM?  @Y@ +!#5354>32&&#"!!!" %?iI>` >@*t@@1Qqi?%  QO`@.c@ >KPX@O ?M? @@WM? @Y@"6 +3#5354>32!&#"3# %?iIm^@*@1Qqi?% oQO`./ $+3#5354>32&&#"!54>32&&#"3#!! %?iI>` >@*X %?iI>` >@*@1Qqi?%  QO`1Qqi?%  QO`@ $+%!ݨ5<<3+R G6'WW.65$+!#5354>32&&#"!54>32&&#"!!!!!6x %?iI>` >@*2 %?iI>` >@*V@@1Qqi?%  QO`1Qqi?%  QO`@@.2 $+3#5354>32&&#"!54>32!&#"3#!! %?iI>` >@* %?iIi}V@*@1Qqi?%  QO`1Qqi?% oQO`@n;;A"HjNx&   ;  j v3    D  #  L ' ' v3 &? &? 4e Copyright (c) 2011-12 by vernon adams. All rights reserved.OswaldRegularvernonadams: Oswald Light: 2011-12Oswald RegularVersion 2.002; ttfautohint (v0.92.18-e454-dirty) -l 8 -r 50 -G 200 -x 0 -w "g"Oswald-RegularOswald is a trademark of vernon adams.vernon adamsnewtypography.co.ukhttp://scripts.sil.org/OFLCopyright (c) 2011-12 by vernon adams. All rights reserved.OswaldRegularvernonadams: Oswald Light: 2011-12Oswald RegularVersion 2.002; ttfautohint (v0.92.18-e454-dirty) -l 8 -r 50 -G 200 -x 0 -w "g"Oswald-RegularOswald is a trademark of vernon adams.vernon adamsnewtypography.co.ukhttp://scripts.sil.org/OFL=W̏|F  $2DFLTlatnkern VM*B (~8Nx******    @@@@*** @ @NNNp f8*8BM$'()-./379DEFGHIJKSUYZ[\ !Kc$9:<3KJUVX (*,XFJV (*,JV!')+`tFMY\MIRX JRX\MY\ FXW"MG JVM[R R(*,JV!')+;!JM[FJRU FR&`FJKLR\UV\\\\\W \(*,*4F\G n"L\$')-./2345789:<EGIJKNPQRSUWYZ[\ !3KUWXY[\_cdI$$''))--..//22334455 77 88 99 ::<<EEGGIIJJKKNNPQRSUUWWYYZZ[[ \\! !!      !! 33KKUUWWXXYY [[ \\__ cc ddE $$&&**2244778899::;;<< DD EE FH JJMMRR TT UUVVXXYY[[\\       33 KKLL PP UUWWXX __``cc ""DFLTlatngoconvey-1.6.1/web/client/resources/ico/000077500000000000000000000000001266412531300201725ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/ico/goconvey-buildfail.ico000066400000000000000000000353561266412531300244640ustar00rootroot00000000000000 h6  00 %F(   0تت0 00تتتت00 0تت0( @  XǪ骪骪ǪX $$ #ѪѪ#0說說0#說說# ѪѪ $$ XXǪǪ骪骪骪骪ǪǪXX $$ ѪѪ #說說#0說說0#ѪѪ# $$ XǪ骪骪ǪX ??(0` $ #Xڪ몪몪ڪX#mƪ񪪪񪪪ƪm몪몪 t󪪪󪪪t -ŪŪ-O쪪쪪OkkkkOO-쪪쪪- ŪŪ tt󪪪󪪪몪몪mmƪƪ#񪪪񪪪#XXڪڪ몪몪몪몪ڪڪXX#񪪪񪪪#ƪƪmm몪몪󪪪󪪪tt ŪŪ -쪪쪪-OOkkkkO쪪쪪O-ŪŪ- t󪪪󪪪t 몪몪mƪ񪪪񪪪ƪm#Xڪ몪몪ڪX#????goconvey-1.6.1/web/client/resources/ico/goconvey-fail.ico000066400000000000000000000353561266412531300234440ustar00rootroot00000000000000 h6  00 %F(   00    0000    00( @   XX $$  ##00##  $$  XXXX  $$  ##00##  $$ XX ??(0` $ #XX#mm tt --OOkkkkOO--  ttmm##XXXX##mmtt  --OOkkkkOO-- tt mm#XX#????goconvey-1.6.1/web/client/resources/ico/goconvey-ok.ico000066400000000000000000000353561266412531300231420ustar00rootroot00000000000000 h6  00 %F(   ,Z0,Z,Z,Z,Z,Z,Z,Z0,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z0,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z0,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z0,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z0,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z0,Z,Z,Z,Z,Z,Z,Z0( @  ,Z ,ZX,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z ,Z$,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z$,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z#,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z#,Z0,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z0,Z#,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z#,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z$,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z$,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z$,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z$,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z#,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z#,Z0,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z0,Z#,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z#,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z$,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z$,Z ,ZX,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z ??(0` $ ,Z,Z#,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z#,Z,Z,Z,Zm,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zm,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Zt,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zt,Z ,Z-,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z-,Z,ZO,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZO,Z,Z,Zk,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zk,Z,Z,Zk,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zk,Z,ZO,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZO,Z-,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z-,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Zt,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zt,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zm,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zm,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z#,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z#,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z#,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z#,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zm,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zm,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zt,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zt,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z ,Z-,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z-,ZO,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZO,Z,Zk,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zk,Z,Z,Zk,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zk,Z,Z,ZO,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZO,Z,Z-,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z-,Z ,Zt,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zt,Z ,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zm,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Zm,Z,Z,Z,Z#,ZX,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,ZX,Z#,Z????goconvey-1.6.1/web/client/resources/ico/goconvey-panic.ico000066400000000000000000000353561266412531300236230ustar00rootroot00000000000000 h6  00 %F(   00 0000 00( @  XX $$ ##00## $$ XXXX $$ ##00## $$ XX ??(0` $ #XX#mm tt --OOkkkkOO-- ttmm##XXXX##mmtt --OOkkkkOO-- tt mm#XX#????goconvey-1.6.1/web/client/resources/js/000077500000000000000000000000001266412531300200345ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/js/composer.js000066400000000000000000000070361266412531300222270ustar00rootroot00000000000000var composer = { tab: "\t", template: "", isFunc: function(scope) { if (!scope.title || typeof scope.depth === 'undefined') return false; return scope.title.indexOf("Test") === 0 && scope.depth === 0; }, discardLastKey: false }; $(function() { // Begin layout sizing var headerHeight = $('header').outerHeight(); var padding = $('#input, #output').css('padding-top').replace("px", "") * 2 + 1; var outputPlaceholder = $('#output').text(); $(window).resize(function() { $('#input, #output').height($(window).height() - headerHeight - padding); }); $(window).resize(); // End layout sizing $('#input').keydown(function(e) { // 13=Enter, 16=Shift composer.discardLastKey = e.keyCode === 13 || e.keyCode === 16; }).keyup(function(e) { if (!composer.discardLastKey) generate($(this).val()); }); composer.template = $('#tpl-convey').text(); tabOverride.set(document.getElementById('input')); $('#input').focus(); }); // Begin Markup.js custom pipes Mark.pipes.recursivelyRender = function(val) { return !val || val.length === 0 ? "\n" : Mark.up(composer.template, val); } Mark.pipes.indent = function(val) { return new Array(val + 1).join("\t"); } Mark.pipes.notTestFunc = function(scope) { return !composer.isFunc(scope); } Mark.pipes.safeFunc = function(val) { return val.replace(/[^a-z0-9_]/gi, ''); } Mark.pipes.properCase = function(str) { if (str.length === 0) return ""; str = str.charAt(0).toUpperCase() + str.substr(1); if (str.length < 2) return str; return str.replace(/[\s_][a-z]+/g, function(txt) { return txt.charAt(0) + txt.charAt(1).toUpperCase() + txt.substr(2).toLowerCase(); }); } Mark.pipes.showImports = function(item) { console.log(item); if (root.title === "(root)" && root.stories.length > 0) return 'import (\n\t"testing"\n\t. "github.com/smartystreets/goconvey/convey"\n)\n'; else return ""; } // End Markup.js custom pipes function generate(input) { var root = parseInput(input); $('#output').text(Mark.up(composer.template, root.stories)); if (root.stories.length > 0 && root.stories[0].title.substr(0, 4) === "Test") $('#output').prepend('import (\n\t"testing"\n\t. "github.com/smartystreets/goconvey/convey"\n)\n\n'); } function parseInput(input) { lines = input.split("\n"); if (!lines) return; var root = { title: "(root)", stories: [] }; for (i in lines) { line = lines[i]; lineText = $.trim(line); if (!lineText) continue; // Figure out how deep to put this story indent = line.match(new RegExp("^" + composer.tab + "+")); tabs = indent ? indent[0].length / composer.tab.length : 0; // Starting at root, traverse into the right spot in the arrays var curScope = root, prevScope = root; for (j = 0; j < tabs && curScope.stories.length > 0; j++) { curScope = curScope.stories[curScope.stories.length - 1]; prevScope = curScope; } // Don't go crazy, though! (avoid excessive indentation) if (tabs > curScope.depth + 1) tabs = curScope.depth + 1; // Only top-level Convey() calls need the *testing.T object passed in var showT = composer.isFunc(prevScope) || (!composer.isFunc(curScope) && tabs === 0); // Save the story at this scope curScope.stories.push({ title: lineText.replace(/"/g, "\\\""), // escape quotes stories: [], depth: tabs, showT: showT }); } return root; } function suppress(event) { if (!event) return false; if (event.preventDefault) event.preventDefault(); if (event.stopPropagation) event.stopPropagation(); event.cancelBubble = true; return false; } goconvey-1.6.1/web/client/resources/js/config.js000066400000000000000000000010601266412531300216340ustar00rootroot00000000000000// Configure the GoConvey web UI client in here convey.config = { // Install new themes by adding them here; the first one will be default themes: { "dark": { name: "Dark", filename: "dark.css", coverage: "hsla({{hue}}, 75%, 30%, .5)" }, "dark-bigtext": { name: "Dark-BigText", filename: "dark-bigtext.css", coverage: "hsla({{hue}}, 75%, 30%, .5)" }, "light": { name: "Light", filename: "light.css", coverage: "hsla({{hue}}, 62%, 75%, 1)" } }, // Path to the themes (end with forward-slash) themePath: "/resources/css/themes/" }; goconvey-1.6.1/web/client/resources/js/convey.js000066400000000000000000000040761266412531300217040ustar00rootroot00000000000000var convey = { // *** Don't edit in here unless you're brave *** statuses: { // contains some constants related to overall test status pass: { class: 'ok', text: "Pass" }, // class name must also be that in the favicon file name fail: { class: 'fail', text: "Fail" }, panic: { class: 'panic', text: "Panic" }, buildfail: { class: 'buildfail', text: "Build Failure" } }, frameCounter: 0, // gives each frame a unique ID maxHistory: 20, // how many tests to keep in the history notif: undefined, // the notification currently being displayed notifTimer: undefined, // the timer that clears the notifications automatically poller: new Poller(), // the server poller status: "", // what the _server_ is currently doing (not overall test results) overallClass: "", // class name of the "overall" status banner theme: "", // theme currently being used packageStates: {}, // packages manually collapsed or expanded during this page's lifetime uiEffects: true, // whether visual effects are enabled framesOnSamePath: 0, // number of consecutive frames on this same watch path layout: { selClass: "sel", // CSS class when an element is "selected" header: undefined, // container element of the header area (overall, controls) frame: undefined, // container element of the main body area (above footer) footer: undefined // container element of the footer (stuck to bottom) }, history: [], // complete history of states (test results and aggregated data), including the current one moments: {}, // elements that display time relative to the current time, keyed by ID, with the moment() as a value intervals: {}, // ntervals that execute periodically intervalFuncs: { // functions executed by each interval in convey.intervals time: function() { var t = new Date(); var h = zerofill(t.getHours(), 2); var m = zerofill(t.getMinutes(), 2); var s = zerofill(t.getSeconds(), 2); $('#time').text(h + ":" + m + ":" + s); }, momentjs: function() { for (var id in convey.moments) $('#'+id).html(convey.moments[id].fromNow()); } } }; goconvey-1.6.1/web/client/resources/js/goconvey.js000066400000000000000000001021001266412531300222150ustar00rootroot00000000000000$(init); $(window).load(function() { // Things may shift after all the elements (images/fonts) are loaded // In Chrome, calling reframe() doesn't work (maybe a quirk); we need to trigger resize $(window).resize(); }); function init() { log("Welcome to GoConvey!"); log("Initializing interface"); convey.overall = emptyOverall(); loadTheme(); $('body').show(); initPoller(); wireup(); latest(); } function loadTheme(thmID) { var defaultTheme = "dark"; var linkTagId = "themeRef"; if (!thmID) thmID = get('theme') || defaultTheme; log("Initializing theme: " + thmID); if (!convey.config.themes[thmID]) { replacement = Object.keys(convey.config.themes)[0] || defaultTheme; log("NOTICE: Could not find '" + thmID + "' theme; defaulting to '" + replacement + "'"); thmID = replacement; } convey.theme = thmID; save('theme', convey.theme); var linkTag = $('#'+linkTagId); var fullPath = convey.config.themePath + convey.config.themes[convey.theme].filename; if (linkTag.length === 0) { $('head').append(''); } else linkTag.attr('href', fullPath); colorizeCoverageBars(); } function initPoller() { $(convey.poller).on('serverstarting', function(event) { log("Server is starting..."); convey.status = "starting"; showServerDown("Server starting"); $('#run-tests').addClass('spin-slowly disabled'); }); $(convey.poller).on('pollsuccess', function(event, data) { if (convey.status !== "starting") hideServerDown(); // These two if statements determine if the server is now busy // (and wasn't before) or is not busy (regardless of whether it was before) if ((!convey.status || convey.status === "idle") && data.status && data.status !== "idle") $('#run-tests').addClass('spin-slowly disabled'); else if (convey.status !== "idle" && data.status === "idle") { $('#run-tests').removeClass('spin-slowly disabled'); } switch (data.status) { case "executing": $(convey.poller).trigger('serverexec', data); break; case "idle": $(convey.poller).trigger('serveridle', data); break; } convey.status = data.status; }); $(convey.poller).on('pollfail', function(event, data) { log("Poll failed; server down"); convey.status = "down"; showServerDown("Server down"); }); $(convey.poller).on('serverexec', function(event, data) { log("Server status: executing"); $('.favicon').attr('href', '/favicon.ico'); // indicates running tests }); $(convey.poller).on('serveridle', function(event, data) { log("Server status: idle"); log("Tests have finished executing"); latest(); }); convey.poller.start(); } function wireup() { log("Wireup"); customMarkupPipes(); var themes = []; for (var k in convey.config.themes) themes.push({ id: k, name: convey.config.themes[k].name }); $('#theme').html(render('tpl-theme-enum', themes)); enumSel("theme", convey.theme); loadSettingsFromStorage(); $('#stories').on('click', '.toggle-all-pkg', function(event) { if ($(this).closest('.story-pkg').data('pkg-state') === "expanded") collapseAll(); else expandAll(); return suppress(event); }); // Wireup the settings switches $('.enum#theme').on('click', 'li:not(.sel)', function() { loadTheme($(this).data('theme')); }); $('.enum#pkg-expand-collapse').on('click', 'li:not(.sel)', function() { var newSetting = $(this).data('pkg-expand-collapse'); convey.packageStates = {}; save('pkg-expand-collapse', newSetting); if (newSetting === "expanded") expandAll(); else collapseAll(); }); $('.enum#show-debug-output').on('click', 'li:not(.sel)', function() { var newSetting = $(this).data('show-debug-output'); save('show-debug-output', newSetting); if (newSetting === "show") $('.story-line-desc .message').show(); else $('.story-line-desc .message').hide(); }); $('.enum#ui-effects').on('click', 'li:not(.sel)', function() { var newSetting = $(this).data('ui-effects'); convey.uiEffects = newSetting; save('ui-effects', newSetting); }); // End settings wireup convey.layout.header = $('header').first(); convey.layout.frame = $('.frame').first(); convey.layout.footer = $('footer').last(); updateWatchPath(); $('#path').change(function() { // Updates the watched directory with the server and makes sure it exists var tb = $(this); var newpath = encodeURIComponent($.trim(tb.val())); $.post('/watch?root='+newpath) .done(function() { tb.removeClass('error'); }) .fail(function() { tb.addClass('error'); }); convey.framesOnSamePath = 1; }); $('#run-tests').click(function() { var self = $(this); if (self.hasClass('spin-slowly') || self.hasClass('disabled')) return; log("Test run invoked from web UI"); $.get("/execute"); }); $('#play-pause').click(function() { $.get('/pause'); if ($(this).hasClass(convey.layout.selClass)) { // Un-pausing if (!$('footer .replay').is(':visible')) $('footer .recording').show(); $('footer .paused').hide(); log("Resuming auto-execution of tests"); } else { // Pausing $('footer .recording').hide(); $('footer .paused').show(); log("Pausing auto-execution of tests"); } $(this).toggleClass("throb " + convey.layout.selClass); }); $('#toggle-notif').click(function() { log("Turning notifications " + (notif() ? "off" : "on")); $(this).toggleClass("fa-bell-o fa-bell " + convey.layout.selClass); save('notifications', !notif()); if (notif() && 'Notification' in window) { if (Notification.permission !== 'denied') { Notification.requestPermission(function(per) { if (!('permission' in Notification)) Notification.permission = per; }); } else log("Permission denied to show desktop notification"); } }); $('#show-history').click(function() { toggle($('.history'), $(this)); }); $('#show-settings').click(function() { toggle($('.settings'), $(this)); }); $('#show-gen').click(function() { var writer = window.open("/composer.html"); if (window.focus) writer.focus(); }); // Wire-up the tipsy tooltips $('.controls li, .pkg-cover-name').tipsy({ live: true }); $('footer .replay').tipsy({ live: true, gravity: 'e' }); $('#path').tipsy({ delayIn: 500 }); $('.ignore').tipsy({ live: true, gravity: $.fn.tipsy.autoNS }); $('.disabled').tipsy({ live: true, gravity: $.fn.tipsy.autoNS }); $('#logo').tipsy({ gravity: 'w' }); $('.toggler').not('.narrow').prepend(''); $('.toggler.narrow').prepend(''); $('.toggler').not('.narrow').click(function() { var target = $('#' + $(this).data('toggle')); $('.fa-angle-down, .fa-angle-up', this).toggleClass('fa-angle-down fa-angle-up'); target.toggle(); }); $('.toggler.narrow').click(function() { var target = $('#' + $(this).data('toggle')); $('.fa-angle-down, .fa-angle-up', this).toggleClass('fa-angle-down fa-angle-up'); target.toggleClass('hide-narrow show-narrow'); }); // Enumerations are horizontal lists where one item can be selected at a time $('.enum').on('click', 'li', enumSel); // Start ticking time convey.intervals.time = setInterval(convey.intervalFuncs.time, 1000); convey.intervals.momentjs = setInterval(convey.intervalFuncs.momentjs, 5000); convey.intervalFuncs.time(); // Ignore/un-ignore package $('#stories').on('click', '.fa.ignore', function(event) { var pkg = $(this).data('pkg'); if ($(this).hasClass('disabled')) return; else if ($(this).hasClass('unwatch')) $.get("/ignore", { paths: pkg }); else $.get("/reinstate", { paths: pkg }); $(this).toggleClass('watch unwatch fa-eye fa-eye-slash clr-red'); return suppress(event); }); // Show "All" link when hovering the toggler on packages in the stories $('#stories').on({ mouseenter: function() { $('.toggle-all-pkg', this).stop().show('fast'); }, mouseleave: function() { $('.toggle-all-pkg', this).stop().hide('fast'); } }, '.pkg-toggle-container'); // Toggle a package in the stories when clicked $('#stories').on('click', '.story-pkg', function(event) { togglePackage(this, true); return suppress(event); }); // Select a story line when it is clicked $('#stories').on('click', '.story-line', function() { $('.story-line-sel').not(this).removeClass('story-line-sel'); $(this).toggleClass('story-line-sel'); }); // Render a frame from the history when clicked $('.history .container').on('click', '.item', function(event) { var frame = getFrame($(this).data("frameid")); changeStatus(frame.overall.status, true); renderFrame(frame); $(this).addClass('selected'); // Update current status down in the footer if ($(this).is(':first-child')) { // Now on current frame $('footer .replay').hide(); if ($('#play-pause').hasClass(convey.layout.selClass)) // Was/is paused $('footer .paused').show(); else $('footer .recording').show(); // Was/is recording } else { $('footer .recording, footer .replay').hide(); $('footer .replay').show(); } return suppress(event); }); $('footer').on('click', '.replay', function() { // Clicking "REPLAY" in the corner should bring them back to the current frame // and hide, if visible, the history panel for convenience $('.history .item:first-child').click(); if ($('#show-history').hasClass('sel')) $('#show-history').click(); }); // Keyboard shortcuts! $(document).keydown(function(e) { if (e.ctrlKey || e.metaKey || e.shiftKey) return; switch (e.keyCode) { case 67: // c $('#show-gen').click(); break; case 82: // r $('#run-tests').click(); break; case 78: // n $('#toggle-notif').click(); break; case 87: // w $('#path').focus(); break; case 80: // p $('#play-pause').click(); break; } return suppress(e); }); $('body').on('keydown', 'input, textarea, select', function(e) { // If user is typing something, don't let this event bubble // up to the document to annoyingly fire keyboard shortcuts e.stopPropagation(); }); // Keep everything positioned and sized properly on window resize reframe(); $(window).resize(reframe); } function expandAll() { $('.story-pkg').each(function() { expandPackage($(this).data('pkg')); }); } function collapseAll() { $('.story-pkg').each(function() { collapsePackage($(this).data('pkg')); }); } function expandPackage(pkgId) { var pkg = $('.story-pkg.pkg-'+pkgId); var rows = $('.story-line.pkg-'+pkgId); pkg.data('pkg-state', "expanded").addClass('expanded').removeClass('collapsed'); $('.pkg-toggle', pkg) .addClass('fa-minus-square-o') .removeClass('fa-plus-square-o'); rows.show(); } function collapsePackage(pkgId) { var pkg = $('.story-pkg.pkg-'+pkgId); var rows = $('.story-line.pkg-'+pkgId); pkg.data('pkg-state', "collapsed").addClass('collapsed').removeClass('expanded'); $('.pkg-toggle', pkg) .addClass('fa-plus-square-o') .removeClass('fa-minus-square-o'); rows.hide(); } function togglePackage(storyPkgElem) { var pkgId = $(storyPkgElem).data('pkg'); if ($(storyPkgElem).data('pkg-state') === "expanded") { collapsePackage(pkgId); convey.packageStates[$(storyPkgElem).data('pkg-name')] = "collapsed"; } else { expandPackage(pkgId); convey.packageStates[$(storyPkgElem).data('pkg-name')] = "expanded"; } } function loadSettingsFromStorage() { var pkgExpCollapse = get("pkg-expand-collapse"); if (!pkgExpCollapse) { pkgExpCollapse = "expanded"; save("pkg-expand-collapse", pkgExpCollapse); } enumSel("pkg-expand-collapse", pkgExpCollapse); var showDebugOutput = get("show-debug-output"); if (!showDebugOutput) { showDebugOutput = "show"; save("show-debug-output", showDebugOutput); } enumSel("show-debug-output", showDebugOutput); var uiEffects = get("ui-effects"); if (uiEffects === null) uiEffects = "true"; convey.uiEffects = uiEffects === "true"; enumSel("ui-effects", uiEffects); if (notif()) $('#toggle-notif').toggleClass("fa-bell-o fa-bell " + convey.layout.selClass); } function latest() { log("Fetching latest test results"); $.getJSON("/latest", process); } function process(data, status, jqxhr) { if (!data || !data.Revision) { log("No data received or revision timestamp was missing"); return; } if (data.Paused && !$('#play-pause').hasClass(convey.layout.selClass)) { $('footer .recording').hide(); $('footer .paused').show(); $('#play-pause').toggleClass("throb " + convey.layout.selClass); } if (current() && data.Revision === current().results.Revision) { log("No changes"); changeStatus(current().overall.status); // re-assures that status is unchanged return; } // Put the new frame in the queue so we can use current() to get to it convey.history.push(newFrame()); convey.framesOnSamePath++; // Store the raw results in our frame current().results = data; log("Updating watch path"); updateWatchPath(); // Remove all templated items from the DOM as we'll // replace them with new ones; also remove tipsy tooltips // that may have lingered around $('.templated, .tipsy').remove(); var uniqueID = 0; var coverageAvgHelper = { countedPackages: 0, coverageSum: 0 }; var packages = { tested: [], ignored: [], coverage: {}, nogofiles: [], notestfiles: [], notestfn: [] }; log("Compiling package statistics"); // Look for failures and panics through the packages->tests->stories... for (var i in data.Packages) { pkg = makeContext(data.Packages[i]); current().overall.duration += pkg.Elapsed; pkg._id = uniqueID++; if (pkg.Outcome === "build failure") { current().overall.failedBuilds++; current().failedBuilds.push(pkg); continue; } if (pkg.Outcome === "no go code") packages.nogofiles.push(pkg); else if (pkg.Outcome === "no test files") packages.notestfiles.push(pkg); else if (pkg.Outcome === "no test functions") packages.notestfn.push(pkg); else if (pkg.Outcome === "ignored" || pkg.Outcome === "disabled") packages.ignored.push(pkg); else { if (pkg.Coverage >= 0) coverageAvgHelper.coverageSum += pkg.Coverage; coverageAvgHelper.countedPackages++; packages.coverage[pkg.PackageName] = pkg.Coverage; packages.tested.push(pkg); } for (var j in pkg.TestResults) { test = makeContext(pkg.TestResults[j]); test._id = uniqueID++; test._pkgid = pkg._id; test._pkg = pkg.PackageName; if (test.Stories.length === 0) { // Here we've got ourselves a classic Go test, // not a GoConvey test that has stories and assertions // so we'll treat this whole test as a single assertion current().overall.assertions++; if (test.Error) { test._status = convey.statuses.panic; pkg._panicked++; test._panicked++; current().assertions.panicked.push(test); } else if (test.Passed === false) { test._status = convey.statuses.fail; pkg._failed++; test._failed++; current().assertions.failed.push(test); } else if (test.Skipped) { test._status = convey.statuses.skipped; pkg._skipped++; test._skipped++; current().assertions.skipped.push(test); } else { test._status = convey.statuses.pass; pkg._passed++; test._passed++; current().assertions.passed.push(test); } } else test._status = convey.statuses.pass; var storyPath = [{ Depth: -1, Title: test.TestName, _id: test._id }]; // Maintains the current assertion's story as we iterate for (var k in test.Stories) { var story = makeContext(test.Stories[k]); story._id = uniqueID; story._pkgid = pkg._id; current().overall.assertions += story.Assertions.length; // Establish the current story path so we can report the context // of failures and panicks more conveniently at the top of the page if (storyPath.length > 0) for (var x = storyPath[storyPath.length - 1].Depth; x >= test.Stories[k].Depth; x--) storyPath.pop(); storyPath.push({ Depth: test.Stories[k].Depth, Title: test.Stories[k].Title, _id: test.Stories[k]._id }); for (var l in story.Assertions) { var assertion = story.Assertions[l]; assertion._id = uniqueID; assertion._pkg = pkg.PackageName; assertion._pkgId = pkg._id; assertion._failed = !!assertion.Failure; assertion._panicked = !!assertion.Error; assertion._maxDepth = storyPath[storyPath.length - 1].Depth; $.extend(assertion._path = [], storyPath); if (assertion.Failure) { current().assertions.failed.push(assertion); pkg._failed++; test._failed++; story._failed++; } if (assertion.Error) { current().assertions.panicked.push(assertion); pkg._panicked++; test._panicked++; story._panicked++; } if (assertion.Skipped) { current().assertions.skipped.push(assertion); pkg._skipped++; test._skipped++; story._skipped++; } if (!assertion.Failure && !assertion.Error && !assertion.Skipped) { current().assertions.passed.push(assertion); pkg._passed++; test._passed++; story._passed++; } } assignStatus(story); uniqueID++; } if (!test.Passed && !test._failed && !test._panicked) { // Edge case: Developer is using the GoConvey DSL, but maybe // in some cases is using t.Error() instead of So() assertions. // This can be detected, assuming all child stories with // assertions (in this test) are passing. test._status = convey.statuses.fail; pkg._failed++; test._failed++; current().assertions.failed.push(test); } } } current().overall.passed = current().assertions.passed.length; current().overall.panics = current().assertions.panicked.length; current().overall.failures = current().assertions.failed.length; current().overall.skipped = current().assertions.skipped.length; current().overall.coverage = Math.round((coverageAvgHelper.coverageSum / (coverageAvgHelper.countedPackages || 1)) * 100) / 100; current().overall.duration = Math.round(current().overall.duration * 1000) / 1000; // Compute the coverage delta (difference in overall coverage between now and last frame) // Only compare coverage on the same watch path var coverDelta = current().overall.coverage; if (convey.framesOnSamePath > 2) coverDelta = current().overall.coverage - convey.history[convey.history.length - 2].overall.coverage; current().coverDelta = Math.round(coverDelta * 100) / 100; // Build failures trump panics, // Panics trump failures, // Failures trump pass. if (current().overall.failedBuilds) changeStatus(convey.statuses.buildfail); else if (current().overall.panics) changeStatus(convey.statuses.panic); else if (current().overall.failures) changeStatus(convey.statuses.fail); else changeStatus(convey.statuses.pass); // Save our organized package lists current().packages = packages; log(" Assertions: " + current().overall.assertions); log(" Passed: " + current().overall.passed); log(" Skipped: " + current().overall.skipped); log(" Failures: " + current().overall.failures); log(" Panics: " + current().overall.panics); log("Build Failures: " + current().overall.failedBuilds); log(" Coverage: " + current().overall.coverage + "% (" + showCoverDelta(current().coverDelta) + ")"); // Save timestamp when this test was executed convey.moments['last-test'] = moment(); // Render... render ALL THE THINGS! (All model/state modifications are DONE!) renderFrame(current()); // Now, just finish up miscellaneous UI things // Add this frame to the history pane var framePiece = render('tpl-history', current()); $('.history .container').prepend(framePiece); $('.history .item:first-child').addClass('selected'); convey.moments['frame-'+current().id] = moment(); if (convey.history.length > convey.maxHistory) { // Delete the oldest frame out of the history pane if we have too many convey.history.splice(0, 1); $('.history .container .item').last().remove(); } // Now add the momentjs time to the new frame in the history convey.intervalFuncs.momentjs(); // Show notification, if enabled if (notif()) { log("Showing notification"); if (convey.notif) { clearTimeout(convey.notifTimer); convey.notif.close(); } var notifText = notifSummary(current()) convey.notif = new Notification(notifText.title, { body: notifText.body, icon: $('.favicon').attr('href') }); convey.notifTimer = setTimeout(function() { convey.notif.close(); }, 5000); } // Update title in title bar if (current().overall.passed === current().overall.assertions && current().overall.status.class === "ok") $('title').text("GoConvey (ALL PASS)"); else $('title').text("GoConvey [" + current().overall.status.text + "] " + current().overall.passed + "/" + current().overall.assertions); // All done! log("Processing complete"); } // Updates the entire UI given a frame from the history function renderFrame(frame) { log("Rendering frame (id: " + frame.id + ")"); $('#coverage').html(render('tpl-coverage', frame.packages.tested.sort(sortPackages))); $('#ignored').html(render('tpl-ignored', frame.packages.ignored.sort(sortPackages))); $('#nogofiles').html(render('tpl-nogofiles', frame.packages.nogofiles.sort(sortPackages))); $('#notestfiles').html(render('tpl-notestfiles', frame.packages.notestfiles.sort(sortPackages))); $('#notestfn').html(render('tpl-notestfn', frame.packages.notestfn.sort(sortPackages))); if (frame.overall.failedBuilds) { $('.buildfailures').show(); $('#buildfailures').html(render('tpl-buildfailures', frame.failedBuilds)); } else $('.buildfailures').hide(); if (frame.overall.panics) { $('.panics').show(); $('#panics').html(render('tpl-panics', frame.assertions.panicked)); } else $('.panics').hide(); if (frame.overall.failures) { $('.failures').show(); $('#failures').html(render('tpl-failures', frame.assertions.failed)); $(".failure").each(function() { $(this).prettyTextDiff(); }); } else $('.failures').hide(); $('#stories').html(render('tpl-stories', frame.packages.tested.sort(sortPackages))); $('#stories').append(render('tpl-stories', frame.packages.ignored.sort(sortPackages))); var pkgDefaultView = get('pkg-expand-collapse'); $('.story-pkg.expanded').each(function() { if (pkgDefaultView === "collapsed" && convey.packageStates[$(this).data('pkg-name')] !== "expanded") collapsePackage($(this).data('pkg')); }); redrawCoverageBars(); $('#assert-count').html(""+frame.overall.assertions+" assertion" + (frame.overall.assertions !== 1 ? "s" : "")); $('#skip-count').html(""+frame.assertions.skipped.length + " skipped"); $('#fail-count').html(""+frame.assertions.failed.length + " failed"); $('#panic-count').html(""+frame.assertions.panicked.length + " panicked"); $('#duration').html(""+frame.overall.duration + "s"); $('#narrow-assert-count').html(""+frame.overall.assertions+""); $('#narrow-skip-count').html(""+frame.assertions.skipped.length + ""); $('#narrow-fail-count').html(""+frame.assertions.failed.length + ""); $('#narrow-panic-count').html(""+frame.assertions.panicked.length + ""); $('.history .item').removeClass('selected'); if (get('show-debug-output') === "hide") $('.story-line-desc .message').hide(); log("Rendering finished"); } function enumSel(id, val) { if (typeof id === "string" && typeof val === "string") { $('.enum#'+id+' > li').each(function() { if ($(this).data(id).toString() === val) { $(this).addClass(convey.layout.selClass).siblings().removeClass(convey.layout.selClass); return false; } }); } else $(this).addClass(convey.layout.selClass).siblings().removeClass(convey.layout.selClass); } function toggle(jqelem, switchelem) { var speed = 250; var transition = 'easeInOutQuart'; var containerSel = '.container'; if (!jqelem.is(':visible')) { $(containerSel, jqelem).css('opacity', 0); jqelem.stop().slideDown(speed, transition, function() { if (switchelem) switchelem.toggleClass(convey.layout.selClass); $(containerSel, jqelem).stop().animate({ opacity: 1 }, speed); reframe(); }); } else { $(containerSel, jqelem).stop().animate({ opacity: 0 }, speed, function() { if (switchelem) switchelem.toggleClass(convey.layout.selClass); jqelem.stop().slideUp(speed, transition, function() { reframe(); }); }); } } function changeStatus(newStatus, isHistoricalFrame) { if (!newStatus || !newStatus.class || !newStatus.text) newStatus = convey.statuses.pass; var sameStatus = newStatus.class === convey.overallClass; // The CSS class .flash and the jQuery UI 'pulsate' effect don't play well together. // This series of callbacks does the flickering/pulsating as well as // enabling/disabling flashing in the proper order so that they don't overlap. // TODO: I suppose the pulsating could also be done with just CSS, maybe...? if (convey.uiEffects) { var times = sameStatus ? 3 : 2; var duration = sameStatus ? 500 : 300; $('.overall .status').removeClass('flash').effect("pulsate", {times: times}, duration, function() { $(this).text(newStatus.text); if (newStatus !== convey.statuses.pass) // only flicker extra when not currently passing { $(this).effect("pulsate", {times: 1}, 300, function() { $(this).effect("pulsate", {times: 1}, 500, function() { if (newStatus === convey.statuses.panic || newStatus === convey.statuses.buildfail) $(this).addClass('flash'); else $(this).removeClass('flash'); }); }); } }); } else $('.overall .status').text(newStatus.text); if (!sameStatus) // change the color $('.overall').switchClass(convey.overallClass, newStatus.class, 1000); if (!isHistoricalFrame) current().overall.status = newStatus; convey.overallClass = newStatus.class; $('.favicon').attr('href', '/resources/ico/goconvey-'+newStatus.class+'.ico'); } function updateWatchPath() { $.get("/watch", function(data) { var newPath = $.trim(data); if (newPath !== $('#path').val()) convey.framesOnSamePath = 1; $('#path').val(newPath); }); } function notifSummary(frame) { var body = frame.overall.passed + " passed, "; if (frame.overall.failedBuilds) body += frame.overall.failedBuilds + " build" + (frame.overall.failedBuilds !== 1 ? "s" : "") + " failed, "; if (frame.overall.failures) body += frame.overall.failures + " failed, "; if (frame.overall.panics) body += frame.overall.panics + " panicked, "; body += frame.overall.skipped + " skipped"; body += "\r\n" + frame.overall.duration + "s"; if (frame.coverDelta > 0) body += "\r\n↑ coverage (" + showCoverDelta(frame.coverDelta) + ")"; else if (frame.coverDelta < 0) body += "\r\n↓ coverage (" + showCoverDelta(frame.coverDelta) + ")"; return { title: frame.overall.status.text.toUpperCase(), body: body }; } function redrawCoverageBars() { $('.pkg-cover-bar').each(function() { var pkgName = $(this).data("pkg"); var hue = $(this).data("width"); var hueDiff = hue; if (convey.history.length > 1) { var oldHue = convey.history[convey.history.length - 2].packages.coverage[pkgName] || 0; $(this).width(oldHue + "%"); hueDiff = hue - oldHue; } $(this).animate({ width: "+=" + hueDiff + "%" }, 1250); }); colorizeCoverageBars(); } function colorizeCoverageBars() { var colorTpl = convey.config.themes[convey.theme].coverage || "hsla({{hue}}, 75%, 30%, .3)"; //default color template $('.pkg-cover-bar').each(function() { var hue = $(this).data("width"); $(this).css({ background: colorTpl.replace("{{hue}}", hue) }); }); } function getFrame(id) { for (var i in convey.history) if (convey.history[i].id === id) return convey.history[i]; } function render(templateID, context) { var tpl = $('#' + templateID).text(); return $($.trim(Mark.up(tpl, context))); } function reframe() { var heightBelowHeader = $(window).height() - convey.layout.header.outerHeight(); var middleHeight = heightBelowHeader - convey.layout.footer.outerHeight(); convey.layout.frame.height(middleHeight); var pathWidth = $(window).width() - $('#logo').outerWidth() - $('#control-buttons').outerWidth() - 10; $('#path-container').width(pathWidth); } function notif() { return get('notifications') === "true"; // stored as strings } function showServerDown(message) { $('.server-down .notice-message').text(message); $('.server-down').show(); $('.server-not-down').hide(); reframe(); } function hideServerDown() { $('.server-down').hide(); $('.server-not-down').show(); reframe(); } function log(msg) { var jqLog = $('#log'); if (jqLog.length > 0) { var t = new Date(); var h = zerofill(t.getHours(), 2); var m = zerofill(t.getMinutes(), 2); var s = zerofill(t.getSeconds(), 2); var ms = zerofill(t.getMilliseconds(), 3); date = h + ":" + m + ":" + s + "." + ms; $(jqLog).append(render('tpl-log-line', { time: date, msg: msg })); $(jqLog).parent('.col').scrollTop(jqLog[0].scrollHeight); } else console.log(msg); } function zerofill(val, count) { // Cheers to http://stackoverflow.com/a/9744576/1048862 var pad = new Array(1 + count).join('0'); return (pad + val).slice(-pad.length); } // Sorts packages ascending by only the last part of their name // Can be passed into Array.sort() function sortPackages(a, b) { var aPkg = splitPathName(a.PackageName); var bPkg = splitPathName(b.PackageName); if (aPkg.length === 0 || bPkg.length === 0) return 0; var aName = aPkg.parts[aPkg.parts.length - 1].toLowerCase(); var bName = bPkg.parts[bPkg.parts.length - 1].toLowerCase(); if (aName < bName) return -1; else if (aName > bName) return 1; else return 0; /* MEMO: Use to sort by entire package name: if (a.PackageName < b.PackageName) return -1; else if (a.PackageName > b.PackageName) return 1; else return 0; */ } function get(key) { var val = localStorage.getItem(key); if (val && (val[0] === '[' || val[0] === '{')) return JSON.parse(val); else return val; } function save(key, val) { if (typeof val === 'object') val = JSON.stringify(val); else if (typeof val === 'number' || typeof val === 'boolean') val = val.toString(); localStorage.setItem(key, val); } function splitPathName(str) { var delim = str.indexOf('\\') > -1 ? '\\' : '/'; return { delim: delim, parts: str.split(delim) }; } function newFrame() { return { results: {}, // response from server (with some of our own context info) packages: {}, // packages organized into statuses for convenience (like with coverage) overall: emptyOverall(), // overall status info, compiled from server's response assertions: emptyAssertions(), // lists of assertions, compiled from server's response failedBuilds: [], // list of packages that failed to build timestamp: moment(), // the timestamp of this "freeze-state" id: convey.frameCounter++, // unique ID for this frame coverDelta: 0 // difference in total coverage from the last frame to this one }; } function emptyOverall() { return { status: {}, duration: 0, assertions: 0, passed: 0, panics: 0, failures: 0, skipped: 0, failedBuilds: 0, coverage: 0 }; } function emptyAssertions() { return { passed: [], failed: [], panicked: [], skipped: [] }; } function makeContext(obj) { obj._passed = 0; obj._failed = 0; obj._panicked = 0; obj._skipped = 0; obj._status = ''; return obj; } function current() { return convey.history[convey.history.length - 1]; } function assignStatus(obj) { if (obj._skipped) obj._status = 'skip'; else if (obj.Outcome === "ignored") obj._status = convey.statuses.ignored; else if (obj._panicked) obj._status = convey.statuses.panic; else if (obj._failed || obj.Outcome === "failed") obj._status = convey.statuses.fail; else obj._status = convey.statuses.pass; } function showCoverDelta(delta) { if (delta > 0) return "+" + delta + "%"; else if (delta === 0) return "±" + delta + "%"; else return delta + "%"; } function customMarkupPipes() { // MARKUP.JS custom pipes Mark.pipes.relativePath = function(str) { basePath = new RegExp($('#path').val()+'[\\/]', 'gi'); return str.replace(basePath, ''); }; Mark.pipes.htmlSafe = function(str) { return str.replace(//g, ">"); }; Mark.pipes.ansiColours = ansispan; Mark.pipes.boldPkgName = function(str) { var pkg = splitPathName(str); pkg.parts[0] = '' + pkg.parts[0]; pkg.parts[pkg.parts.length - 1] = "" + pkg.parts[pkg.parts.length - 1] + ""; return pkg.parts.join(pkg.delim); }; Mark.pipes.needsDiff = function(test) { return !!test.Failure && (test.Expected !== "" || test.Actual !== ""); }; Mark.pipes.coveragePct = function(str) { // Expected input: 75% to be represented as: "75.0" var num = parseInt(str); // we only need int precision if (num < 0) return "0"; else if (num <= 5) return "5px"; // Still shows low coverage else if (num > 100) str = "100"; return str; }; Mark.pipes.coverageDisplay = function(str) { var num = parseFloat(str); return num < 0 ? "" : num + "% coverage"; }; Mark.pipes.coverageReportName = function(str) { return str.replace(/\//g, "-"); }; } function suppress(event) { if (!event) return false; if (event.preventDefault) event.preventDefault(); if (event.stopPropagation) event.stopPropagation(); event.cancelBubble = true; return false; } goconvey-1.6.1/web/client/resources/js/lib/000077500000000000000000000000001266412531300206025ustar00rootroot00000000000000goconvey-1.6.1/web/client/resources/js/lib/ansispan.js000066400000000000000000000041671266412531300227640ustar00rootroot00000000000000/* Copyright (C) 2011 by Maciej Małecki Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ var ansispan = function (str) { Object.keys(ansispan.foregroundColors).forEach(function (ansi) { var span = ''; // // `\033[Xm` == `\033[0;Xm` sets foreground color to `X`. // str = str.replace( new RegExp('\033\\[' + ansi + 'm', 'g'), span ).replace( new RegExp('\033\\[0;' + ansi + 'm', 'g'), span ); }); // // `\033[1m` enables bold font, `\033[22m` disables it // str = str.replace(/\033\[1m/g, '').replace(/\033\[22m/g, ''); // // `\033[3m` enables italics font, `\033[23m` disables it // str = str.replace(/\033\[3m/g, '').replace(/\033\[23m/g, ''); str = str.replace(/\033\[m/g, ''); str = str.replace(/\033\[0m/g, ''); return str.replace(/\033\[39m/g, ''); }; ansispan.foregroundColors = { '30': 'black', '31': 'red', '32': 'green', '33': 'yellow', '34': 'blue', '35': 'purple', '36': 'cyan', '37': 'white' }; if (typeof module !== 'undefined' && module.exports) { module.exports = ansispan; } goconvey-1.6.1/web/client/resources/js/lib/diff_match_patch.js000066400000000000000000002253151266412531300244130ustar00rootroot00000000000000/** * Diff Match and Patch * * Copyright 2006 Google Inc. * http://code.google.com/p/google-diff-match-patch/ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @fileoverview Computes the difference between two texts to create a patch. * Applies the patch onto another text, allowing for errors. * @author fraser@google.com (Neil Fraser) */ /** * Class containing the diff, match and patch methods. * @constructor */ function diff_match_patch() { // Defaults. // Redefine these in your program to override the defaults. // Number of seconds to map a diff before giving up (0 for infinity). this.Diff_Timeout = 1.0; // Cost of an empty edit operation in terms of edit characters. this.Diff_EditCost = 4; // At what point is no match declared (0.0 = perfection, 1.0 = very loose). this.Match_Threshold = 0.5; // How far to search for a match (0 = exact location, 1000+ = broad match). // A match this many characters away from the expected location will add // 1.0 to the score (0.0 is a perfect match). this.Match_Distance = 1000; // When deleting a large block of text (over ~64 characters), how close do // the contents have to be to match the expected contents. (0.0 = perfection, // 1.0 = very loose). Note that Match_Threshold controls how closely the // end points of a delete need to match. this.Patch_DeleteThreshold = 0.5; // Chunk size for context length. this.Patch_Margin = 4; // The number of bits in an int. this.Match_MaxBits = 32; } // DIFF FUNCTIONS /** * The data structure representing a diff is an array of tuples: * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']] * which means: delete 'Hello', add 'Goodbye' and keep ' world.' */ var DIFF_DELETE = -1; var DIFF_INSERT = 1; var DIFF_EQUAL = 0; /** @typedef {{0: number, 1: string}} */ diff_match_patch.Diff; /** * Find the differences between two texts. Simplifies the problem by stripping * any common prefix or suffix off the texts before diffing. * @param {string} text1 Old string to be diffed. * @param {string} text2 New string to be diffed. * @param {boolean=} opt_checklines Optional speedup flag. If present and false, * then don't run a line-level diff first to identify the changed areas. * Defaults to true, which does a faster, slightly less optimal diff. * @param {number} opt_deadline Optional time when the diff should be complete * by. Used internally for recursive calls. Users should set DiffTimeout * instead. * @return {!Array.} Array of diff tuples. */ diff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines, opt_deadline) { // Set a deadline by which time the diff must be complete. if (typeof opt_deadline == 'undefined') { if (this.Diff_Timeout <= 0) { opt_deadline = Number.MAX_VALUE; } else { opt_deadline = (new Date).getTime() + this.Diff_Timeout * 1000; } } var deadline = opt_deadline; // Check for null inputs. if (text1 == null || text2 == null) { throw new Error('Null input. (diff_main)'); } // Check for equality (speedup). if (text1 == text2) { if (text1) { return [[DIFF_EQUAL, text1]]; } return []; } if (typeof opt_checklines == 'undefined') { opt_checklines = true; } var checklines = opt_checklines; // Trim off common prefix (speedup). var commonlength = this.diff_commonPrefix(text1, text2); var commonprefix = text1.substring(0, commonlength); text1 = text1.substring(commonlength); text2 = text2.substring(commonlength); // Trim off common suffix (speedup). commonlength = this.diff_commonSuffix(text1, text2); var commonsuffix = text1.substring(text1.length - commonlength); text1 = text1.substring(0, text1.length - commonlength); text2 = text2.substring(0, text2.length - commonlength); // Compute the diff on the middle block. var diffs = this.diff_compute_(text1, text2, checklines, deadline); // Restore the prefix and suffix. if (commonprefix) { diffs.unshift([DIFF_EQUAL, commonprefix]); } if (commonsuffix) { diffs.push([DIFF_EQUAL, commonsuffix]); } this.diff_cleanupMerge(diffs); return diffs; }; /** * Find the differences between two texts. Assumes that the texts do not * have any common prefix or suffix. * @param {string} text1 Old string to be diffed. * @param {string} text2 New string to be diffed. * @param {boolean} checklines Speedup flag. If false, then don't run a * line-level diff first to identify the changed areas. * If true, then run a faster, slightly less optimal diff. * @param {number} deadline Time when the diff should be complete by. * @return {!Array.} Array of diff tuples. * @private */ diff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines, deadline) { var diffs; if (!text1) { // Just add some text (speedup). return [[DIFF_INSERT, text2]]; } if (!text2) { // Just delete some text (speedup). return [[DIFF_DELETE, text1]]; } var longtext = text1.length > text2.length ? text1 : text2; var shorttext = text1.length > text2.length ? text2 : text1; var i = longtext.indexOf(shorttext); if (i != -1) { // Shorter text is inside the longer text (speedup). diffs = [[DIFF_INSERT, longtext.substring(0, i)], [DIFF_EQUAL, shorttext], [DIFF_INSERT, longtext.substring(i + shorttext.length)]]; // Swap insertions for deletions if diff is reversed. if (text1.length > text2.length) { diffs[0][0] = diffs[2][0] = DIFF_DELETE; } return diffs; } if (shorttext.length == 1) { // Single character string. // After the previous speedup, the character can't be an equality. return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]]; } // Check to see if the problem can be split in two. var hm = this.diff_halfMatch_(text1, text2); if (hm) { // A half-match was found, sort out the return data. var text1_a = hm[0]; var text1_b = hm[1]; var text2_a = hm[2]; var text2_b = hm[3]; var mid_common = hm[4]; // Send both pairs off for separate processing. var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline); var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline); // Merge the results. return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b); } if (checklines && text1.length > 100 && text2.length > 100) { return this.diff_lineMode_(text1, text2, deadline); } return this.diff_bisect_(text1, text2, deadline); }; /** * Do a quick line-level diff on both strings, then rediff the parts for * greater accuracy. * This speedup can produce non-minimal diffs. * @param {string} text1 Old string to be diffed. * @param {string} text2 New string to be diffed. * @param {number} deadline Time when the diff should be complete by. * @return {!Array.} Array of diff tuples. * @private */ diff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) { // Scan the text on a line-by-line basis first. var a = this.diff_linesToChars_(text1, text2); text1 = a.chars1; text2 = a.chars2; var linearray = a.lineArray; var diffs = this.diff_main(text1, text2, false, deadline); // Convert the diff back to original text. this.diff_charsToLines_(diffs, linearray); // Eliminate freak matches (e.g. blank lines) this.diff_cleanupSemantic(diffs); // Rediff any replacement blocks, this time character-by-character. // Add a dummy entry at the end. diffs.push([DIFF_EQUAL, '']); var pointer = 0; var count_delete = 0; var count_insert = 0; var text_delete = ''; var text_insert = ''; while (pointer < diffs.length) { switch (diffs[pointer][0]) { case DIFF_INSERT: count_insert++; text_insert += diffs[pointer][1]; break; case DIFF_DELETE: count_delete++; text_delete += diffs[pointer][1]; break; case DIFF_EQUAL: // Upon reaching an equality, check for prior redundancies. if (count_delete >= 1 && count_insert >= 1) { // Delete the offending records and add the merged ones. diffs.splice(pointer - count_delete - count_insert, count_delete + count_insert); pointer = pointer - count_delete - count_insert; var a = this.diff_main(text_delete, text_insert, false, deadline); for (var j = a.length - 1; j >= 0; j--) { diffs.splice(pointer, 0, a[j]); } pointer = pointer + a.length; } count_insert = 0; count_delete = 0; text_delete = ''; text_insert = ''; break; } pointer++; } diffs.pop(); // Remove the dummy entry at the end. return diffs; }; /** * Find the 'middle snake' of a diff, split the problem in two * and return the recursively constructed diff. * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations. * @param {string} text1 Old string to be diffed. * @param {string} text2 New string to be diffed. * @param {number} deadline Time at which to bail if not yet complete. * @return {!Array.} Array of diff tuples. * @private */ diff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) { // Cache the text lengths to prevent multiple calls. var text1_length = text1.length; var text2_length = text2.length; var max_d = Math.ceil((text1_length + text2_length) / 2); var v_offset = max_d; var v_length = 2 * max_d; var v1 = new Array(v_length); var v2 = new Array(v_length); // Setting all elements to -1 is faster in Chrome & Firefox than mixing // integers and undefined. for (var x = 0; x < v_length; x++) { v1[x] = -1; v2[x] = -1; } v1[v_offset + 1] = 0; v2[v_offset + 1] = 0; var delta = text1_length - text2_length; // If the total number of characters is odd, then the front path will collide // with the reverse path. var front = (delta % 2 != 0); // Offsets for start and end of k loop. // Prevents mapping of space beyond the grid. var k1start = 0; var k1end = 0; var k2start = 0; var k2end = 0; for (var d = 0; d < max_d; d++) { // Bail out if deadline is reached. if ((new Date()).getTime() > deadline) { break; } // Walk the front path one step. for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { var k1_offset = v_offset + k1; var x1; if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) { x1 = v1[k1_offset + 1]; } else { x1 = v1[k1_offset - 1] + 1; } var y1 = x1 - k1; while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) == text2.charAt(y1)) { x1++; y1++; } v1[k1_offset] = x1; if (x1 > text1_length) { // Ran off the right of the graph. k1end += 2; } else if (y1 > text2_length) { // Ran off the bottom of the graph. k1start += 2; } else if (front) { var k2_offset = v_offset + delta - k1; if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) { // Mirror x2 onto top-left coordinate system. var x2 = text1_length - v2[k2_offset]; if (x1 >= x2) { // Overlap detected. return this.diff_bisectSplit_(text1, text2, x1, y1, deadline); } } } } // Walk the reverse path one step. for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { var k2_offset = v_offset + k2; var x2; if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) { x2 = v2[k2_offset + 1]; } else { x2 = v2[k2_offset - 1] + 1; } var y2 = x2 - k2; while (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) == text2.charAt(text2_length - y2 - 1)) { x2++; y2++; } v2[k2_offset] = x2; if (x2 > text1_length) { // Ran off the left of the graph. k2end += 2; } else if (y2 > text2_length) { // Ran off the top of the graph. k2start += 2; } else if (!front) { var k1_offset = v_offset + delta - k2; if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) { var x1 = v1[k1_offset]; var y1 = v_offset + x1 - k1_offset; // Mirror x2 onto top-left coordinate system. x2 = text1_length - x2; if (x1 >= x2) { // Overlap detected. return this.diff_bisectSplit_(text1, text2, x1, y1, deadline); } } } } } // Diff took too long and hit the deadline or // number of diffs equals number of characters, no commonality at all. return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]]; }; /** * Given the location of the 'middle snake', split the diff in two parts * and recurse. * @param {string} text1 Old string to be diffed. * @param {string} text2 New string to be diffed. * @param {number} x Index of split point in text1. * @param {number} y Index of split point in text2. * @param {number} deadline Time at which to bail if not yet complete. * @return {!Array.} Array of diff tuples. * @private */ diff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y, deadline) { var text1a = text1.substring(0, x); var text2a = text2.substring(0, y); var text1b = text1.substring(x); var text2b = text2.substring(y); // Compute both diffs serially. var diffs = this.diff_main(text1a, text2a, false, deadline); var diffsb = this.diff_main(text1b, text2b, false, deadline); return diffs.concat(diffsb); }; /** * Split two texts into an array of strings. Reduce the texts to a string of * hashes where each Unicode character represents one line. * @param {string} text1 First string. * @param {string} text2 Second string. * @return {{chars1: string, chars2: string, lineArray: !Array.}} * An object containing the encoded text1, the encoded text2 and * the array of unique strings. * The zeroth element of the array of unique strings is intentionally blank. * @private */ diff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) { var lineArray = []; // e.g. lineArray[4] == 'Hello\n' var lineHash = {}; // e.g. lineHash['Hello\n'] == 4 // '\x00' is a valid character, but various debuggers don't like it. // So we'll insert a junk entry to avoid generating a null character. lineArray[0] = ''; /** * Split a text into an array of strings. Reduce the texts to a string of * hashes where each Unicode character represents one line. * Modifies linearray and linehash through being a closure. * @param {string} text String to encode. * @return {string} Encoded string. * @private */ function diff_linesToCharsMunge_(text) { var chars = ''; // Walk the text, pulling out a substring for each line. // text.split('\n') would would temporarily double our memory footprint. // Modifying text would create many large strings to garbage collect. var lineStart = 0; var lineEnd = -1; // Keeping our own length variable is faster than looking it up. var lineArrayLength = lineArray.length; while (lineEnd < text.length - 1) { lineEnd = text.indexOf('\n', lineStart); if (lineEnd == -1) { lineEnd = text.length - 1; } var line = text.substring(lineStart, lineEnd + 1); lineStart = lineEnd + 1; if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : (lineHash[line] !== undefined)) { chars += String.fromCharCode(lineHash[line]); } else { chars += String.fromCharCode(lineArrayLength); lineHash[line] = lineArrayLength; lineArray[lineArrayLength++] = line; } } return chars; } var chars1 = diff_linesToCharsMunge_(text1); var chars2 = diff_linesToCharsMunge_(text2); return {chars1: chars1, chars2: chars2, lineArray: lineArray}; }; /** * Rehydrate the text in a diff from a string of line hashes to real lines of * text. * @param {!Array.} diffs Array of diff tuples. * @param {!Array.} lineArray Array of unique strings. * @private */ diff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) { for (var x = 0; x < diffs.length; x++) { var chars = diffs[x][1]; var text = []; for (var y = 0; y < chars.length; y++) { text[y] = lineArray[chars.charCodeAt(y)]; } diffs[x][1] = text.join(''); } }; /** * Determine the common prefix of two strings. * @param {string} text1 First string. * @param {string} text2 Second string. * @return {number} The number of characters common to the start of each * string. */ diff_match_patch.prototype.diff_commonPrefix = function(text1, text2) { // Quick check for common null cases. if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) { return 0; } // Binary search. // Performance analysis: http://neil.fraser.name/news/2007/10/09/ var pointermin = 0; var pointermax = Math.min(text1.length, text2.length); var pointermid = pointermax; var pointerstart = 0; while (pointermin < pointermid) { if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) { pointermin = pointermid; pointerstart = pointermin; } else { pointermax = pointermid; } pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } return pointermid; }; /** * Determine the common suffix of two strings. * @param {string} text1 First string. * @param {string} text2 Second string. * @return {number} The number of characters common to the end of each string. */ diff_match_patch.prototype.diff_commonSuffix = function(text1, text2) { // Quick check for common null cases. if (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) { return 0; } // Binary search. // Performance analysis: http://neil.fraser.name/news/2007/10/09/ var pointermin = 0; var pointermax = Math.min(text1.length, text2.length); var pointermid = pointermax; var pointerend = 0; while (pointermin < pointermid) { if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) { pointermin = pointermid; pointerend = pointermin; } else { pointermax = pointermid; } pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } return pointermid; }; /** * Determine if the suffix of one string is the prefix of another. * @param {string} text1 First string. * @param {string} text2 Second string. * @return {number} The number of characters common to the end of the first * string and the start of the second string. * @private */ diff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) { // Cache the text lengths to prevent multiple calls. var text1_length = text1.length; var text2_length = text2.length; // Eliminate the null case. if (text1_length == 0 || text2_length == 0) { return 0; } // Truncate the longer string. if (text1_length > text2_length) { text1 = text1.substring(text1_length - text2_length); } else if (text1_length < text2_length) { text2 = text2.substring(0, text1_length); } var text_length = Math.min(text1_length, text2_length); // Quick check for the worst case. if (text1 == text2) { return text_length; } // Start by looking for a single character match // and increase length until no match is found. // Performance analysis: http://neil.fraser.name/news/2010/11/04/ var best = 0; var length = 1; while (true) { var pattern = text1.substring(text_length - length); var found = text2.indexOf(pattern); if (found == -1) { return best; } length += found; if (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) { best = length; length++; } } }; /** * Do the two texts share a substring which is at least half the length of the * longer text? * This speedup can produce non-minimal diffs. * @param {string} text1 First string. * @param {string} text2 Second string. * @return {Array.} Five element Array, containing the prefix of * text1, the suffix of text1, the prefix of text2, the suffix of * text2 and the common middle. Or null if there was no match. * @private */ diff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) { if (this.Diff_Timeout <= 0) { // Don't risk returning a non-optimal diff if we have unlimited time. return null; } var longtext = text1.length > text2.length ? text1 : text2; var shorttext = text1.length > text2.length ? text2 : text1; if (longtext.length < 4 || shorttext.length * 2 < longtext.length) { return null; // Pointless. } var dmp = this; // 'this' becomes 'window' in a closure. /** * Does a substring of shorttext exist within longtext such that the substring * is at least half the length of longtext? * Closure, but does not reference any external variables. * @param {string} longtext Longer string. * @param {string} shorttext Shorter string. * @param {number} i Start index of quarter length substring within longtext. * @return {Array.} Five element Array, containing the prefix of * longtext, the suffix of longtext, the prefix of shorttext, the suffix * of shorttext and the common middle. Or null if there was no match. * @private */ function diff_halfMatchI_(longtext, shorttext, i) { // Start with a 1/4 length substring at position i as a seed. var seed = longtext.substring(i, i + Math.floor(longtext.length / 4)); var j = -1; var best_common = ''; var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b; while ((j = shorttext.indexOf(seed, j + 1)) != -1) { var prefixLength = dmp.diff_commonPrefix(longtext.substring(i), shorttext.substring(j)); var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i), shorttext.substring(0, j)); if (best_common.length < suffixLength + prefixLength) { best_common = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength); best_longtext_a = longtext.substring(0, i - suffixLength); best_longtext_b = longtext.substring(i + prefixLength); best_shorttext_a = shorttext.substring(0, j - suffixLength); best_shorttext_b = shorttext.substring(j + prefixLength); } } if (best_common.length * 2 >= longtext.length) { return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common]; } else { return null; } } // First check if the second quarter is the seed for a half-match. var hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4)); // Check again based on the third quarter. var hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2)); var hm; if (!hm1 && !hm2) { return null; } else if (!hm2) { hm = hm1; } else if (!hm1) { hm = hm2; } else { // Both matched. Select the longest. hm = hm1[4].length > hm2[4].length ? hm1 : hm2; } // A half-match was found, sort out the return data. var text1_a, text1_b, text2_a, text2_b; if (text1.length > text2.length) { text1_a = hm[0]; text1_b = hm[1]; text2_a = hm[2]; text2_b = hm[3]; } else { text2_a = hm[0]; text2_b = hm[1]; text1_a = hm[2]; text1_b = hm[3]; } var mid_common = hm[4]; return [text1_a, text1_b, text2_a, text2_b, mid_common]; }; /** * Reduce the number of edits by eliminating semantically trivial equalities. * @param {!Array.} diffs Array of diff tuples. */ diff_match_patch.prototype.diff_cleanupSemantic = function(diffs) { var changes = false; var equalities = []; // Stack of indices where equalities are found. var equalitiesLength = 0; // Keeping our own length var is faster in JS. /** @type {?string} */ var lastequality = null; // Always equal to diffs[equalities[equalitiesLength - 1]][1] var pointer = 0; // Index of current position. // Number of characters that changed prior to the equality. var length_insertions1 = 0; var length_deletions1 = 0; // Number of characters that changed after the equality. var length_insertions2 = 0; var length_deletions2 = 0; while (pointer < diffs.length) { if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found. equalities[equalitiesLength++] = pointer; length_insertions1 = length_insertions2; length_deletions1 = length_deletions2; length_insertions2 = 0; length_deletions2 = 0; lastequality = diffs[pointer][1]; } else { // An insertion or deletion. if (diffs[pointer][0] == DIFF_INSERT) { length_insertions2 += diffs[pointer][1].length; } else { length_deletions2 += diffs[pointer][1].length; } // Eliminate an equality that is smaller or equal to the edits on both // sides of it. if (lastequality && (lastequality.length <= Math.max(length_insertions1, length_deletions1)) && (lastequality.length <= Math.max(length_insertions2, length_deletions2))) { // Duplicate record. diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); // Change second copy to insert. diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; // Throw away the equality we just deleted. equalitiesLength--; // Throw away the previous equality (it needs to be reevaluated). equalitiesLength--; pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; length_insertions1 = 0; // Reset the counters. length_deletions1 = 0; length_insertions2 = 0; length_deletions2 = 0; lastequality = null; changes = true; } } pointer++; } // Normalize the diff. if (changes) { this.diff_cleanupMerge(diffs); } this.diff_cleanupSemanticLossless(diffs); // Find any overlaps between deletions and insertions. // e.g: abcxxxxxxdef // -> abcxxxdef // e.g: xxxabcdefxxx // -> defxxxabc // Only extract an overlap if it is as big as the edit ahead or behind it. pointer = 1; while (pointer < diffs.length) { if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) { var deletion = diffs[pointer - 1][1]; var insertion = diffs[pointer][1]; var overlap_length1 = this.diff_commonOverlap_(deletion, insertion); var overlap_length2 = this.diff_commonOverlap_(insertion, deletion); if (overlap_length1 >= overlap_length2) { if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) { // Overlap found. Insert an equality and trim the surrounding edits. diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlap_length1)]); diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1); diffs[pointer + 1][1] = insertion.substring(overlap_length1); pointer++; } } else { if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) { // Reverse overlap found. // Insert an equality and swap and trim the surrounding edits. diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlap_length2)]); diffs[pointer - 1][0] = DIFF_INSERT; diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2); diffs[pointer + 1][0] = DIFF_DELETE; diffs[pointer + 1][1] = deletion.substring(overlap_length2); pointer++; } } pointer++; } pointer++; } }; /** * Look for single edits surrounded on both sides by equalities * which can be shifted sideways to align the edit to a word boundary. * e.g: The cat came. -> The cat came. * @param {!Array.} diffs Array of diff tuples. */ diff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) { /** * Given two strings, compute a score representing whether the internal * boundary falls on logical boundaries. * Scores range from 6 (best) to 0 (worst). * Closure, but does not reference any external variables. * @param {string} one First string. * @param {string} two Second string. * @return {number} The score. * @private */ function diff_cleanupSemanticScore_(one, two) { if (!one || !two) { // Edges are the best. return 6; } // Each port of this function behaves slightly differently due to // subtle differences in each language's definition of things like // 'whitespace'. Since this function's purpose is largely cosmetic, // the choice has been made to use each language's native features // rather than force total conformity. var char1 = one.charAt(one.length - 1); var char2 = two.charAt(0); var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_); var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_); var whitespace1 = nonAlphaNumeric1 && char1.match(diff_match_patch.whitespaceRegex_); var whitespace2 = nonAlphaNumeric2 && char2.match(diff_match_patch.whitespaceRegex_); var lineBreak1 = whitespace1 && char1.match(diff_match_patch.linebreakRegex_); var lineBreak2 = whitespace2 && char2.match(diff_match_patch.linebreakRegex_); var blankLine1 = lineBreak1 && one.match(diff_match_patch.blanklineEndRegex_); var blankLine2 = lineBreak2 && two.match(diff_match_patch.blanklineStartRegex_); if (blankLine1 || blankLine2) { // Five points for blank lines. return 5; } else if (lineBreak1 || lineBreak2) { // Four points for line breaks. return 4; } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { // Three points for end of sentences. return 3; } else if (whitespace1 || whitespace2) { // Two points for whitespace. return 2; } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { // One point for non-alphanumeric. return 1; } return 0; } var pointer = 1; // Intentionally ignore the first and last element (don't need checking). while (pointer < diffs.length - 1) { if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) { // This is a single edit surrounded by equalities. var equality1 = diffs[pointer - 1][1]; var edit = diffs[pointer][1]; var equality2 = diffs[pointer + 1][1]; // First, shift the edit as far left as possible. var commonOffset = this.diff_commonSuffix(equality1, edit); if (commonOffset) { var commonString = edit.substring(edit.length - commonOffset); equality1 = equality1.substring(0, equality1.length - commonOffset); edit = commonString + edit.substring(0, edit.length - commonOffset); equality2 = commonString + equality2; } // Second, step character by character right, looking for the best fit. var bestEquality1 = equality1; var bestEdit = edit; var bestEquality2 = equality2; var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); while (edit.charAt(0) === equality2.charAt(0)) { equality1 += edit.charAt(0); edit = edit.substring(1) + equality2.charAt(0); equality2 = equality2.substring(1); var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); // The >= encourages trailing rather than leading whitespace on edits. if (score >= bestScore) { bestScore = score; bestEquality1 = equality1; bestEdit = edit; bestEquality2 = equality2; } } if (diffs[pointer - 1][1] != bestEquality1) { // We have an improvement, save it back to the diff. if (bestEquality1) { diffs[pointer - 1][1] = bestEquality1; } else { diffs.splice(pointer - 1, 1); pointer--; } diffs[pointer][1] = bestEdit; if (bestEquality2) { diffs[pointer + 1][1] = bestEquality2; } else { diffs.splice(pointer + 1, 1); pointer--; } } } pointer++; } }; // Define some regex patterns for matching boundaries. diff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/; diff_match_patch.whitespaceRegex_ = /\s/; diff_match_patch.linebreakRegex_ = /[\r\n]/; diff_match_patch.blanklineEndRegex_ = /\n\r?\n$/; diff_match_patch.blanklineStartRegex_ = /^\r?\n\r?\n/; /** * Reduce the number of edits by eliminating operationally trivial equalities. * @param {!Array.} diffs Array of diff tuples. */ diff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) { var changes = false; var equalities = []; // Stack of indices where equalities are found. var equalitiesLength = 0; // Keeping our own length var is faster in JS. /** @type {?string} */ var lastequality = null; // Always equal to diffs[equalities[equalitiesLength - 1]][1] var pointer = 0; // Index of current position. // Is there an insertion operation before the last equality. var pre_ins = false; // Is there a deletion operation before the last equality. var pre_del = false; // Is there an insertion operation after the last equality. var post_ins = false; // Is there a deletion operation after the last equality. var post_del = false; while (pointer < diffs.length) { if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found. if (diffs[pointer][1].length < this.Diff_EditCost && (post_ins || post_del)) { // Candidate found. equalities[equalitiesLength++] = pointer; pre_ins = post_ins; pre_del = post_del; lastequality = diffs[pointer][1]; } else { // Not a candidate, and can never become one. equalitiesLength = 0; lastequality = null; } post_ins = post_del = false; } else { // An insertion or deletion. if (diffs[pointer][0] == DIFF_DELETE) { post_del = true; } else { post_ins = true; } /* * Five types to be split: * ABXYCD * AXCD * ABXC * AXCD * ABXC */ if (lastequality && ((pre_ins && pre_del && post_ins && post_del) || ((lastequality.length < this.Diff_EditCost / 2) && (pre_ins + pre_del + post_ins + post_del) == 3))) { // Duplicate record. diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); // Change second copy to insert. diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; equalitiesLength--; // Throw away the equality we just deleted; lastequality = null; if (pre_ins && pre_del) { // No changes made which could affect previous entry, keep going. post_ins = post_del = true; equalitiesLength = 0; } else { equalitiesLength--; // Throw away the previous equality. pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; post_ins = post_del = false; } changes = true; } } pointer++; } if (changes) { this.diff_cleanupMerge(diffs); } }; /** * Reorder and merge like edit sections. Merge equalities. * Any edit section can move as long as it doesn't cross an equality. * @param {!Array.} diffs Array of diff tuples. */ diff_match_patch.prototype.diff_cleanupMerge = function(diffs) { diffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end. var pointer = 0; var count_delete = 0; var count_insert = 0; var text_delete = ''; var text_insert = ''; var commonlength; while (pointer < diffs.length) { switch (diffs[pointer][0]) { case DIFF_INSERT: count_insert++; text_insert += diffs[pointer][1]; pointer++; break; case DIFF_DELETE: count_delete++; text_delete += diffs[pointer][1]; pointer++; break; case DIFF_EQUAL: // Upon reaching an equality, check for prior redundancies. if (count_delete + count_insert > 1) { if (count_delete !== 0 && count_insert !== 0) { // Factor out any common prefixies. commonlength = this.diff_commonPrefix(text_insert, text_delete); if (commonlength !== 0) { if ((pointer - count_delete - count_insert) > 0 && diffs[pointer - count_delete - count_insert - 1][0] == DIFF_EQUAL) { diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength); } else { diffs.splice(0, 0, [DIFF_EQUAL, text_insert.substring(0, commonlength)]); pointer++; } text_insert = text_insert.substring(commonlength); text_delete = text_delete.substring(commonlength); } // Factor out any common suffixies. commonlength = this.diff_commonSuffix(text_insert, text_delete); if (commonlength !== 0) { diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1]; text_insert = text_insert.substring(0, text_insert.length - commonlength); text_delete = text_delete.substring(0, text_delete.length - commonlength); } } // Delete the offending records and add the merged ones. if (count_delete === 0) { diffs.splice(pointer - count_insert, count_delete + count_insert, [DIFF_INSERT, text_insert]); } else if (count_insert === 0) { diffs.splice(pointer - count_delete, count_delete + count_insert, [DIFF_DELETE, text_delete]); } else { diffs.splice(pointer - count_delete - count_insert, count_delete + count_insert, [DIFF_DELETE, text_delete], [DIFF_INSERT, text_insert]); } pointer = pointer - count_delete - count_insert + (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1; } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) { // Merge this equality with the previous one. diffs[pointer - 1][1] += diffs[pointer][1]; diffs.splice(pointer, 1); } else { pointer++; } count_insert = 0; count_delete = 0; text_delete = ''; text_insert = ''; break; } } if (diffs[diffs.length - 1][1] === '') { diffs.pop(); // Remove the dummy entry at the end. } // Second pass: look for single edits surrounded on both sides by equalities // which can be shifted sideways to eliminate an equality. // e.g: ABAC -> ABAC var changes = false; pointer = 1; // Intentionally ignore the first and last element (don't need checking). while (pointer < diffs.length - 1) { if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) { // This is a single edit surrounded by equalities. if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) { // Shift the edit over the previous equality. diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length); diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; diffs.splice(pointer - 1, 1); changes = true; } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) { // Shift the edit over the next equality. diffs[pointer - 1][1] += diffs[pointer + 1][1]; diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; diffs.splice(pointer + 1, 1); changes = true; } } pointer++; } // If shifts were made, the diff needs reordering and another shift sweep. if (changes) { this.diff_cleanupMerge(diffs); } }; /** * loc is a location in text1, compute and return the equivalent location in * text2. * e.g. 'The cat' vs 'The big cat', 1->1, 5->8 * @param {!Array.} diffs Array of diff tuples. * @param {number} loc Location within text1. * @return {number} Location within text2. */ diff_match_patch.prototype.diff_xIndex = function(diffs, loc) { var chars1 = 0; var chars2 = 0; var last_chars1 = 0; var last_chars2 = 0; var x; for (x = 0; x < diffs.length; x++) { if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion. chars1 += diffs[x][1].length; } if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion. chars2 += diffs[x][1].length; } if (chars1 > loc) { // Overshot the location. break; } last_chars1 = chars1; last_chars2 = chars2; } // Was the location was deleted? if (diffs.length != x && diffs[x][0] === DIFF_DELETE) { return last_chars2; } // Add the remaining character length. return last_chars2 + (loc - last_chars1); }; /** * Convert a diff array into a pretty HTML report. * @param {!Array.} diffs Array of diff tuples. * @return {string} HTML representation. */ diff_match_patch.prototype.diff_prettyHtml = function(diffs) { var html = []; var pattern_amp = /&/g; var pattern_lt = //g; var pattern_para = /\n/g; for (var x = 0; x < diffs.length; x++) { var op = diffs[x][0]; // Operation (insert, delete, equal) var data = diffs[x][1]; // Text of change. var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<') .replace(pattern_gt, '>').replace(pattern_para, '¶
'); switch (op) { case DIFF_INSERT: html[x] = '' + text + ''; break; case DIFF_DELETE: html[x] = '' + text + ''; break; case DIFF_EQUAL: html[x] = '' + text + ''; break; } } return html.join(''); }; /** * Compute and return the source text (all equalities and deletions). * @param {!Array.} diffs Array of diff tuples. * @return {string} Source text. */ diff_match_patch.prototype.diff_text1 = function(diffs) { var text = []; for (var x = 0; x < diffs.length; x++) { if (diffs[x][0] !== DIFF_INSERT) { text[x] = diffs[x][1]; } } return text.join(''); }; /** * Compute and return the destination text (all equalities and insertions). * @param {!Array.} diffs Array of diff tuples. * @return {string} Destination text. */ diff_match_patch.prototype.diff_text2 = function(diffs) { var text = []; for (var x = 0; x < diffs.length; x++) { if (diffs[x][0] !== DIFF_DELETE) { text[x] = diffs[x][1]; } } return text.join(''); }; /** * Compute the Levenshtein distance; the number of inserted, deleted or * substituted characters. * @param {!Array.} diffs Array of diff tuples. * @return {number} Number of changes. */ diff_match_patch.prototype.diff_levenshtein = function(diffs) { var levenshtein = 0; var insertions = 0; var deletions = 0; for (var x = 0; x < diffs.length; x++) { var op = diffs[x][0]; var data = diffs[x][1]; switch (op) { case DIFF_INSERT: insertions += data.length; break; case DIFF_DELETE: deletions += data.length; break; case DIFF_EQUAL: // A deletion and an insertion is one substitution. levenshtein += Math.max(insertions, deletions); insertions = 0; deletions = 0; break; } } levenshtein += Math.max(insertions, deletions); return levenshtein; }; /** * Crush the diff into an encoded string which describes the operations * required to transform text1 into text2. * E.g. =3\t-2\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'. * Operations are tab-separated. Inserted text is escaped using %xx notation. * @param {!Array.} diffs Array of diff tuples. * @return {string} Delta text. */ diff_match_patch.prototype.diff_toDelta = function(diffs) { var text = []; for (var x = 0; x < diffs.length; x++) { switch (diffs[x][0]) { case DIFF_INSERT: text[x] = '+' + encodeURI(diffs[x][1]); break; case DIFF_DELETE: text[x] = '-' + diffs[x][1].length; break; case DIFF_EQUAL: text[x] = '=' + diffs[x][1].length; break; } } return text.join('\t').replace(/%20/g, ' '); }; /** * Given the original text1, and an encoded string which describes the * operations required to transform text1 into text2, compute the full diff. * @param {string} text1 Source string for the diff. * @param {string} delta Delta text. * @return {!Array.} Array of diff tuples. * @throws {!Error} If invalid input. */ diff_match_patch.prototype.diff_fromDelta = function(text1, delta) { var diffs = []; var diffsLength = 0; // Keeping our own length var is faster in JS. var pointer = 0; // Cursor in text1 var tokens = delta.split(/\t/g); for (var x = 0; x < tokens.length; x++) { // Each token begins with a one character parameter which specifies the // operation of this token (delete, insert, equality). var param = tokens[x].substring(1); switch (tokens[x].charAt(0)) { case '+': try { diffs[diffsLength++] = [DIFF_INSERT, decodeURI(param)]; } catch (ex) { // Malformed URI sequence. throw new Error('Illegal escape in diff_fromDelta: ' + param); } break; case '-': // Fall through. case '=': var n = parseInt(param, 10); if (isNaN(n) || n < 0) { throw new Error('Invalid number in diff_fromDelta: ' + param); } var text = text1.substring(pointer, pointer += n); if (tokens[x].charAt(0) == '=') { diffs[diffsLength++] = [DIFF_EQUAL, text]; } else { diffs[diffsLength++] = [DIFF_DELETE, text]; } break; default: // Blank tokens are ok (from a trailing \t). // Anything else is an error. if (tokens[x]) { throw new Error('Invalid diff operation in diff_fromDelta: ' + tokens[x]); } } } if (pointer != text1.length) { throw new Error('Delta length (' + pointer + ') does not equal source text length (' + text1.length + ').'); } return diffs; }; // MATCH FUNCTIONS /** * Locate the best instance of 'pattern' in 'text' near 'loc'. * @param {string} text The text to search. * @param {string} pattern The pattern to search for. * @param {number} loc The location to search around. * @return {number} Best match index or -1. */ diff_match_patch.prototype.match_main = function(text, pattern, loc) { // Check for null inputs. if (text == null || pattern == null || loc == null) { throw new Error('Null input. (match_main)'); } loc = Math.max(0, Math.min(loc, text.length)); if (text == pattern) { // Shortcut (potentially not guaranteed by the algorithm) return 0; } else if (!text.length) { // Nothing to match. return -1; } else if (text.substring(loc, loc + pattern.length) == pattern) { // Perfect match at the perfect spot! (Includes case of null pattern) return loc; } else { // Do a fuzzy compare. return this.match_bitap_(text, pattern, loc); } }; /** * Locate the best instance of 'pattern' in 'text' near 'loc' using the * Bitap algorithm. * @param {string} text The text to search. * @param {string} pattern The pattern to search for. * @param {number} loc The location to search around. * @return {number} Best match index or -1. * @private */ diff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) { if (pattern.length > this.Match_MaxBits) { throw new Error('Pattern too long for this browser.'); } // Initialise the alphabet. var s = this.match_alphabet_(pattern); var dmp = this; // 'this' becomes 'window' in a closure. /** * Compute and return the score for a match with e errors and x location. * Accesses loc and pattern through being a closure. * @param {number} e Number of errors in match. * @param {number} x Location of match. * @return {number} Overall score for match (0.0 = good, 1.0 = bad). * @private */ function match_bitapScore_(e, x) { var accuracy = e / pattern.length; var proximity = Math.abs(loc - x); if (!dmp.Match_Distance) { // Dodge divide by zero error. return proximity ? 1.0 : accuracy; } return accuracy + (proximity / dmp.Match_Distance); } // Highest score beyond which we give up. var score_threshold = this.Match_Threshold; // Is there a nearby exact match? (speedup) var best_loc = text.indexOf(pattern, loc); if (best_loc != -1) { score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold); // What about in the other direction? (speedup) best_loc = text.lastIndexOf(pattern, loc + pattern.length); if (best_loc != -1) { score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold); } } // Initialise the bit arrays. var matchmask = 1 << (pattern.length - 1); best_loc = -1; var bin_min, bin_mid; var bin_max = pattern.length + text.length; var last_rd; for (var d = 0; d < pattern.length; d++) { // Scan for the best match; each iteration allows for one more error. // Run a binary search to determine how far from 'loc' we can stray at this // error level. bin_min = 0; bin_mid = bin_max; while (bin_min < bin_mid) { if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) { bin_min = bin_mid; } else { bin_max = bin_mid; } bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min); } // Use the result from this iteration as the maximum for the next. bin_max = bin_mid; var start = Math.max(1, loc - bin_mid + 1); var finish = Math.min(loc + bin_mid, text.length) + pattern.length; var rd = Array(finish + 2); rd[finish + 1] = (1 << d) - 1; for (var j = finish; j >= start; j--) { // The alphabet (s) is a sparse hash, so the following line generates // warnings. var charMatch = s[text.charAt(j - 1)]; if (d === 0) { // First pass: exact match. rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; } else { // Subsequent passes: fuzzy match. rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) | (((last_rd[j + 1] | last_rd[j]) << 1) | 1) | last_rd[j + 1]; } if (rd[j] & matchmask) { var score = match_bitapScore_(d, j - 1); // This match will almost certainly be better than any existing match. // But check anyway. if (score <= score_threshold) { // Told you so. score_threshold = score; best_loc = j - 1; if (best_loc > loc) { // When passing loc, don't exceed our current distance from loc. start = Math.max(1, 2 * loc - best_loc); } else { // Already passed loc, downhill from here on in. break; } } } } // No hope for a (better) match at greater error levels. if (match_bitapScore_(d + 1, loc) > score_threshold) { break; } last_rd = rd; } return best_loc; }; /** * Initialise the alphabet for the Bitap algorithm. * @param {string} pattern The text to encode. * @return {!Object} Hash of character locations. * @private */ diff_match_patch.prototype.match_alphabet_ = function(pattern) { var s = {}; for (var i = 0; i < pattern.length; i++) { s[pattern.charAt(i)] = 0; } for (var i = 0; i < pattern.length; i++) { s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1); } return s; }; // PATCH FUNCTIONS /** * Increase the context until it is unique, * but don't let the pattern expand beyond Match_MaxBits. * @param {!diff_match_patch.patch_obj} patch The patch to grow. * @param {string} text Source text. * @private */ diff_match_patch.prototype.patch_addContext_ = function(patch, text) { if (text.length == 0) { return; } var pattern = text.substring(patch.start2, patch.start2 + patch.length1); var padding = 0; // Look for the first and last matches of pattern in text. If two different // matches are found, increase the pattern length. while (text.indexOf(pattern) != text.lastIndexOf(pattern) && pattern.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin) { padding += this.Patch_Margin; pattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding); } // Add one chunk for good luck. padding += this.Patch_Margin; // Add the prefix. var prefix = text.substring(patch.start2 - padding, patch.start2); if (prefix) { patch.diffs.unshift([DIFF_EQUAL, prefix]); } // Add the suffix. var suffix = text.substring(patch.start2 + patch.length1, patch.start2 + patch.length1 + padding); if (suffix) { patch.diffs.push([DIFF_EQUAL, suffix]); } // Roll back the start points. patch.start1 -= prefix.length; patch.start2 -= prefix.length; // Extend the lengths. patch.length1 += prefix.length + suffix.length; patch.length2 += prefix.length + suffix.length; }; /** * Compute a list of patches to turn text1 into text2. * Use diffs if provided, otherwise compute it ourselves. * There are four ways to call this function, depending on what data is * available to the caller: * Method 1: * a = text1, b = text2 * Method 2: * a = diffs * Method 3 (optimal): * a = text1, b = diffs * Method 4 (deprecated, use method 3): * a = text1, b = text2, c = diffs * * @param {string|!Array.} a text1 (methods 1,3,4) or * Array of diff tuples for text1 to text2 (method 2). * @param {string|!Array.} opt_b text2 (methods 1,4) or * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2). * @param {string|!Array.} opt_c Array of diff tuples * for text1 to text2 (method 4) or undefined (methods 1,2,3). * @return {!Array.} Array of Patch objects. */ diff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) { var text1, diffs; if (typeof a == 'string' && typeof opt_b == 'string' && typeof opt_c == 'undefined') { // Method 1: text1, text2 // Compute diffs from text1 and text2. text1 = /** @type {string} */(a); diffs = this.diff_main(text1, /** @type {string} */(opt_b), true); if (diffs.length > 2) { this.diff_cleanupSemantic(diffs); this.diff_cleanupEfficiency(diffs); } } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' && typeof opt_c == 'undefined') { // Method 2: diffs // Compute text1 from diffs. diffs = /** @type {!Array.} */(a); text1 = this.diff_text1(diffs); } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' && typeof opt_c == 'undefined') { // Method 3: text1, diffs text1 = /** @type {string} */(a); diffs = /** @type {!Array.} */(opt_b); } else if (typeof a == 'string' && typeof opt_b == 'string' && opt_c && typeof opt_c == 'object') { // Method 4: text1, text2, diffs // text2 is not used. text1 = /** @type {string} */(a); diffs = /** @type {!Array.} */(opt_c); } else { throw new Error('Unknown call format to patch_make.'); } if (diffs.length === 0) { return []; // Get rid of the null case. } var patches = []; var patch = new diff_match_patch.patch_obj(); var patchDiffLength = 0; // Keeping our own length var is faster in JS. var char_count1 = 0; // Number of characters into the text1 string. var char_count2 = 0; // Number of characters into the text2 string. // Start with text1 (prepatch_text) and apply the diffs until we arrive at // text2 (postpatch_text). We recreate the patches one by one to determine // context info. var prepatch_text = text1; var postpatch_text = text1; for (var x = 0; x < diffs.length; x++) { var diff_type = diffs[x][0]; var diff_text = diffs[x][1]; if (!patchDiffLength && diff_type !== DIFF_EQUAL) { // A new patch starts here. patch.start1 = char_count1; patch.start2 = char_count2; } switch (diff_type) { case DIFF_INSERT: patch.diffs[patchDiffLength++] = diffs[x]; patch.length2 += diff_text.length; postpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2); break; case DIFF_DELETE: patch.length1 += diff_text.length; patch.diffs[patchDiffLength++] = diffs[x]; postpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length); break; case DIFF_EQUAL: if (diff_text.length <= 2 * this.Patch_Margin && patchDiffLength && diffs.length != x + 1) { // Small equality inside a patch. patch.diffs[patchDiffLength++] = diffs[x]; patch.length1 += diff_text.length; patch.length2 += diff_text.length; } else if (diff_text.length >= 2 * this.Patch_Margin) { // Time for a new patch. if (patchDiffLength) { this.patch_addContext_(patch, prepatch_text); patches.push(patch); patch = new diff_match_patch.patch_obj(); patchDiffLength = 0; // Unlike Unidiff, our patch lists have a rolling context. // http://code.google.com/p/google-diff-match-patch/wiki/Unidiff // Update prepatch text & pos to reflect the application of the // just completed patch. prepatch_text = postpatch_text; char_count1 = char_count2; } } break; } // Update the current character count. if (diff_type !== DIFF_INSERT) { char_count1 += diff_text.length; } if (diff_type !== DIFF_DELETE) { char_count2 += diff_text.length; } } // Pick up the leftover patch if not empty. if (patchDiffLength) { this.patch_addContext_(patch, prepatch_text); patches.push(patch); } return patches; }; /** * Given an array of patches, return another array that is identical. * @param {!Array.} patches Array of Patch objects. * @return {!Array.} Array of Patch objects. */ diff_match_patch.prototype.patch_deepCopy = function(patches) { // Making deep copies is hard in JavaScript. var patchesCopy = []; for (var x = 0; x < patches.length; x++) { var patch = patches[x]; var patchCopy = new diff_match_patch.patch_obj(); patchCopy.diffs = []; for (var y = 0; y < patch.diffs.length; y++) { patchCopy.diffs[y] = patch.diffs[y].slice(); } patchCopy.start1 = patch.start1; patchCopy.start2 = patch.start2; patchCopy.length1 = patch.length1; patchCopy.length2 = patch.length2; patchesCopy[x] = patchCopy; } return patchesCopy; }; /** * Merge a set of patches onto the text. Return a patched text, as well * as a list of true/false values indicating which patches were applied. * @param {!Array.} patches Array of Patch objects. * @param {string} text Old text. * @return {!Array.>} Two element Array, containing the * new text and an array of boolean values. */ diff_match_patch.prototype.patch_apply = function(patches, text) { if (patches.length == 0) { return [text, []]; } // Deep copy the patches so that no changes are made to originals. patches = this.patch_deepCopy(patches); var nullPadding = this.patch_addPadding(patches); text = nullPadding + text + nullPadding; this.patch_splitMax(patches); // delta keeps track of the offset between the expected and actual location // of the previous patch. If there are patches expected at positions 10 and // 20, but the first patch was found at 12, delta is 2 and the second patch // has an effective expected position of 22. var delta = 0; var results = []; for (var x = 0; x < patches.length; x++) { var expected_loc = patches[x].start2 + delta; var text1 = this.diff_text1(patches[x].diffs); var start_loc; var end_loc = -1; if (text1.length > this.Match_MaxBits) { // patch_splitMax will only provide an oversized pattern in the case of // a monster delete. start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits), expected_loc); if (start_loc != -1) { end_loc = this.match_main(text, text1.substring(text1.length - this.Match_MaxBits), expected_loc + text1.length - this.Match_MaxBits); if (end_loc == -1 || start_loc >= end_loc) { // Can't find valid trailing context. Drop this patch. start_loc = -1; } } } else { start_loc = this.match_main(text, text1, expected_loc); } if (start_loc == -1) { // No match found. :( results[x] = false; // Subtract the delta for this failed patch from subsequent patches. delta -= patches[x].length2 - patches[x].length1; } else { // Found a match. :) results[x] = true; delta = start_loc - expected_loc; var text2; if (end_loc == -1) { text2 = text.substring(start_loc, start_loc + text1.length); } else { text2 = text.substring(start_loc, end_loc + this.Match_MaxBits); } if (text1 == text2) { // Perfect match, just shove the replacement text in. text = text.substring(0, start_loc) + this.diff_text2(patches[x].diffs) + text.substring(start_loc + text1.length); } else { // Imperfect match. Run a diff to get a framework of equivalent // indices. var diffs = this.diff_main(text1, text2, false); if (text1.length > this.Match_MaxBits && this.diff_levenshtein(diffs) / text1.length > this.Patch_DeleteThreshold) { // The end points match, but the content is unacceptably bad. results[x] = false; } else { this.diff_cleanupSemanticLossless(diffs); var index1 = 0; var index2; for (var y = 0; y < patches[x].diffs.length; y++) { var mod = patches[x].diffs[y]; if (mod[0] !== DIFF_EQUAL) { index2 = this.diff_xIndex(diffs, index1); } if (mod[0] === DIFF_INSERT) { // Insertion text = text.substring(0, start_loc + index2) + mod[1] + text.substring(start_loc + index2); } else if (mod[0] === DIFF_DELETE) { // Deletion text = text.substring(0, start_loc + index2) + text.substring(start_loc + this.diff_xIndex(diffs, index1 + mod[1].length)); } if (mod[0] !== DIFF_DELETE) { index1 += mod[1].length; } } } } } } // Strip the padding off. text = text.substring(nullPadding.length, text.length - nullPadding.length); return [text, results]; }; /** * Add some padding on text start and end so that edges can match something. * Intended to be called only from within patch_apply. * @param {!Array.} patches Array of Patch objects. * @return {string} The padding string added to each side. */ diff_match_patch.prototype.patch_addPadding = function(patches) { var paddingLength = this.Patch_Margin; var nullPadding = ''; for (var x = 1; x <= paddingLength; x++) { nullPadding += String.fromCharCode(x); } // Bump all the patches forward. for (var x = 0; x < patches.length; x++) { patches[x].start1 += paddingLength; patches[x].start2 += paddingLength; } // Add some padding on start of first diff. var patch = patches[0]; var diffs = patch.diffs; if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) { // Add nullPadding equality. diffs.unshift([DIFF_EQUAL, nullPadding]); patch.start1 -= paddingLength; // Should be 0. patch.start2 -= paddingLength; // Should be 0. patch.length1 += paddingLength; patch.length2 += paddingLength; } else if (paddingLength > diffs[0][1].length) { // Grow first equality. var extraLength = paddingLength - diffs[0][1].length; diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1]; patch.start1 -= extraLength; patch.start2 -= extraLength; patch.length1 += extraLength; patch.length2 += extraLength; } // Add some padding on end of last diff. patch = patches[patches.length - 1]; diffs = patch.diffs; if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) { // Add nullPadding equality. diffs.push([DIFF_EQUAL, nullPadding]); patch.length1 += paddingLength; patch.length2 += paddingLength; } else if (paddingLength > diffs[diffs.length - 1][1].length) { // Grow last equality. var extraLength = paddingLength - diffs[diffs.length - 1][1].length; diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength); patch.length1 += extraLength; patch.length2 += extraLength; } return nullPadding; }; /** * Look through the patches and break up any which are longer than the maximum * limit of the match algorithm. * Intended to be called only from within patch_apply. * @param {!Array.} patches Array of Patch objects. */ diff_match_patch.prototype.patch_splitMax = function(patches) { var patch_size = this.Match_MaxBits; for (var x = 0; x < patches.length; x++) { if (patches[x].length1 <= patch_size) { continue; } var bigpatch = patches[x]; // Remove the big old patch. patches.splice(x--, 1); var start1 = bigpatch.start1; var start2 = bigpatch.start2; var precontext = ''; while (bigpatch.diffs.length !== 0) { // Create one of several smaller patches. var patch = new diff_match_patch.patch_obj(); var empty = true; patch.start1 = start1 - precontext.length; patch.start2 = start2 - precontext.length; if (precontext !== '') { patch.length1 = patch.length2 = precontext.length; patch.diffs.push([DIFF_EQUAL, precontext]); } while (bigpatch.diffs.length !== 0 && patch.length1 < patch_size - this.Patch_Margin) { var diff_type = bigpatch.diffs[0][0]; var diff_text = bigpatch.diffs[0][1]; if (diff_type === DIFF_INSERT) { // Insertions are harmless. patch.length2 += diff_text.length; start2 += diff_text.length; patch.diffs.push(bigpatch.diffs.shift()); empty = false; } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 && patch.diffs[0][0] == DIFF_EQUAL && diff_text.length > 2 * patch_size) { // This is a large deletion. Let it pass in one chunk. patch.length1 += diff_text.length; start1 += diff_text.length; empty = false; patch.diffs.push([diff_type, diff_text]); bigpatch.diffs.shift(); } else { // Deletion or equality. Only take as much as we can stomach. diff_text = diff_text.substring(0, patch_size - patch.length1 - this.Patch_Margin); patch.length1 += diff_text.length; start1 += diff_text.length; if (diff_type === DIFF_EQUAL) { patch.length2 += diff_text.length; start2 += diff_text.length; } else { empty = false; } patch.diffs.push([diff_type, diff_text]); if (diff_text == bigpatch.diffs[0][1]) { bigpatch.diffs.shift(); } else { bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length); } } } // Compute the head context for the next patch. precontext = this.diff_text2(patch.diffs); precontext = precontext.substring(precontext.length - this.Patch_Margin); // Append the end context for this patch. var postcontext = this.diff_text1(bigpatch.diffs) .substring(0, this.Patch_Margin); if (postcontext !== '') { patch.length1 += postcontext.length; patch.length2 += postcontext.length; if (patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) { patch.diffs[patch.diffs.length - 1][1] += postcontext; } else { patch.diffs.push([DIFF_EQUAL, postcontext]); } } if (!empty) { patches.splice(++x, 0, patch); } } } }; /** * Take a list of patches and return a textual representation. * @param {!Array.} patches Array of Patch objects. * @return {string} Text representation of patches. */ diff_match_patch.prototype.patch_toText = function(patches) { var text = []; for (var x = 0; x < patches.length; x++) { text[x] = patches[x]; } return text.join(''); }; /** * Parse a textual representation of patches and return a list of Patch objects. * @param {string} textline Text representation of patches. * @return {!Array.} Array of Patch objects. * @throws {!Error} If invalid input. */ diff_match_patch.prototype.patch_fromText = function(textline) { var patches = []; if (!textline) { return patches; } var text = textline.split('\n'); var textPointer = 0; var patchHeader = /^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/; while (textPointer < text.length) { var m = text[textPointer].match(patchHeader); if (!m) { throw new Error('Invalid patch string: ' + text[textPointer]); } var patch = new diff_match_patch.patch_obj(); patches.push(patch); patch.start1 = parseInt(m[1], 10); if (m[2] === '') { patch.start1--; patch.length1 = 1; } else if (m[2] == '0') { patch.length1 = 0; } else { patch.start1--; patch.length1 = parseInt(m[2], 10); } patch.start2 = parseInt(m[3], 10); if (m[4] === '') { patch.start2--; patch.length2 = 1; } else if (m[4] == '0') { patch.length2 = 0; } else { patch.start2--; patch.length2 = parseInt(m[4], 10); } textPointer++; while (textPointer < text.length) { var sign = text[textPointer].charAt(0); try { var line = decodeURI(text[textPointer].substring(1)); } catch (ex) { // Malformed URI sequence. throw new Error('Illegal escape in patch_fromText: ' + line); } if (sign == '-') { // Deletion. patch.diffs.push([DIFF_DELETE, line]); } else if (sign == '+') { // Insertion. patch.diffs.push([DIFF_INSERT, line]); } else if (sign == ' ') { // Minor equality. patch.diffs.push([DIFF_EQUAL, line]); } else if (sign == '@') { // Start of next patch. break; } else if (sign === '') { // Blank line? Whatever. } else { // WTF? throw new Error('Invalid patch mode "' + sign + '" in: ' + line); } textPointer++; } } return patches; }; /** * Class representing one patch operation. * @constructor */ diff_match_patch.patch_obj = function() { /** @type {!Array.} */ this.diffs = []; /** @type {?number} */ this.start1 = null; /** @type {?number} */ this.start2 = null; /** @type {number} */ this.length1 = 0; /** @type {number} */ this.length2 = 0; }; /** * Emmulate GNU diff's format. * Header: @@ -382,8 +481,9 @@ * Indicies are printed as 1-based, not 0-based. * @return {string} The GNU diff string. */ diff_match_patch.patch_obj.prototype.toString = function() { var coords1, coords2; if (this.length1 === 0) { coords1 = this.start1 + ',0'; } else if (this.length1 == 1) { coords1 = this.start1 + 1; } else { coords1 = (this.start1 + 1) + ',' + this.length1; } if (this.length2 === 0) { coords2 = this.start2 + ',0'; } else if (this.length2 == 1) { coords2 = this.start2 + 1; } else { coords2 = (this.start2 + 1) + ',' + this.length2; } var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\n']; var op; // Escape the body of the patch with %xx notation. for (var x = 0; x < this.diffs.length; x++) { switch (this.diffs[x][0]) { case DIFF_INSERT: op = '+'; break; case DIFF_DELETE: op = '-'; break; case DIFF_EQUAL: op = ' '; break; } text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\n'; } return text.join('').replace(/%20/g, ' '); }; // Export these global variables so that they survive Google's JS compiler. // In a browser, 'this' will be 'window'. // Users of node.js should 'require' the uncompressed version since Google's // JS compiler may break the following exports for non-browser environments. this['diff_match_patch'] = diff_match_patch; this['DIFF_DELETE'] = DIFF_DELETE; this['DIFF_INSERT'] = DIFF_INSERT; this['DIFF_EQUAL'] = DIFF_EQUAL; goconvey-1.6.1/web/client/resources/js/lib/jquery-2.1.0.js000066400000000000000000007363431266412531300231330ustar00rootroot00000000000000/*! * jQuery JavaScript Library v2.1.0 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2014-01-23T21:10Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper window is present, // execute the factory and get jQuery // For environments that do not inherently posses a window with a document // (such as Node.js), expose a jQuery-making factory as module.exports // This accentuates the need for the creation of a real window // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { // Can't do this because several apps including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) // Support: Firefox 18+ // var arr = []; var slice = arr.slice; var concat = arr.concat; var push = arr.push; var indexOf = arr.indexOf; var class2type = {}; var toString = class2type.toString; var hasOwn = class2type.hasOwnProperty; var trim = "".trim; var support = {}; var // Use the correct document accordingly with window argument (sandbox) document = window.document, version = "2.1.0", // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); }, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return letter.toUpperCase(); }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // Start with an empty selector selector: "", // The default length of a jQuery object is 0 length: 0, toArray: function() { return slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num != null ? // Return a 'clean' array ( num < 0 ? this[ num + this.length ] : this[ num ] ) : // Return just the object slice.call( this ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, slice: function() { return this.pushStack( slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: arr.sort, splice: arr.splice }; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; // skip the boolean and the target target = arguments[ i ] || {}; i++; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( i === length ) { target = this; i--; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready without the ready module isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function() {}, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray, isWindow: function( obj ) { return obj != null && obj === obj.window; }, isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN return obj - parseFloat( obj ) >= 0; }, isPlainObject: function( obj ) { // Not plain objects: // - Any object or value whose internal [[Class]] property is not "[object Object]" // - DOM nodes // - window if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } // Support: Firefox <20 // The try/catch suppresses exceptions thrown when attempting to access // the "constructor" property of certain host objects, ie. |window.location| // https://bugzilla.mozilla.org/show_bug.cgi?id=814622 try { if ( obj.constructor && !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { return false; } } catch ( e ) { return false; } // If the function hasn't returned already, we're confident that // |obj| is a plain object, created by {} or constructed with new Object return true; }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, type: function( obj ) { if ( obj == null ) { return obj + ""; } // Support: Android < 4.0, iOS < 6 (functionish RegExp) return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call(obj) ] || "object" : typeof obj; }, // Evaluates a script in a global context globalEval: function( code ) { var script, indirect = eval; code = jQuery.trim( code ); if ( code ) { // If the code includes a valid, prologue position // strict mode pragma, execute code by injecting a // script tag into the document. if ( code.indexOf("use strict") === 1 ) { script = document.createElement("script"); script.text = code; document.head.appendChild( script ).parentNode.removeChild( script ); } else { // Otherwise, avoid the DOM node creation, insertion // and removal by using an indirect global eval indirect( code ); } } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, // args is for internal usage only each: function( obj, callback, args ) { var value, i = 0, length = obj.length, isArray = isArraylike( obj ); if ( args ) { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } } return obj; }, trim: function( text ) { return text == null ? "" : trim.call( text ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArraylike( Object(arr) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { return arr == null ? -1 : indexOf.call( arr, elem, i ); }, merge: function( first, second ) { var len = +second.length, j = 0, i = first.length; for ( ; j < len; j++ ) { first[ i++ ] = second[ j ]; } first.length = i; return first; }, grep: function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, i = 0, length = elems.length, isArray = isArraylike( elems ), ret = []; // Go through the array, translating each of the items to their new values if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } } // Flatten any nested arrays return concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var tmp, args, proxy; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, now: Date.now, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support }); // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); function isArraylike( obj ) { var length = obj.length, type = jQuery.type( obj ); if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } if ( obj.nodeType === 1 && length ) { return true; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } var Sizzle = /*! * Sizzle CSS Selector Engine v1.10.16 * http://sizzlejs.com/ * * Copyright 2013 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2014-01-13 */ (function( window ) { var i, support, Expr, getText, isXML, compile, outermostContext, sortInput, hasDuplicate, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + -(new Date()), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, // General-purpose constants strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf if we can't use a native one indexOf = arr.indexOf || function( elem ) { var i = 0, len = this.length; for ( ; i < len; i++ ) { if ( this[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/css3-syntax/#characters characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Loosely modeled on CSS identifier characters // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = characterEncoding.replace( "w", "w#" ), // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", // Prefer arguments quoted, // then not containing pseudos/brackets, // then attribute selectors/non-parenthetical expressions, // then anything else // These preferences are here to reduce the number of selectors // needing tokenize in the PSEUDO preFilter pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + characterEncoding + ")" ), "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var match, elem, m, nodeType, // QSA vars i, groups, old, nid, newContext, newSelector; if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; results = results || []; if ( !selector || typeof selector !== "string" ) { return results; } if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { return []; } if ( documentIsHTML && !seed ) { // Shortcuts if ( (match = rquickExpr.exec( selector )) ) { // Speed-up: Sizzle("#ID") if ( (m = match[1]) ) { if ( nodeType === 9 ) { elem = context.getElementById( m ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document (jQuery #6963) if ( elem && elem.parentNode ) { // Handle the case where IE, Opera, and Webkit return items // by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } } else { // Context is not a document if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Speed-up: Sizzle("TAG") } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Speed-up: Sizzle(".CLASS") } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // QSA path if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { nid = old = expando; newContext = context; newSelector = nodeType === 9 && selector; // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { groups = tokenize( selector ); if ( (old = context.getAttribute("id")) ) { nid = old.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", nid ); } nid = "[id='" + nid + "'] "; i = groups.length; while ( i-- ) { groups[i] = nid + toSelector( groups[i] ); } newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; newSelector = groups.join(","); } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch(qsaError) { } finally { if ( !old ) { context.removeAttribute("id"); } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {Function(string, Object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = attrs.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== strundefined && context; } // Expose support vars for convenience support = Sizzle.support = {}; /** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView; // If no document and documentElement is available, return if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Set our document document = doc; docElem = doc.documentElement; // Support tests documentIsHTML = !isXML( doc ); // Support: IE>8 // If iframe document is assigned to "document" variable and if iframe has been reloaded, // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 // IE6-8 do not support the defaultView property so parent will be undefined if ( parent && parent !== parent.top ) { // IE11 does not have attachEvent, so all must suffer if ( parent.addEventListener ) { parent.addEventListener( "unload", function() { setDocument(); }, false ); } else if ( parent.attachEvent ) { parent.attachEvent( "onunload", function() { setDocument(); }); } } /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( doc.createComment("") ); return !div.getElementsByTagName("*").length; }); // Check if getElementsByClassName can be trusted support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { div.innerHTML = "
"; // Support: Safari<4 // Catch class over-caching div.firstChild.className = "i"; // Support: Opera<10 // Catch gEBCN failure to find non-leading classes return div.getElementsByClassName("i").length === 2; }); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !doc.getElementsByName || !doc.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== strundefined && documentIsHTML ) { var m = context.getElementById( id ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [m] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== strundefined ) { return context.getElementsByTagName( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 div.innerHTML = ""; // Support: IE8, Opera 10-12 // Nothing should be selected when empty strings follow ^= or $= or *= if ( div.querySelectorAll("[t^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input = doc.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute if ( div.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another // Purposefully does not implement inclusive descendent // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = hasCompare ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } : function( a, b ) { // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; } var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return doc; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch(e) {} } return Sizzle( expr, document, null, [elem] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[5] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] && match[4] !== undefined ) { match[2] = match[4]; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index outerCache = parent[ expando ] || (parent[ expando ] = {}); cache = outerCache[ type ] || []; nodeIndex = cache[0] === dirruns && cache[1]; diff = cache[0] === dirruns && cache[2]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } // Use previously-cached element index if available } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { diff = cache[1]; // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) } else { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf.call( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( (tokens = []) ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); } function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); if ( (oldCache = outerCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements outerCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { outermostContext = context !== document && context; } // Add elements passing elementMatchers directly to results // Keep `i` a string if there are no elements so `matchedCount` will be "00" below // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context, xml ) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // Apply set filters to unmatched elements matchedCount += i; if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !group ) { group = tokenize( selector ); } i = group.length; while ( i-- ) { cached = matcherFromTokens( group[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); } return cached; }; function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function select( selector, context, results, seed ) { var i, tokens, token, type, find, match = tokenize( selector ); if ( !seed ) { // Try to minimize operations if there is only one group if ( match.length === 1 ) { // Take a shortcut and set the context if the root selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } } // Compile and execute a filtering function // Provide `match` to avoid retokenization if we modified the selector above compile( selector, match )( seed, context, !documentIsHTML, results, rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; } // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome<14 // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : (val = elem.getAttributeNode( name )) && val.specified ? val.value : null; } }); } return Sizzle; })( window ); jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.pseudos; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; var rneedsContext = jQuery.expr.match.needsContext; var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); var risSimple = /^.[^:#\[\.,]*$/; // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; }); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; }); } if ( typeof qualifier === "string" ) { if ( risSimple.test( qualifier ) ) { return jQuery.filter( qualifier, elements, not ); } qualifier = jQuery.filter( qualifier, elements ); } return jQuery.grep( elements, function( elem ) { return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; }); } jQuery.filter = function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; })); }; jQuery.fn.extend({ find: function( selector ) { var i, len = this.length, ret = [], self = this; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } }) ); } for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, filter: function( selector ) { return this.pushStack( winnow(this, selector || [], false) ); }, not: function( selector ) { return this.pushStack( winnow(this, selector || [], true) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; } }); // Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, init = jQuery.fn.init = function( selector, context ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // Handle HTML strings if ( typeof selector === "string" ) { if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; // scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( match[1], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return typeof rootjQuery.ready !== "undefined" ? rootjQuery.ready( selector ) : // Execute immediately if ready is not present selector( jQuery ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn; // Initialize central reference rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.extend({ dir: function( elem, dir, until ) { var matched = [], truncate = until !== undefined; while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { if ( truncate && jQuery( elem ).is( until ) ) { break; } matched.push( elem ); } } return matched; }, sibling: function( n, elem ) { var matched = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { matched.push( n ); } } return matched; } }); jQuery.fn.extend({ has: function( target ) { var targets = jQuery( target, this ), l = targets.length; return this.filter(function() { var i = 0; for ( ; i < l; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, matched = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && (pos ? pos.index(cur) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors)) ) { matched.push( cur ); break; } } } return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return indexOf.call( jQuery( elem ), this[ 0 ] ); } // Locate the position of the desired element return indexOf.call( this, // If it receives a jQuery object, the first element is used elem.jquery ? elem[ 0 ] : elem ); }, add: function( selector, context ) { return this.pushStack( jQuery.unique( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter(selector) ); } }); function sibling( cur, dir ) { while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} return cur; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return elem.contentDocument || jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var matched = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { matched = jQuery.filter( selector, matched ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { jQuery.unique( matched ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { matched.reverse(); } } return this.pushStack( matched ); }; }); var rnotwhite = (/\S+/g); // String to Object options format cache var optionsCache = {}; // Convert String-formatted options into Object-formatted ones and store in cache function createOptions( options ) { var object = optionsCache[ options ] = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; }); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? ( optionsCache[ options ] || createOptions( options ) ) : jQuery.extend( {}, options ); var // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // Flag to know if list is currently firing firing, // First callback to fire (used internally by add and fireWith) firingStart, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // Actual callback list list = [], // Stack of fire calls for repeatable lists stack = !options.once && [], // Fire callbacks fire = function( data ) { memory = options.memory && data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for ( ; list && firingIndex < firingLength; firingIndex++ ) { if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { memory = false; // To prevent further calls using add break; } } firing = false; if ( list ) { if ( stack ) { if ( stack.length ) { fire( stack.shift() ); } } else if ( memory ) { list = []; } else { self.disable(); } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // First, we save the current length var start = list.length; (function add( args ) { jQuery.each( args, function( _, arg ) { var type = jQuery.type( arg ); if ( type === "function" ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && type !== "string" ) { // Inspect recursively add( arg ); } }); })( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength = list.length; // With memory, if we're not firing then // we should call right away } else if ( memory ) { firingStart = start; fire( memory ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { jQuery.each( arguments, function( _, arg ) { var index; while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( firing ) { if ( index <= firingLength ) { firingLength--; } if ( index <= firingIndex ) { firingIndex--; } } } }); } return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); }, // Remove all callbacks from the list empty: function() { list = []; firingLength = 0; return this; }, // Have the list do nothing anymore disable: function() { list = stack = memory = undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( list && ( !fired || stack ) ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; if ( firing ) { stack.push( args ); } else { fire( args ); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend({ Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], [ "notify", "progress", jQuery.Callbacks("memory") ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred(function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[1] ](function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .done( newDefer.resolve ) .fail( newDefer.reject ) .progress( newDefer.notify ); } else { newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } }); }); fns = null; }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[1] ] = list.add; // Handle state if ( stateString ) { list.add(function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[0] ] = function() { deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[0] + "With" ] = list.fireWith; }); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ) .progress( updateFunc( i, progressContexts, progressValues ) ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } }); // The deferred used on DOM ready var readyList; jQuery.fn.ready = function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }; jQuery.extend({ // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger("ready").off("ready"); } } }); /** * The ready event handler and self cleanup method */ function completed() { document.removeEventListener( "DOMContentLoaded", completed, false ); window.removeEventListener( "load", completed, false ); jQuery.ready(); } jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called after the browser event has already occurred. // we once tried to use readyState "interactive" here, but it caused issues like the one // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready setTimeout( jQuery.ready ); } else { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed, false ); } } return readyList.promise( obj ); }; // Kick off the DOM ready check even if the user does not jQuery.ready.promise(); // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, len = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < len; i++ ) { fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : len ? fn( elems[0], key ) : emptyGet; }; /** * Determines whether an object can have data */ jQuery.acceptData = function( owner ) { // Accepts only: // - Node // - Node.ELEMENT_NODE // - Node.DOCUMENT_NODE // - Object // - Any /* jshint -W018 */ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); }; function Data() { // Support: Android < 4, // Old WebKit does not have Object.preventExtensions/freeze method, // return new empty object instead with no [[set]] accessor Object.defineProperty( this.cache = {}, 0, { get: function() { return {}; } }); this.expando = jQuery.expando + Math.random(); } Data.uid = 1; Data.accepts = jQuery.acceptData; Data.prototype = { key: function( owner ) { // We can accept data for non-element nodes in modern browsers, // but we should not, see #8335. // Always return the key for a frozen object. if ( !Data.accepts( owner ) ) { return 0; } var descriptor = {}, // Check if the owner object already has a cache key unlock = owner[ this.expando ]; // If not, create one if ( !unlock ) { unlock = Data.uid++; // Secure it in a non-enumerable, non-writable property try { descriptor[ this.expando ] = { value: unlock }; Object.defineProperties( owner, descriptor ); // Support: Android < 4 // Fallback to a less secure definition } catch ( e ) { descriptor[ this.expando ] = unlock; jQuery.extend( owner, descriptor ); } } // Ensure the cache object if ( !this.cache[ unlock ] ) { this.cache[ unlock ] = {}; } return unlock; }, set: function( owner, data, value ) { var prop, // There may be an unlock assigned to this node, // if there is no entry for this "owner", create one inline // and set the unlock as though an owner entry had always existed unlock = this.key( owner ), cache = this.cache[ unlock ]; // Handle: [ owner, key, value ] args if ( typeof data === "string" ) { cache[ data ] = value; // Handle: [ owner, { properties } ] args } else { // Fresh assignments by object are shallow copied if ( jQuery.isEmptyObject( cache ) ) { jQuery.extend( this.cache[ unlock ], data ); // Otherwise, copy the properties one-by-one to the cache object } else { for ( prop in data ) { cache[ prop ] = data[ prop ]; } } } return cache; }, get: function( owner, key ) { // Either a valid cache is found, or will be created. // New caches will be created and the unlock returned, // allowing direct access to the newly created // empty data object. A valid owner object must be provided. var cache = this.cache[ this.key( owner ) ]; return key === undefined ? cache : cache[ key ]; }, access: function( owner, key, value ) { var stored; // In cases where either: // // 1. No key was specified // 2. A string key was specified, but no value provided // // Take the "read" path and allow the get method to determine // which value to return, respectively either: // // 1. The entire cache object // 2. The data stored at the key // if ( key === undefined || ((key && typeof key === "string") && value === undefined) ) { stored = this.get( owner, key ); return stored !== undefined ? stored : this.get( owner, jQuery.camelCase(key) ); } // [*]When the key is not a string, or both a key and value // are specified, set or extend (existing objects) with either: // // 1. An object of properties // 2. A key and value // this.set( owner, key, value ); // Since the "set" path can have two possible entry points // return the expected data based on which path was taken[*] return value !== undefined ? value : key; }, remove: function( owner, key ) { var i, name, camel, unlock = this.key( owner ), cache = this.cache[ unlock ]; if ( key === undefined ) { this.cache[ unlock ] = {}; } else { // Support array or space separated string of keys if ( jQuery.isArray( key ) ) { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = key.concat( key.map( jQuery.camelCase ) ); } else { camel = jQuery.camelCase( key ); // Try the string as a key before any manipulation if ( key in cache ) { name = [ key, camel ]; } else { // If a key with the spaces exists, use it. // Otherwise, create an array by matching non-whitespace name = camel; name = name in cache ? [ name ] : ( name.match( rnotwhite ) || [] ); } } i = name.length; while ( i-- ) { delete cache[ name[ i ] ]; } } }, hasData: function( owner ) { return !jQuery.isEmptyObject( this.cache[ owner[ this.expando ] ] || {} ); }, discard: function( owner ) { if ( owner[ this.expando ] ) { delete this.cache[ owner[ this.expando ] ]; } } }; var data_priv = new Data(); var data_user = new Data(); /* Implementation Summary 1. Enforce API surface and semantic compatibility with 1.9.x branch 2. Improve the module's maintainability by reducing the storage paths to a single mechanism. 3. Use the same single mechanism to support "private" and "user" data. 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 5. Avoid exposing implementation details on user objects (eg. expando properties) 6. Provide a clear path for implementation upgrade to WeakMap in 2014 */ var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr( elem, key, data ) { var name; // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later data_user.set( elem, key, data ); } else { data = undefined; } } return data; } jQuery.extend({ hasData: function( elem ) { return data_user.hasData( elem ) || data_priv.hasData( elem ); }, data: function( elem, name, data ) { return data_user.access( elem, name, data ); }, removeData: function( elem, name ) { data_user.remove( elem, name ); }, // TODO: Now that all calls to _data and _removeData have been replaced // with direct calls to data_priv methods, these can be deprecated. _data: function( elem, name, data ) { return data_priv.access( elem, name, data ); }, _removeData: function( elem, name ) { data_priv.remove( elem, name ); } }); jQuery.fn.extend({ data: function( key, value ) { var i, name, data, elem = this[ 0 ], attrs = elem && elem.attributes; // Gets all values if ( key === undefined ) { if ( this.length ) { data = data_user.get( elem ); if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { i = attrs.length; while ( i-- ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.slice(5) ); dataAttr( elem, name, data[ name ] ); } } data_priv.set( elem, "hasDataAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each(function() { data_user.set( this, key ); }); } return access( this, function( value ) { var data, camelKey = jQuery.camelCase( key ); // The calling jQuery object (element matches) is not empty // (and therefore has an element appears at this[ 0 ]) and the // `value` parameter was not undefined. An empty jQuery object // will result in `undefined` for elem = this[ 0 ] which will // throw an exception if an attempt to read a data cache is made. if ( elem && value === undefined ) { // Attempt to get data from the cache // with the key as-is data = data_user.get( elem, key ); if ( data !== undefined ) { return data; } // Attempt to get data from the cache // with the key camelized data = data_user.get( elem, camelKey ); if ( data !== undefined ) { return data; } // Attempt to "discover" the data in // HTML5 custom data-* attrs data = dataAttr( elem, camelKey, undefined ); if ( data !== undefined ) { return data; } // We tried really hard, but the data doesn't exist. return; } // Set the data... this.each(function() { // First, attempt to store a copy or reference of any // data that might've been store with a camelCased key. var data = data_user.get( this, camelKey ); // For HTML5 data-* attribute interop, we have to // store property names with dashes in a camelCase form. // This might not apply to all properties...* data_user.set( this, camelKey, value ); // *... In the case of properties that might _actually_ // have dashes, we need to also store a copy of that // unchanged property. if ( key.indexOf("-") !== -1 && data !== undefined ) { data_user.set( this, key, value ); } }); }, null, value, arguments.length > 1, null, true ); }, removeData: function( key ) { return this.each(function() { data_user.remove( this, key ); }); } }); jQuery.extend({ queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = data_priv.get( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray( data ) ) { queue = data_priv.access( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return data_priv.get( elem, key ) || data_priv.access( elem, key, { empty: jQuery.Callbacks("once memory").add(function() { data_priv.remove( elem, [ type + "queue", key ] ); }) }); } }); jQuery.fn.extend({ queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } return data === undefined ? this : this.each(function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = data_priv.get( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } }); var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var isHidden = function( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); }; var rcheckableType = (/^(?:checkbox|radio)$/i); (function() { var fragment = document.createDocumentFragment(), div = fragment.appendChild( document.createElement( "div" ) ); // #11217 - WebKit loses check when the name is after the checked attribute div.innerHTML = ""; // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 // old WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Make sure textarea (and checkbox) defaultValue is properly cloned // Support: IE9-IE11+ div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; })(); var strundefined = typeof undefined; support.focusinBubbles = "onfocusin" in window; var rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; function returnTrue() { return true; } function returnFalse() { return false; } function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = data_priv.get( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !(events = elemData.events) ) { events = elemData.events = {}; } if ( !(eventHandle = elemData.handle) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply( elem, arguments ) : undefined; }; } // Handle multiple events separated by a space types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join(".") }, handleObjIn ); // Init the event handler queue if we're the first if ( !(handlers = events[ type ]) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = data_priv.hasData( elem ) && data_priv.get( elem ); if ( !elemData || !(events = elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; data_priv.remove( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var i, cur, tmp, bubbleType, ontype, handle, special, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf(".") >= 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split("."); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join("."); event.namespace_re = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === (elem.ownerDocument || document) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && handle.apply && jQuery.acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); } } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; elem[ type ](); jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, j, ret, matched, handleObj, handlerQueue = [], args = slice.call( arguments ), handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[0] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret !== undefined ) { if ( (event.result = ret) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var i, matches, sel, handleObj, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Find delegate handlers // Black-hole SVG instance trees (#13180) // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { for ( ; cur !== this; cur = cur.parentNode || this ) { // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.disabled !== true || event.type !== "click" ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) >= 0 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, handlers: matches }); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); } return handlerQueue; }, // Includes some event props shared by KeyEvent and MouseEvent props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var eventDoc, doc, body, button = original.button; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: Cordova 2.5 (WebKit) (#13255) // All events should have a target; Cordova deviceready doesn't if ( !event.target ) { event.target = document; } // Support: Safari 6.0+, Chrome < 28 // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { this.focus(); return false; } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === safeActiveElement() && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { this.click(); return false; } }, // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { return jQuery.nodeName( event.target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if ( event.result !== undefined ) { event.originalEvent.returnValue = event.result; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || // Support: Android < 4.0 src.defaultPrevented === undefined && src.getPreventDefault && src.getPreventDefault() ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( e && e.preventDefault ) { e.preventDefault(); } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( e && e.stopPropagation ) { e.stopPropagation(); } }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks // Support: Chrome 15+ jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; }); // Create "bubbling" focus and blur events // Support: Firefox, Chrome, Safari if ( !support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special[ fix ] = { setup: function() { var doc = this.ownerDocument || this, attaches = data_priv.access( doc, fix ); if ( !attaches ) { doc.addEventListener( orig, handler, true ); } data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { var doc = this.ownerDocument || this, attaches = data_priv.access( doc, fix ) - 1; if ( !attaches ) { doc.removeEventListener( orig, handler, true ); data_priv.remove( doc, fix ); } else { data_priv.access( doc, fix, attaches ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { this.on( type, selector, data, types[ type ], one ); } return this; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return this; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { var elem = this[0]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } }); var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rtagName = /<([\w:]+)/, rhtml = /<|&#?\w+;/, rnoInnerhtml = /<(?:script|style|link)/i, // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /^$|\/(?:java|ecma)script/i, rscriptTypeMasked = /^true\/(.*)/, rcleanScript = /^\s*\s*$/g, // We have to close these tags to support XHTML (#13200) wrapMap = { // Support: IE 9 option: [ 1, "" ], thead: [ 1, "", "
" ], col: [ 2, "", "
" ], tr: [ 2, "", "
" ], td: [ 3, "", "
" ], _default: [ 0, "", "" ] }; // Support: IE 9 wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; // Support: 1.x compatibility // Manipulating tables requires a tbody function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? elem.getElementsByTagName("tbody")[0] || elem.appendChild( elem.ownerDocument.createElement("tbody") ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[ 1 ]; } else { elem.removeAttribute("type"); } return elem; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var i = 0, l = elems.length; for ( ; i < l; i++ ) { data_priv.set( elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) ); } } function cloneCopyEvent( src, dest ) { var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; if ( dest.nodeType !== 1 ) { return; } // 1. Copy private data: events, handlers, etc. if ( data_priv.hasData( src ) ) { pdataOld = data_priv.access( src ); pdataCur = data_priv.set( dest, pdataOld ); events = pdataOld.events; if ( events ) { delete pdataCur.handle; pdataCur.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } } // 2. Copy user data if ( data_user.hasData( src ) ) { udataOld = data_user.access( src ); udataCur = jQuery.extend( {}, udataOld ); data_user.set( dest, udataCur ); } } function getAll( context, tag ) { var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : []; return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], ret ) : ret; } // Support: IE >= 9 function fixInput( src, dest ) { var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button. if ( nodeName === "input" && rcheckableType.test( src.type ) ) { dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var i, l, srcElements, destElements, clone = elem.cloneNode( true ), inPage = jQuery.contains( elem.ownerDocument, elem ); // Support: IE >= 9 // Fix Cloning issues if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); for ( i = 0, l = srcElements.length; i < l; i++ ) { fixInput( srcElements[ i ], destElements[ i ] ); } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0, l = srcElements.length; i < l; i++ ) { cloneCopyEvent( srcElements[ i ], destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } // Return the cloned set return clone; }, buildFragment: function( elems, context, scripts, selection ) { var elem, tmp, tag, wrap, contains, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length; for ( ; i < l; i++ ) { elem = elems[ i ]; if ( elem || elem === 0 ) { // Add nodes directly if ( jQuery.type( elem ) === "object" ) { // Support: QtWebKit // jQuery.merge because push.apply(_, arraylike) throws jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); // Convert non-html into a text node } else if ( !rhtml.test( elem ) ) { nodes.push( context.createTextNode( elem ) ); // Convert html into DOM nodes } else { tmp = tmp || fragment.appendChild( context.createElement("div") ); // Deserialize a standard representation tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[ 2 ]; // Descend through wrappers to the right content j = wrap[ 0 ]; while ( j-- ) { tmp = tmp.lastChild; } // Support: QtWebKit // jQuery.merge because push.apply(_, arraylike) throws jQuery.merge( nodes, tmp.childNodes ); // Remember the top-level container tmp = fragment.firstChild; // Fixes #12346 // Support: Webkit, IE tmp.textContent = ""; } } } // Remove wrapper from fragment fragment.textContent = ""; i = 0; while ( (elem = nodes[ i++ ]) ) { // #4087 - If origin and destination elements are the same, and this is // that element, do not do anything if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( fragment.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( (elem = tmp[ j++ ]) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } return fragment; }, cleanData: function( elems ) { var data, elem, events, type, key, j, special = jQuery.event.special, i = 0; for ( ; (elem = elems[ i ]) !== undefined; i++ ) { if ( jQuery.acceptData( elem ) ) { key = elem[ data_priv.expando ]; if ( key && (data = data_priv.cache[ key ]) ) { events = Object.keys( data.events || {} ); if ( events.length ) { for ( j = 0; (type = events[j]) !== undefined; j++ ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } if ( data_priv.cache[ key ] ) { // Discard any remaining `private` data delete data_priv.cache[ key ]; } } } // Discard any remaining `user` data delete data_user.cache[ elem[ data_user.expando ] ]; } } }); jQuery.fn.extend({ text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().each(function() { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { this.textContent = value; } }); }, null, value, arguments.length ); }, append: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } }); }, prepend: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } }); }, before: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } }); }, after: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } }); }, remove: function( selector, keepData /* Internal Use Only */ ) { var elem, elems = selector ? jQuery.filter( selector, this ) : this, i = 0; for ( ; (elem = elems[i]) != null; i++ ) { if ( !keepData && elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem ) ); } if ( elem.parentNode ) { if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { setGlobalEval( getAll( elem, "script" ) ); } elem.parentNode.removeChild( elem ); } } return this; }, empty: function() { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { if ( elem.nodeType === 1 ) { // Prevent memory leaks jQuery.cleanData( getAll( elem, false ) ); // Remove any remaining nodes elem.textContent = ""; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map(function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); }, html: function( value ) { return access( this, function( value ) { var elem = this[ 0 ] || {}, i = 0, l = this.length; if ( value === undefined && elem.nodeType === 1 ) { return elem.innerHTML; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { value = value.replace( rxhtmlTag, "<$1>" ); try { for ( ; i < l; i++ ) { elem = this[ i ] || {}; // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch( e ) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var arg = arguments[ 0 ]; // Make the changes, replacing each context element with the new content this.domManip( arguments, function( elem ) { arg = this.parentNode; jQuery.cleanData( getAll( this ) ); if ( arg ) { arg.replaceChild( elem, this ); } }); // Force removal if there was no new content (e.g., from empty arguments) return arg && (arg.length || arg.nodeType) ? this : this.remove(); }, detach: function( selector ) { return this.remove( selector, true ); }, domManip: function( args, callback ) { // Flatten any nested arrays args = concat.apply( [], args ); var fragment, first, scripts, hasScripts, node, doc, i = 0, l = this.length, set = this, iNoClone = l - 1, value = args[ 0 ], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return this.each(function( index ) { var self = set.eq( index ); if ( isFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } self.domManip( args, callback ); }); } if ( l ) { fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } if ( first ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { // Support: QtWebKit // jQuery.merge because push.apply(_, arraylike) throws jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( this[ i ], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); } } } } } } return this; } }); jQuery.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, ret = [], insert = jQuery( selector ), last = insert.length - 1, i = 0; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone( true ); jQuery( insert[ i ] )[ original ]( elems ); // Support: QtWebKit // .get() because push.apply(_, arraylike) throws push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; }); var iframe, elemdisplay = {}; /** * Retrieve the actual display of a element * @param {String} name nodeName of the element * @param {Object} doc Document object */ // Called only from within defaultDisplay function actualDisplay( name, doc ) { var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), // getDefaultComputedStyle might be reliably used only on attached element display = window.getDefaultComputedStyle ? // Use of this method is a temporary fix (more like optmization) until something better comes along, // since it was removed from specification and supported only in FF window.getDefaultComputedStyle( elem[ 0 ] ).display : jQuery.css( elem[ 0 ], "display" ); // We don't have any data stored on the element, // so use "detach" method as fast way to get rid of the element elem.detach(); return display; } /** * Try to determine the default display value of an element * @param {String} nodeName */ function defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = (iframe || jQuery( "