rack 1.4.0 → 1.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +1 -1
- data/KNOWN-ISSUES +9 -0
- data/README.rdoc +118 -4
- data/Rakefile +18 -11
- data/SPEC +3 -1
- data/contrib/rack.png +0 -0
- data/contrib/rack.svg +150 -0
- data/contrib/rdoc.css +412 -0
- data/lib/rack/auth/abstract/request.rb +5 -1
- data/lib/rack/auth/basic.rb +1 -1
- data/lib/rack/auth/digest/nonce.rb +1 -1
- data/lib/rack/backports/uri/common_18.rb +14 -28
- data/lib/rack/backports/uri/common_192.rb +14 -17
- data/lib/rack/backports/uri/common_193.rb +29 -0
- data/lib/rack/body_proxy.rb +15 -2
- data/lib/rack/builder.rb +1 -1
- data/lib/rack/cascade.rb +12 -1
- data/lib/rack/commonlogger.rb +18 -5
- data/lib/rack/deflater.rb +5 -1
- data/lib/rack/directory.rb +1 -1
- data/lib/rack/etag.rb +6 -3
- data/lib/rack/file.rb +20 -16
- data/lib/rack/head.rb +1 -0
- data/lib/rack/lint.rb +3 -1
- data/lib/rack/lock.rb +3 -4
- data/lib/rack/mime.rb +1 -1
- data/lib/rack/mock.rb +3 -2
- data/lib/rack/multipart/parser.rb +22 -20
- data/lib/rack/multipart.rb +2 -2
- data/lib/rack/reloader.rb +1 -1
- data/lib/rack/request.rb +4 -6
- data/lib/rack/response.rb +19 -17
- data/lib/rack/server.rb +28 -2
- data/lib/rack/session/abstract/id.rb +8 -3
- data/lib/rack/session/cookie.rb +20 -7
- data/lib/rack/showstatus.rb +2 -2
- data/lib/rack/static.rb +91 -9
- data/lib/rack/utils.rb +74 -36
- data/lib/rack.rb +13 -1
- data/rack.gemspec +3 -3
- data/test/builder/line.ru +1 -0
- data/test/cgi/assets/folder/test.js +1 -0
- data/test/cgi/assets/fonts/font.eot +1 -0
- data/test/cgi/assets/images/image.png +1 -0
- data/test/cgi/assets/index.html +1 -0
- data/test/cgi/assets/javascripts/app.js +1 -0
- data/test/cgi/assets/stylesheets/app.css +1 -0
- data/test/multipart/filename_with_unescaped_percentages +6 -0
- data/test/multipart/filename_with_unescaped_percentages2 +6 -0
- data/test/multipart/filename_with_unescaped_percentages3 +6 -0
- data/test/spec_auth.rb +57 -0
- data/test/spec_auth_basic.rb +8 -0
- data/test/spec_auth_digest.rb +14 -0
- data/test/spec_body_proxy.rb +21 -0
- data/test/spec_builder.rb +7 -1
- data/test/spec_cascade.rb +14 -3
- data/test/spec_chunked.rb +6 -6
- data/test/spec_config.rb +0 -1
- data/test/spec_content_length.rb +26 -13
- data/test/spec_content_type.rb +15 -5
- data/test/spec_deflater.rb +35 -17
- data/test/spec_directory.rb +20 -1
- data/test/spec_etag.rb +29 -13
- data/test/spec_file.rb +58 -30
- data/test/spec_head.rb +25 -7
- data/test/spec_lobster.rb +20 -5
- data/test/spec_lock.rb +46 -21
- data/test/spec_logger.rb +2 -7
- data/test/spec_methodoverride.rb +21 -22
- data/test/spec_mock.rb +12 -7
- data/test/spec_multipart.rb +129 -2
- data/test/spec_nulllogger.rb +13 -2
- data/test/spec_recursive.rb +12 -9
- data/test/spec_request.rb +15 -2
- data/test/spec_response.rb +41 -3
- data/test/spec_runtime.rb +15 -5
- data/test/spec_sendfile.rb +13 -9
- data/test/spec_server.rb +47 -0
- data/test/spec_session_cookie.rb +93 -3
- data/test/spec_session_memcache.rb +10 -8
- data/test/spec_session_pool.rb +13 -10
- data/test/spec_showexceptions.rb +9 -4
- data/test/spec_showstatus.rb +10 -5
- data/test/spec_static.rb +89 -8
- data/test/spec_urlmap.rb +10 -10
- data/test/spec_utils.rb +34 -7
- data/test/static/another/index.html +1 -0
- metadata +26 -8
data/COPYING
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2007, 2008, 2009, 2010 Christian Neukirchen <purl.org/net/chneukirchen>
|
|
1
|
+
Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012 Christian Neukirchen <purl.org/net/chneukirchen>
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
4
|
of this software and associated documentation files (the "Software"), to
|
data/KNOWN-ISSUES
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
= Known issues with Rack and ECMA-262
|
|
2
|
+
|
|
3
|
+
* Many users expect the escape() function defined in ECMA-262 to be compatible
|
|
4
|
+
with URI. Confusion is especially strong because the documentation for the
|
|
5
|
+
escape function includes a reference to the URI specifications. ECMA-262
|
|
6
|
+
escape is not however a URI escape function, it is a javascript escape
|
|
7
|
+
function, and is not fully compatible. Most notably, for characters outside of
|
|
8
|
+
the BMP. Users should use the more correct encodeURI functions.
|
|
9
|
+
|
|
1
10
|
= Known issues with Rack and Web servers
|
|
2
11
|
|
|
3
12
|
* Lighttpd sets wrong SCRIPT_NAME and PATH_INFO if you mount your
|
data/README.rdoc
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
= Rack, a modular Ruby webserver interface
|
|
1
|
+
= Rack, a modular Ruby webserver interface {<img src="https://secure.travis-ci.org/rack/rack.png" alt="Build Status" />}[http://travis-ci.org/rack/rack] {<img src="https://gemnasium.com/rack/rack.png" alt="Dependency Status" />}[https://gemnasium.com/rack/rack]
|
|
2
2
|
|
|
3
3
|
Rack provides a minimal, modular and adaptable interface for developing
|
|
4
4
|
web applications in Ruby. By wrapping HTTP requests and responses in
|
|
@@ -27,8 +27,11 @@ These web servers include Rack handlers in their distributions:
|
|
|
27
27
|
* Fuzed
|
|
28
28
|
* Glassfish v3
|
|
29
29
|
* Phusion Passenger (which is mod_rack for Apache and for nginx)
|
|
30
|
+
* Puma
|
|
30
31
|
* Rainbows!
|
|
31
32
|
* Unicorn
|
|
33
|
+
* unixrack
|
|
34
|
+
* uWSGI
|
|
32
35
|
* Zbatery
|
|
33
36
|
|
|
34
37
|
Any valid Rack app will run the same on all these handlers, without
|
|
@@ -132,7 +135,11 @@ at my site:
|
|
|
132
135
|
|
|
133
136
|
Testing Rack requires the bacon testing framework:
|
|
134
137
|
|
|
135
|
-
|
|
138
|
+
bundle install --without extra # to be able to run the fast tests
|
|
139
|
+
|
|
140
|
+
Or:
|
|
141
|
+
|
|
142
|
+
bundle install # this assumes that you have installed native extensions!
|
|
136
143
|
|
|
137
144
|
There are two rake-based test tasks:
|
|
138
145
|
|
|
@@ -355,7 +362,7 @@ run on port 11211) and memcache-client installed.
|
|
|
355
362
|
* July 16, 2011: Sixteenth public release 1.3.2
|
|
356
363
|
* Fix for Rails and rack-test, Rack::Utils#escape calls to_s
|
|
357
364
|
|
|
358
|
-
*
|
|
365
|
+
* September 16, 2011: Seventeenth public release 1.3.3
|
|
359
366
|
* Fix bug with broken query parameters in Rack::ShowExceptions
|
|
360
367
|
* Rack::Request#cookies no longer swallows exceptions on broken input
|
|
361
368
|
* Prevents XSS attacks enabled by bug in Ruby 1.8's regexp engine
|
|
@@ -373,6 +380,10 @@ run on port 11211) and memcache-client installed.
|
|
|
373
380
|
* October 17, 2011: Twentieth public release 1.3.5
|
|
374
381
|
* Fix annoying warnings caused by the backport in 1.3.4
|
|
375
382
|
|
|
383
|
+
* December 28th, 2011: Twenty first public release: 1.1.3.
|
|
384
|
+
* Security fix. http://www.ocert.org/advisories/ocert-2011-003.html
|
|
385
|
+
Further information here: http://jruby.org/2011/12/27/jruby-1-6-5-1
|
|
386
|
+
|
|
376
387
|
* December 28th, 2011: Twenty fourth public release 1.4.0
|
|
377
388
|
* Ruby 1.8.6 support has officially been dropped. Not all tests pass.
|
|
378
389
|
* Raise sane error messages for broken config.ru
|
|
@@ -392,11 +403,114 @@ run on port 11211) and memcache-client installed.
|
|
|
392
403
|
* Support added for HTTP_X_FORWARDED_SCHEME
|
|
393
404
|
* Numerous bug fixes, including many fixes for new and alternate rubies
|
|
394
405
|
|
|
406
|
+
* January 22nd, 2012: Twenty fifth public release 1.4.1
|
|
407
|
+
* Alter the keyspace limit calculations to reduce issues with nested params
|
|
408
|
+
* Add a workaround for multipart parsing where files contain unescaped "%"
|
|
409
|
+
* Added Rack::Response::Helpers#method_not_allowed? (code 405)
|
|
410
|
+
* Rack::File now returns 404 for illegal directory traversals
|
|
411
|
+
* Rack::File now returns 405 for illegal methods (non HEAD/GET)
|
|
412
|
+
* Rack::Cascade now catches 405 by default, as well as 404
|
|
413
|
+
* Cookies missing '--' no longer cause an exception to be raised
|
|
414
|
+
* Various style changes and documentation spelling errors
|
|
415
|
+
* Rack::BodyProxy always ensures to execute its block
|
|
416
|
+
* Additional test coverage around cookies and secrets
|
|
417
|
+
* Rack::Session::Cookie can now be supplied either secret or old_secret
|
|
418
|
+
* Tests are no longer dependent on set order
|
|
419
|
+
* Rack::Static no longer defaults to serving index files
|
|
420
|
+
* Rack.release was fixed
|
|
421
|
+
|
|
422
|
+
* January 6th, 2013: Twenty sixth public release 1.1.4
|
|
423
|
+
* Add warnings when users do not provide a session secret
|
|
424
|
+
|
|
425
|
+
* January 6th, 2013: Twenty seventh public release 1.2.6
|
|
426
|
+
* Add warnings when users do not provide a session secret
|
|
427
|
+
* Fix parsing performance for unquoted filenames
|
|
428
|
+
|
|
429
|
+
* January 6th, 2013: Twenty eighth public release 1.3.7
|
|
430
|
+
* Add warnings when users do not provide a session secret
|
|
431
|
+
* Fix parsing performance for unquoted filenames
|
|
432
|
+
* Updated URI backports
|
|
433
|
+
* Fix URI backport version matching, and silence constant warnings
|
|
434
|
+
* Correct parameter parsing with empty values
|
|
435
|
+
* Correct rackup '-I' flag, to allow multiple uses
|
|
436
|
+
* Correct rackup pidfile handling
|
|
437
|
+
* Report rackup line numbers correctly
|
|
438
|
+
* Fix request loops caused by non-stale nonces with time limits
|
|
439
|
+
* Fix reloader on Windows
|
|
440
|
+
* Prevent infinite recursions from Response#to_ary
|
|
441
|
+
* Various middleware better conforms to the body close specification
|
|
442
|
+
* Updated language for the body close specification
|
|
443
|
+
* Additional notes regarding ECMA escape compatibility issues
|
|
444
|
+
* Fix the parsing of multiple ranges in range headers
|
|
445
|
+
|
|
446
|
+
* January 6th, 2013: Twenty ninth public release 1.4.2
|
|
447
|
+
* Add warnings when users do not provide a session secret
|
|
448
|
+
* Fix parsing performance for unquoted filenames
|
|
449
|
+
* Updated URI backports
|
|
450
|
+
* Fix URI backport version matching, and silence constant warnings
|
|
451
|
+
* Correct parameter parsing with empty values
|
|
452
|
+
* Correct rackup '-I' flag, to allow multiple uses
|
|
453
|
+
* Correct rackup pidfile handling
|
|
454
|
+
* Report rackup line numbers correctly
|
|
455
|
+
* Fix request loops caused by non-stale nonces with time limits
|
|
456
|
+
* Fix reloader on Windows
|
|
457
|
+
* Prevent infinite recursions from Response#to_ary
|
|
458
|
+
* Various middleware better conforms to the body close specification
|
|
459
|
+
* Updated language for the body close specification
|
|
460
|
+
* Additional notes regarding ECMA escape compatibility issues
|
|
461
|
+
* Fix the parsing of multiple ranges in range headers
|
|
462
|
+
* Prevent errors from empty parameter keys
|
|
463
|
+
* Added PATCH verb to Rack::Request
|
|
464
|
+
* Various documentation updates
|
|
465
|
+
* Fix session merge semantics (fixes rack-test)
|
|
466
|
+
* Rack::Static :index can now handle multiple directories
|
|
467
|
+
* All tests now utilize Rack::Lint (special thanks to Lars Gierth)
|
|
468
|
+
* Rack::File cache_control parameter is now deprecated, and removed by 1.5
|
|
469
|
+
* Correct Rack::Directory script name escaping
|
|
470
|
+
* Rack::Static supports header rules for sophisticated configurations
|
|
471
|
+
* Multipart parsing now works without a Content-Length header
|
|
472
|
+
* New logos courtesy of Zachary Scott!
|
|
473
|
+
* Rack::BodyProxy now explicitly defines #each, useful for C extensions
|
|
474
|
+
* Cookies that are not URI escaped no longer cause exceptions
|
|
475
|
+
|
|
476
|
+
* January 7th, 2013: Thirtieth public release 1.3.8
|
|
477
|
+
* Security: Prevent unbounded reads in large multipart boundaries
|
|
478
|
+
|
|
479
|
+
* January 7th, 2013: Thirty first public release 1.4.3
|
|
480
|
+
* Security: Prevent unbounded reads in large multipart boundaries
|
|
481
|
+
|
|
482
|
+
* January 13th, 2013: Thirty second public release 1.4.4, 1.3.9, 1.2.7, 1.1.5
|
|
483
|
+
* [SEC] Rack::Auth::AbstractRequest no longer symbolizes arbitrary strings
|
|
484
|
+
* Fixed erroneous test case in the 1.3.x series
|
|
485
|
+
|
|
486
|
+
* February 7th, Thirty fifth public release 1.1.6, 1.2.8, 1.3.10
|
|
487
|
+
* Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
|
|
488
|
+
|
|
489
|
+
* February 7th, Thirty fifth public release 1.4.5
|
|
490
|
+
* Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
|
|
491
|
+
* Fix CVE-2013-0262, symlink path traversal in Rack::File
|
|
492
|
+
|
|
493
|
+
* February 7th, Thirty fifth public release 1.5.2
|
|
494
|
+
* Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
|
|
495
|
+
* Fix CVE-2013-0262, symlink path traversal in Rack::File
|
|
496
|
+
* Add various methods to Session for enhanced Rails compatibility
|
|
497
|
+
* Request#trusted_proxy? now only matches whole stirngs
|
|
498
|
+
* Add JSON cookie coder, to be default in Rack 1.6+ due to security concerns
|
|
499
|
+
* URLMap host matching in environments that don't set the Host header fixed
|
|
500
|
+
* Fix a race condition that could result in overwritten pidfiles
|
|
501
|
+
* Various documentation additions
|
|
502
|
+
|
|
395
503
|
== Contact
|
|
396
504
|
|
|
397
505
|
Please post bugs, suggestions and patches to
|
|
398
506
|
the bug tracker at <http://github.com/rack/rack/issues>.
|
|
399
507
|
|
|
508
|
+
Please post security related bugs and suggestions to the core team at
|
|
509
|
+
<https://groups.google.com/group/rack-core> or rack-core@googlegroups.com. Due
|
|
510
|
+
to wide usage of the library, it is strongly preferred that we manage timing in
|
|
511
|
+
order to provide viable patches at the time of disclosure. Your assistance in
|
|
512
|
+
this matter is greatly appreciated.
|
|
513
|
+
|
|
400
514
|
Mailing list archives are available at
|
|
401
515
|
<http://groups.google.com/group/rack-devel>.
|
|
402
516
|
|
|
@@ -472,7 +586,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
472
586
|
|
|
473
587
|
== Links
|
|
474
588
|
|
|
475
|
-
Rack:: <http://rack.
|
|
589
|
+
Rack:: <http://rack.github.com/>
|
|
476
590
|
Official Rack repositories:: <http://github.com/rack>
|
|
477
591
|
Rack Bug Tracking:: <http://github.com/rack/rack/issues>
|
|
478
592
|
rack-devel mailing list:: <http://groups.google.com/group/rack-devel>
|
data/Rakefile
CHANGED
|
@@ -11,12 +11,12 @@ task :deps do
|
|
|
11
11
|
reqs = dep.requirements_list
|
|
12
12
|
reqs = (["-v"] * reqs.size).zip(reqs).flatten
|
|
13
13
|
# Use system over sh, because we want to ignore errors!
|
|
14
|
-
system "gem", "install", '--conservative', dep.name, *reqs
|
|
14
|
+
system Gem.ruby, "-S", "gem", "install", '--conservative', dep.name, *reqs
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
desc "Make an archive as .tar.gz"
|
|
19
|
-
task :dist => [
|
|
19
|
+
task :dist => %w[chmod ChangeLog SPEC rdoc] do
|
|
20
20
|
sh "git archive --format=tar --prefix=#{release}/ HEAD^{tree} >#{release}.tar"
|
|
21
21
|
sh "pax -waf #{release}.tar -s ':^:#{release}/:' SPEC ChangeLog doc rack.gemspec"
|
|
22
22
|
sh "gzip -f -9 #{release}.tar"
|
|
@@ -31,7 +31,7 @@ task :officialrelease do
|
|
|
31
31
|
sh "mv stage/#{release}.tar.gz stage/#{release}.gem ."
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
task :officialrelease_really => [
|
|
34
|
+
task :officialrelease_really => %w[SPEC dist gem] do
|
|
35
35
|
sh "sha1sum #{release}.tar.gz #{release}.gem"
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -46,7 +46,10 @@ task :chmod do
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
desc "Generate a ChangeLog"
|
|
49
|
-
task :changelog
|
|
49
|
+
task :changelog => %w[ChangeLog]
|
|
50
|
+
|
|
51
|
+
file '.git/index'
|
|
52
|
+
file "ChangeLog" => '.git/index' do
|
|
50
53
|
File.open("ChangeLog", "w") { |out|
|
|
51
54
|
`git log -z`.split("\0").map { |chunk|
|
|
52
55
|
author = chunk[/Author: (.*)/, 1].strip
|
|
@@ -63,7 +66,6 @@ task :changelog do
|
|
|
63
66
|
}
|
|
64
67
|
end
|
|
65
68
|
|
|
66
|
-
|
|
67
69
|
file 'lib/rack/lint.rb'
|
|
68
70
|
desc "Generate Rack Specification"
|
|
69
71
|
file "SPEC" => 'lib/rack/lint.rb' do
|
|
@@ -99,17 +101,22 @@ task :gem => ["SPEC"] do
|
|
|
99
101
|
sh "gem build rack.gemspec"
|
|
100
102
|
end
|
|
101
103
|
|
|
104
|
+
task :doc => :rdoc
|
|
102
105
|
desc "Generate RDoc documentation"
|
|
103
|
-
task :rdoc => [
|
|
106
|
+
task :rdoc => %w[ChangeLog SPEC] do
|
|
104
107
|
sh(*%w{rdoc --line-numbers --main README.rdoc
|
|
105
108
|
--title 'Rack\ Documentation' --charset utf-8 -U -o doc} +
|
|
106
|
-
%w{README.rdoc KNOWN-ISSUES SPEC} +
|
|
107
|
-
|
|
109
|
+
%w{README.rdoc KNOWN-ISSUES SPEC ChangeLog} +
|
|
110
|
+
`git ls-files lib/\*\*/\*.rb`.strip.split)
|
|
111
|
+
cp "contrib/rdoc.css", "doc/rdoc.css"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
task :pushdoc => %w[rdoc] do
|
|
115
|
+
sh "rsync -avz doc/ rack.rubyforge.org:/var/www/gforge-projects/rack/doc/"
|
|
108
116
|
end
|
|
109
117
|
|
|
110
|
-
task :pushsite => [
|
|
118
|
+
task :pushsite => %w[pushdoc] do
|
|
111
119
|
sh "cd site && git gc"
|
|
112
|
-
sh "rsync -avz
|
|
113
|
-
sh "rsync -avz site/ chneukirchen@rack.rubyforge.org:/var/www/gforge-projects/rack/"
|
|
120
|
+
sh "rsync -avz site/ rack.rubyforge.org:/var/www/gforge-projects/rack/"
|
|
114
121
|
sh "cd site && git push"
|
|
115
122
|
end
|
data/SPEC
CHANGED
|
@@ -156,7 +156,9 @@ The Body must respond to +each+
|
|
|
156
156
|
and must only yield String values.
|
|
157
157
|
The Body itself should not be an instance of String, as this will
|
|
158
158
|
break in Ruby 1.9.
|
|
159
|
-
If the Body responds to +close+, it will be called after iteration.
|
|
159
|
+
If the Body responds to +close+, it will be called after iteration. If
|
|
160
|
+
the body is replaced by a middleware after action, the original body
|
|
161
|
+
must be closed first, if it repsonds to close.
|
|
160
162
|
If the Body responds to +to_path+, it must return a String
|
|
161
163
|
identifying the location of a file whose contents are identical
|
|
162
164
|
to that produced by calling +each+; this may be used by the
|
data/contrib/rack.png
ADDED
|
Binary file
|
data/contrib/rack.svg
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
|
6
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
7
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
8
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
9
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
12
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
13
|
+
width="744.09448819"
|
|
14
|
+
height="1052.3622047"
|
|
15
|
+
id="svg2"
|
|
16
|
+
version="1.1"
|
|
17
|
+
inkscape:version="0.48.3.1 r9886"
|
|
18
|
+
sodipodi:docname="rack.svg">
|
|
19
|
+
<defs
|
|
20
|
+
id="defs4">
|
|
21
|
+
<linearGradient
|
|
22
|
+
id="linearGradient3837"
|
|
23
|
+
osb:paint="solid">
|
|
24
|
+
<stop
|
|
25
|
+
style="stop-color:#000000;stop-opacity:1;"
|
|
26
|
+
offset="0"
|
|
27
|
+
id="stop3839" />
|
|
28
|
+
</linearGradient>
|
|
29
|
+
</defs>
|
|
30
|
+
<sodipodi:namedview
|
|
31
|
+
id="base"
|
|
32
|
+
pagecolor="#ffffff"
|
|
33
|
+
bordercolor="#666666"
|
|
34
|
+
borderopacity="1.0"
|
|
35
|
+
inkscape:pageopacity="0.0"
|
|
36
|
+
inkscape:pageshadow="2"
|
|
37
|
+
inkscape:zoom="0.98994949"
|
|
38
|
+
inkscape:cx="230.49849"
|
|
39
|
+
inkscape:cy="656.46253"
|
|
40
|
+
inkscape:document-units="px"
|
|
41
|
+
inkscape:current-layer="layer1"
|
|
42
|
+
showgrid="false"
|
|
43
|
+
showguides="false"
|
|
44
|
+
inkscape:guide-bbox="true"
|
|
45
|
+
inkscape:window-width="1920"
|
|
46
|
+
inkscape:window-height="1056"
|
|
47
|
+
inkscape:window-x="1920"
|
|
48
|
+
inkscape:window-y="24"
|
|
49
|
+
inkscape:window-maximized="1">
|
|
50
|
+
<sodipodi:guide
|
|
51
|
+
orientation="1,0"
|
|
52
|
+
position="645.99255,757.10933"
|
|
53
|
+
id="guide2995" />
|
|
54
|
+
<sodipodi:guide
|
|
55
|
+
orientation="1,0"
|
|
56
|
+
position="488.40876,686.90373"
|
|
57
|
+
id="guide2997" />
|
|
58
|
+
<sodipodi:guide
|
|
59
|
+
orientation="1,0"
|
|
60
|
+
position="176.7767,748.52304"
|
|
61
|
+
id="guide2999" />
|
|
62
|
+
<sodipodi:guide
|
|
63
|
+
orientation="1,0"
|
|
64
|
+
position="355.71429,782.85714"
|
|
65
|
+
id="guide3005" />
|
|
66
|
+
<sodipodi:guide
|
|
67
|
+
orientation="0,1"
|
|
68
|
+
position="527.14286,642.85714"
|
|
69
|
+
id="guide3007" />
|
|
70
|
+
<sodipodi:guide
|
|
71
|
+
orientation="0,1"
|
|
72
|
+
position="431.42857,507.85714"
|
|
73
|
+
id="guide3009" />
|
|
74
|
+
<sodipodi:guide
|
|
75
|
+
orientation="0,1"
|
|
76
|
+
position="488.40876,783.57143"
|
|
77
|
+
id="guide3011" />
|
|
78
|
+
<sodipodi:guide
|
|
79
|
+
orientation="0,1"
|
|
80
|
+
position="505,372.85714"
|
|
81
|
+
id="guide3013" />
|
|
82
|
+
</sodipodi:namedview>
|
|
83
|
+
<metadata
|
|
84
|
+
id="metadata7">
|
|
85
|
+
<rdf:RDF>
|
|
86
|
+
<cc:Work
|
|
87
|
+
rdf:about="">
|
|
88
|
+
<dc:format>image/svg+xml</dc:format>
|
|
89
|
+
<dc:type
|
|
90
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
91
|
+
<dc:title></dc:title>
|
|
92
|
+
</cc:Work>
|
|
93
|
+
</rdf:RDF>
|
|
94
|
+
</metadata>
|
|
95
|
+
<g
|
|
96
|
+
inkscape:label="Layer 1"
|
|
97
|
+
inkscape:groupmode="layer"
|
|
98
|
+
id="layer1">
|
|
99
|
+
<path
|
|
100
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
101
|
+
d="m 176.28125,201.03125 0,0.625 0,395.125 0,0.375 0.34375,0.0937 312.34375,91.6875 0.625,0.1875 0,-0.65625 0.125,-419.09375 0,-0.40625 -0.40625,-0.0937 -312.4375,-67.71875 -0.59375,-0.125 z m 1,1.21875 311.4375,67.5 -0.125,418.0625 -311.3125,-91.375 0,-394.1875 z"
|
|
102
|
+
id="path2985"
|
|
103
|
+
inkscape:connector-curvature="0" />
|
|
104
|
+
<path
|
|
105
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
106
|
+
d="m 647.21875,206.59375 -0.6875,0.28125 -157.59375,62.21875 -0.3125,0.125 0,0.34375 0.1875,419.125 0,0.75 0.6875,-0.28125 156.0625,-63.1875 0.3125,-0.125 0,-0.34375 1.34375,-418.15625 0,-0.75 z m -1,1.4375 -1.34375,417.125 -155.0625,62.78125 -0.1875,-418.03125 156.59375,-61.875 z"
|
|
107
|
+
id="path2993"
|
|
108
|
+
inkscape:connector-curvature="0" />
|
|
109
|
+
<path
|
|
110
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
111
|
+
d="m 355.6875,137.40625 -0.15625,0.0625 L 176.96875,201.0625 177.3125,202 355.75,138.4375 646.78125,207.53125 647,206.5625 l -291.15625,-69.125 -0.15625,-0.0312 z"
|
|
112
|
+
id="path3003"
|
|
113
|
+
inkscape:connector-curvature="0" />
|
|
114
|
+
<path
|
|
115
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
116
|
+
d="m 355.71875,277.53125 -0.125,0.0312 -178.9375,47.96875 -1.8125,0.46875 1.8125,0.5 311.625,83.5 0.15625,0.0312 0.125,-0.0625 157.59375,-53.65625 1.5625,-0.53125 -1.59375,-0.4375 -290.28125,-77.78125 -0.125,-0.0312 z m 0,1.03125 L 644.3125,355.90625 488.375,409 178.71875,326 l 177,-47.4375 z"
|
|
117
|
+
id="path3015"
|
|
118
|
+
inkscape:connector-curvature="0" />
|
|
119
|
+
<path
|
|
120
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
121
|
+
d="m 355.21875,240.9375 0,37.125 1,0 0,-37.125 -1,0 z"
|
|
122
|
+
id="path3017"
|
|
123
|
+
inkscape:connector-curvature="0" />
|
|
124
|
+
<path
|
|
125
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
126
|
+
d="m 176.28125,202.65625 0,393.28125 1,0 0,-393.28125 -1,0 z"
|
|
127
|
+
id="path3019"
|
|
128
|
+
inkscape:connector-curvature="0" />
|
|
129
|
+
<path
|
|
130
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
131
|
+
d="m 355.71875,409 -0.125,0.0312 L 177,455.8125 l -1.78125,0.46875 1.78125,0.5 L 488.28125,545 l 0.15625,0.0312 0.125,-0.0625 156.71875,-56.25 1.46875,-0.53125 -1.53125,-0.40625 -289.375,-78.75 -0.125,-0.0312 z m 0,1.03125 287.6875,78.28125 L 488.375,544 179.03125,456.3125 355.71875,410.03125 z"
|
|
132
|
+
id="path3021"
|
|
133
|
+
inkscape:connector-curvature="0" />
|
|
134
|
+
<path
|
|
135
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
136
|
+
d="m 355.71875,544 -0.15625,0.0312 -178.5625,52.3125 0.28125,0.96875 178.4375,-52.28125 289.59375,80.25 0.28125,-0.96875 -289.75,-80.28125 -0.125,-0.0312 z"
|
|
137
|
+
id="path3023"
|
|
138
|
+
inkscape:connector-curvature="0" />
|
|
139
|
+
<path
|
|
140
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
141
|
+
d="m 355.21875,374.34375 0,35.15625 1,0 0,-35.15625 -1,0 z"
|
|
142
|
+
id="path3025"
|
|
143
|
+
inkscape:connector-curvature="0" />
|
|
144
|
+
<path
|
|
145
|
+
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans;stroke-opacity:1;stroke-miterlimit:30;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
|
|
146
|
+
d="m 355.1875,507.03125 0,37.4375 1.03125,0 0,-37.4375 -1.03125,0 z"
|
|
147
|
+
id="path3027"
|
|
148
|
+
inkscape:connector-curvature="0" />
|
|
149
|
+
</g>
|
|
150
|
+
</svg>
|